From lattner at cs.uiuc.edu Mon Feb 23 00:01:02 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 00:01:02 2004 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200402230600.AAA07931@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: InstructionCombining.cpp updated: 1.158 -> 1.159 --- Log message: Implement mul.ll:test11 --- Diffs of the changes: (+7 -6) Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.158 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.159 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.158 Sun Feb 22 23:47:48 2004 +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Mon Feb 23 00:00:11 2004 @@ -616,12 +616,13 @@ Value *SCIOp0 = SCI->getOperand(0), *SCIOp1 = SCI->getOperand(1); const Type *SCOpTy = SCIOp0->getType(); - // If the source is X < 0, and X is a signed integer type, convert this - // multiply into a shift/and combination. - if (SCI->getOpcode() == Instruction::SetLT && - isa(SCIOp1) && cast(SCIOp1)->isNullValue() && - SCOpTy->isInteger() && SCOpTy->isSigned()) { - + // If the source is X < 0 or X <= -1, and X is a signed integer type, + // convert this multiply into a shift/and combination. + if (SCOpTy->isSigned() && isa(SCIOp1) && + ((SCI->getOpcode() == Instruction::SetLT && + cast(SCIOp1)->isNullValue()) || + (SCI->getOpcode() == Instruction::SetLE && + cast(SCIOp1)->isAllOnesValue()))) { // Shift the X value right to turn it into "all signbits". Constant *Amt = ConstantUInt::get(Type::UByteTy, SCOpTy->getPrimitiveSize()*8-1); From lattner at cs.uiuc.edu Mon Feb 23 00:01:05 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 00:01:05 2004 Subject: [llvm-commits] CVS: llvm/test/Regression/Transforms/InstCombine/mul.ll Message-ID: <200402230600.AAA07920@zion.cs.uiuc.edu> Changes in directory llvm/test/Regression/Transforms/InstCombine: mul.ll updated: 1.11 -> 1.12 --- Log message: Add a slight variant of test10 --- Diffs of the changes: (+7 -0) Index: llvm/test/Regression/Transforms/InstCombine/mul.ll diff -u llvm/test/Regression/Transforms/InstCombine/mul.ll:1.11 llvm/test/Regression/Transforms/InstCombine/mul.ll:1.12 --- llvm/test/Regression/Transforms/InstCombine/mul.ll:1.11 Sun Feb 22 23:38:47 2004 +++ llvm/test/Regression/Transforms/InstCombine/mul.ll Sun Feb 22 23:59:52 2004 @@ -58,3 +58,10 @@ ret uint %e } +uint %test11(int %a, uint %b) { + %c = setle int %a, -1 + %d = cast bool %c to uint + %e = mul uint %d, %b ; e = b & (a >> 31) + ret uint %e +} + From alkis at cs.uiuc.edu Mon Feb 23 00:11:03 2004 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Mon Feb 23 00:11:03 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/PhysRegTracker.h RegAllocLinearScan.cpp Message-ID: <200402230610.AAA10286@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: PhysRegTracker.h updated: 1.3 -> 1.4 RegAllocLinearScan.cpp updated: 1.58 -> 1.59 --- Log message: Improved PhysRegTracker interface. RegAlloc lazily allocates the register tracker using a std::auto_ptr --- Diffs of the changes: (+21 -23) Index: llvm/lib/CodeGen/PhysRegTracker.h diff -u llvm/lib/CodeGen/PhysRegTracker.h:1.3 llvm/lib/CodeGen/PhysRegTracker.h:1.4 --- llvm/lib/CodeGen/PhysRegTracker.h:1.3 Sun Feb 22 19:57:39 2004 +++ llvm/lib/CodeGen/PhysRegTracker.h Mon Feb 23 00:10:13 2004 @@ -17,7 +17,7 @@ #ifndef LLVM_CODEGEN_PHYSREGTRACKER_H #define LLVM_CODEGEN_PHYSREGTRACKER_H -#include "llvm/CodeGen/MachineFunction.h" +#include "llvm/Target/MRegisterInfo.h" namespace llvm { @@ -26,11 +26,9 @@ std::vector regUse_; public: - PhysRegTracker(MachineFunction* mf) - : mri_(mf ? mf->getTarget().getRegisterInfo() : NULL) { - if (mri_) { - regUse_.assign(mri_->getNumRegs(), 0); - } + PhysRegTracker(const MRegisterInfo& mri) + : mri_(&mri), + regUse_(mri_->getNumRegs(), 0) { } PhysRegTracker(const PhysRegTracker& rhs) Index: llvm/lib/CodeGen/RegAllocLinearScan.cpp diff -u llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.58 llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.59 --- llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.58 Sun Feb 22 19:25:05 2004 +++ llvm/lib/CodeGen/RegAllocLinearScan.cpp Mon Feb 23 00:10:13 2004 @@ -45,7 +45,7 @@ typedef std::list IntervalPtrs; IntervalPtrs unhandled_, fixed_, active_, inactive_, handled_; - PhysRegTracker prt_; + std::auto_ptr prt_; typedef std::map Virt2PhysMap; Virt2PhysMap v2pMap_; @@ -198,7 +198,7 @@ tii_ = &tm_->getInstrInfo(); mri_ = tm_->getRegisterInfo(); li_ = &getAnalysis(); - prt_ = PhysRegTracker(mf_); + if (!prt_.get()) prt_.reset(new PhysRegTracker(*mri_)); initIntervalSets(li_->getIntervals()); @@ -239,7 +239,7 @@ // if this register is fixed we are done if (MRegisterInfo::isPhysicalRegister(cur->reg)) { - prt_.addRegUse(cur->reg); + prt_->addRegUse(cur->reg); active_.push_back(cur); handled_.push_back(cur); } @@ -262,7 +262,7 @@ if (MRegisterInfo::isVirtualRegister(reg)) { reg = v2pMap_[reg]; } - prt_.delRegUse(reg); + prt_->delRegUse(reg); } DEBUG(printVirtRegAssignment()); @@ -355,7 +355,7 @@ if (MRegisterInfo::isVirtualRegister(reg)) { reg = v2pMap_[reg]; } - prt_.delRegUse(reg); + prt_->delRegUse(reg); // remove from active i = active_.erase(i); } @@ -365,7 +365,7 @@ if (MRegisterInfo::isVirtualRegister(reg)) { reg = v2pMap_[reg]; } - prt_.delRegUse(reg); + prt_->delRegUse(reg); // add to inactive inactive_.push_back(*i); // remove from active @@ -395,7 +395,7 @@ if (MRegisterInfo::isVirtualRegister(reg)) { reg = v2pMap_[reg]; } - prt_.addRegUse(reg); + prt_->addRegUse(reg); // add to active active_.push_back(*i); // remove from inactive @@ -418,7 +418,7 @@ { DEBUG(std::cerr << "\tallocating current interval: "); - PhysRegTracker backupPrt = prt_; + PhysRegTracker backupPrt = *prt_; spillWeights_.assign(mri_->getNumRegs(), 0.0); @@ -439,7 +439,7 @@ unsigned reg = (*i)->reg; if (MRegisterInfo::isVirtualRegister(reg)) reg = v2pMap_[reg]; - prt_.addRegUse(reg); + prt_->addRegUse(reg); updateSpillWeights(reg, (*i)->weight); } } @@ -450,14 +450,14 @@ e = fixed_.end(); i != e; ++i) { if (cur->overlaps(**i)) { unsigned reg = (*i)->reg; - prt_.addRegUse(reg); + prt_->addRegUse(reg); updateSpillWeights(reg, (*i)->weight); } } unsigned physReg = getFreePhysReg(cur); // restore the physical register tracker - prt_ = backupPrt; + *prt_ = backupPrt; // if we find a free register, we are done: assign this virtual to // the free physical register and add this interval to the active // list. @@ -565,12 +565,12 @@ active_.erase(it); if (MRegisterInfo::isPhysicalRegister(i->reg)) { fixed_.push_front(i); - prt_.delRegUse(i->reg); + prt_->delRegUse(i->reg); } else { Virt2PhysMap::iterator v2pIt = v2pMap_.find(i->reg); clearVirtReg(v2pIt); - prt_.delRegUse(v2pIt->second); + prt_->delRegUse(v2pIt->second); if (i->spilled()) { if (!i->empty()) { IntervalPtrs::iterator it = unhandled_.begin(); @@ -625,10 +625,10 @@ DEBUG(std::cerr << "\t\t\tundo changes for: " << **i << '\n'); active_.push_back(*i); if (MRegisterInfo::isPhysicalRegister((*i)->reg)) - prt_.addRegUse((*i)->reg); + prt_->addRegUse((*i)->reg); else { assert(v2pMap_.count((*i)->reg)); - prt_.addRegUse(v2pMap_.find((*i)->reg)->second); + prt_->addRegUse(v2pMap_.find((*i)->reg)->second); } } } @@ -706,7 +706,7 @@ for (TargetRegisterClass::iterator i = rc->allocation_order_begin(*mf_); i != rc->allocation_order_end(*mf_); ++i) { unsigned reg = *i; - if (prt_.isRegAvail(reg)) + if (prt_->isRegAvail(reg)) return reg; } return 0; @@ -720,7 +720,7 @@ tie(it, inserted) = v2pMap_.insert(std::make_pair(virtReg, physReg)); assert(inserted && "attempting to assign a virt->phys mapping to an " "already mapped register"); - prt_.addRegUse(physReg); + prt_->addRegUse(physReg); return it; } From lattner at cs.uiuc.edu Mon Feb 23 00:38:04 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 00:38:04 2004 Subject: [llvm-commits] CVS: llvm/test/Regression/Transforms/InstCombine/mul.ll Message-ID: <200402230637.AAA22112@zion.cs.uiuc.edu> Changes in directory llvm/test/Regression/Transforms/InstCombine: mul.ll updated: 1.12 -> 1.13 --- Log message: Handle the unsigned form as well --- Diffs of the changes: (+7 -0) Index: llvm/test/Regression/Transforms/InstCombine/mul.ll diff -u llvm/test/Regression/Transforms/InstCombine/mul.ll:1.12 llvm/test/Regression/Transforms/InstCombine/mul.ll:1.13 --- llvm/test/Regression/Transforms/InstCombine/mul.ll:1.12 Sun Feb 22 23:59:52 2004 +++ llvm/test/Regression/Transforms/InstCombine/mul.ll Mon Feb 23 00:37:33 2004 @@ -65,3 +65,10 @@ ret uint %e } +uint %test11(ubyte %a, uint %b) { + %c = setgt ubyte %a, 127 + %d = cast bool %c to uint + %e = mul uint %d, %b ; e = b & (a >> 31) + ret uint %e +} + From lattner at cs.uiuc.edu Mon Feb 23 00:39:05 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 00:39:05 2004 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200402230638.AAA22124@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: InstructionCombining.cpp updated: 1.159 -> 1.160 --- Log message: Refactor some code. In the mul - setcc folding case, we really care about whether this is the sign bit or not, so check unsigned comparisons as well. --- Diffs of the changes: (+63 -32) Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.159 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.160 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.159 Mon Feb 23 00:00:11 2004 +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Mon Feb 23 00:38:22 2004 @@ -116,12 +116,13 @@ // InsertNewInstBefore - insert an instruction New before instruction Old // in the program. Add the new instruction to the worklist. // - void InsertNewInstBefore(Instruction *New, Instruction &Old) { + Value *InsertNewInstBefore(Instruction *New, Instruction &Old) { assert(New && New->getParent() == 0 && "New instruction already inserted into a basic block!"); BasicBlock *BB = Old.getParent(); BB->getInstList().insert(&Old, New); // Insert inst WorkList.push_back(New); // Add to worklist + return New; } public: @@ -173,6 +174,31 @@ return V->hasOneUse() || isa(V); } +// getSignedIntegralType - Given an unsigned integral type, return the signed +// version of it that has the same size. +static const Type *getSignedIntegralType(const Type *Ty) { + switch (Ty->getPrimitiveID()) { + default: assert(0 && "Invalid unsigned integer type!"); abort(); + case Type::UByteTyID: return Type::SByteTy; + case Type::UShortTyID: return Type::ShortTy; + case Type::UIntTyID: return Type::IntTy; + case Type::ULongTyID: return Type::LongTy; + } +} + +// getPromotedType - Return the specified type promoted as it would be to pass +// though a va_arg area... +static const Type *getPromotedType(const Type *Ty) { + switch (Ty->getPrimitiveID()) { + case Type::SByteTyID: + case Type::ShortTyID: return Type::IntTy; + case Type::UByteTyID: + case Type::UShortTyID: return Type::UIntTy; + case Type::FloatTyID: return Type::DoubleTy; + default: return Ty; + } +} + // SimplifyCommutative - This performs a few simplifications for commutative // operators: // @@ -557,6 +583,26 @@ return 0; } +/// isSignBitCheck - Given an exploded setcc instruction, return true if it is +/// really just returns true if the most significant (sign) bit is set. +static bool isSignBitCheck(unsigned Opcode, Value *LHS, ConstantInt *RHS) { + if (RHS->getType()->isSigned()) { + // True if source is LHS < 0 or LHS <= -1 + return Opcode == Instruction::SetLT && RHS->isNullValue() || + Opcode == Instruction::SetLE && RHS->isAllOnesValue(); + } else { + ConstantUInt *RHSC = cast(RHS); + // True if source is LHS > 127 or LHS >= 128, where the constants depend on + // the size of the integer type. + if (Opcode == Instruction::SetGE) + return RHSC->getValue() == 1ULL<<(RHS->getType()->getPrimitiveSize()*8-1); + if (Opcode == Instruction::SetGT) + return RHSC->getValue() == + (1ULL << (RHS->getType()->getPrimitiveSize()*8-1))-1; + } + return false; +} + Instruction *InstCombiner::visitMul(BinaryOperator &I) { bool Changed = SimplifyCommutative(I); Value *Op0 = I.getOperand(0); @@ -616,23 +662,28 @@ Value *SCIOp0 = SCI->getOperand(0), *SCIOp1 = SCI->getOperand(1); const Type *SCOpTy = SCIOp0->getType(); - // If the source is X < 0 or X <= -1, and X is a signed integer type, - // convert this multiply into a shift/and combination. - if (SCOpTy->isSigned() && isa(SCIOp1) && - ((SCI->getOpcode() == Instruction::SetLT && - cast(SCIOp1)->isNullValue()) || - (SCI->getOpcode() == Instruction::SetLE && - cast(SCIOp1)->isAllOnesValue()))) { + // If the setcc is true iff the sign bit of X is set, then convert this + // multiply into a shift/and combination. + if (isa(SCIOp1) && + isSignBitCheck(SCI->getOpcode(), SCIOp0, cast(SCIOp1))) { // Shift the X value right to turn it into "all signbits". Constant *Amt = ConstantUInt::get(Type::UByteTy, SCOpTy->getPrimitiveSize()*8-1); - Value *V = new ShiftInst(Instruction::Shr, SCIOp0, Amt, - BoolCast->getName()+".mask", &I); + if (SCIOp0->getType()->isUnsigned()) { + const Type *NewTy = getSignedIntegralType(SCIOp0->getType()); + SCIOp0 = InsertNewInstBefore(new CastInst(SCIOp0, NewTy, + SCIOp0->getName()), I); + } + + Value *V = + InsertNewInstBefore(new ShiftInst(Instruction::Shr, SCIOp0, Amt, + BoolCast->getOperand(0)->getName()+ + ".mask"), I); // If the multiply type is not the same as the source type, sign extend // or truncate to the multiply type. if (I.getType() != V->getType()) - V = new CastInst(V, I.getType(), V->getName(), &I); + V = InsertNewInstBefore(new CastInst(V, I.getType(), V->getName()),I); Value *OtherOp = Op0 == BoolCast ? I.getOperand(1) : Op0; return BinaryOperator::create(Instruction::And, V, OtherOp); @@ -1314,14 +1365,7 @@ Value *X = BO->getOperand(0); // If 'X' is not signed, insert a cast now... if (!BOC->getType()->isSigned()) { - const Type *DestTy; - switch (BOC->getType()->getPrimitiveID()) { - case Type::UByteTyID: DestTy = Type::SByteTy; break; - case Type::UShortTyID: DestTy = Type::ShortTy; break; - case Type::UIntTyID: DestTy = Type::IntTy; break; - case Type::ULongTyID: DestTy = Type::LongTy; break; - default: assert(0 && "Invalid unsigned integer type!"); abort(); - } + const Type *DestTy = getSignedIntegralType(BOC->getType()); CastInst *NewCI = new CastInst(X,DestTy,X->getName()+".signed"); InsertNewInstBefore(NewCI, I); X = NewCI; @@ -1827,19 +1871,6 @@ // Instruction *InstCombiner::visitInvokeInst(InvokeInst &II) { return visitCallSite(&II); -} - -// getPromotedType - Return the specified type promoted as it would be to pass -// though a va_arg area... -static const Type *getPromotedType(const Type *Ty) { - switch (Ty->getPrimitiveID()) { - case Type::SByteTyID: - case Type::ShortTyID: return Type::IntTy; - case Type::UByteTyID: - case Type::UShortTyID: return Type::UIntTy; - case Type::FloatTyID: return Type::DoubleTy; - default: return Ty; - } } // visitCallSite - Improvements for call and invoke instructions. From lattner at cs.uiuc.edu Mon Feb 23 01:17:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 01:17:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200402230716.BAA25791@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: InstructionCombining.cpp updated: 1.160 -> 1.161 --- Log message: Implement cast.ll::test14/15 --- Diffs of the changes: (+37 -0) Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.160 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.161 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.160 Mon Feb 23 00:38:22 2004 +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Mon Feb 23 01:16:20 2004 @@ -1378,6 +1378,43 @@ default: break; } } + } else { // Not a SetEQ/SetNE + // If the LHS is a cast from an integral value of the same size, + if (CastInst *Cast = dyn_cast(Op0)) { + Value *CastOp = Cast->getOperand(0); + const Type *SrcTy = CastOp->getType(); + unsigned SrcTySize = SrcTy->getPrimitiveSize(); + if (SrcTy != Cast->getType() && SrcTy->isInteger() && + SrcTySize == Cast->getType()->getPrimitiveSize()) { + assert((SrcTy->isSigned() ^ Cast->getType()->isSigned()) && + "Source and destination signednesses should differ!"); + if (Cast->getType()->isSigned()) { + // If this is a signed comparison, check for comparisons in the + // vicinity of zero. + if (I.getOpcode() == Instruction::SetLT && CI->isNullValue()) + // X < 0 => x > 127 + return BinaryOperator::create(Instruction::SetGT, CastOp, + ConstantUInt::get(SrcTy, (1ULL << (SrcTySize*8-1))-1)); + else if (I.getOpcode() == Instruction::SetGT && + cast(CI)->getValue() == -1) + // X > -1 => x < 128 + return BinaryOperator::create(Instruction::SetGT, CastOp, + ConstantUInt::get(SrcTy, 1ULL << (SrcTySize*8-1))); + } else { + ConstantUInt *CUI = cast(CI); + if (I.getOpcode() == Instruction::SetLT && + CUI->getValue() == 1ULL << (SrcTySize*8-1)) + // X < 128 => X > -1 + return BinaryOperator::create(Instruction::SetGT, CastOp, + ConstantSInt::get(SrcTy, -1)); + else if (I.getOpcode() == Instruction::SetGT && + CUI->getValue() == (1ULL << (SrcTySize*8-1))-1) + // X > 127 => X < 0 + return BinaryOperator::create(Instruction::SetLT, CastOp, + Constant::getNullValue(SrcTy)); + } + } + } } // Check to see if we are comparing against the minimum or maximum value... From lattner at cs.uiuc.edu Mon Feb 23 01:17:04 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 01:17:04 2004 Subject: [llvm-commits] CVS: llvm/test/Regression/Transforms/InstCombine/cast.ll Message-ID: <200402230716.BAA25780@zion.cs.uiuc.edu> Changes in directory llvm/test/Regression/Transforms/InstCombine: cast.ll updated: 1.17 -> 1.18 --- Log message: Add tests for casts that should be eliminated --- Diffs of the changes: (+13 -1) Index: llvm/test/Regression/Transforms/InstCombine/cast.ll diff -u llvm/test/Regression/Transforms/InstCombine/cast.ll:1.17 llvm/test/Regression/Transforms/InstCombine/cast.ll:1.18 --- llvm/test/Regression/Transforms/InstCombine/cast.ll:1.17 Sat Feb 21 23:24:09 2004 +++ llvm/test/Regression/Transforms/InstCombine/cast.ll Mon Feb 23 01:16:03 2004 @@ -82,8 +82,20 @@ ret int* %c } - ubyte *%test13(long %A) { %c = getelementptr [0 x ubyte]* cast ([32832 x ubyte]* %inbuf to [0 x ubyte]*), long 0, long %A ret ubyte* %c } + +bool %test14(sbyte %A) { + %B = cast sbyte %A to ubyte + %X = setlt ubyte %B, 128 ; setge %A, 0 + ret bool %X +} + +bool %test15(ubyte %A) { + %B = cast ubyte %A to sbyte + %X = setlt sbyte %B, 0 ; setgt %A, 127 + ret bool %X +} + From lattner at cs.uiuc.edu Mon Feb 23 01:30:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 01:30:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/InstSelectSimple.cpp Message-ID: <200402230729.BAA27419@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: InstSelectSimple.cpp updated: 1.171 -> 1.172 --- Log message: We were forgetting to add FP_REG_KILL instructions to basic blocks which will eventually get an assignment due to elimination of PHIs. --- Diffs of the changes: (+27 -15) Index: llvm/lib/Target/X86/InstSelectSimple.cpp diff -u llvm/lib/Target/X86/InstSelectSimple.cpp:1.171 llvm/lib/Target/X86/InstSelectSimple.cpp:1.172 --- llvm/lib/Target/X86/InstSelectSimple.cpp:1.171 Sun Feb 22 21:21:41 2004 +++ llvm/lib/Target/X86/InstSelectSimple.cpp Mon Feb 23 01:29:45 2004 @@ -688,23 +688,35 @@ if (I->getOperand(i).isRegister()) { unsigned Reg = I->getOperand(i).getReg(); if (MRegisterInfo::isVirtualRegister(Reg)) - if (RegMap.getRegClass(Reg)->getSize() == 10) { - UsesFPReg = true; - break; - } + if (RegMap.getRegClass(Reg)->getSize() == 10) + goto UsesFPReg; + } + + // If we haven't found an FP register use or def in this basic block, check + // to see if any of our successors has an FP PHI node, which will cause a + // copy to be inserted into this block. + if (!UsesFPReg) + for (succ_const_iterator SI = succ_begin(BB->getBasicBlock()), + E = succ_end(BB->getBasicBlock()); SI != E; ++SI) { + MachineBasicBlock *SBB = MBBMap[*SI]; + for (MachineBasicBlock::iterator I = SBB->begin(); + I != SBB->end() && I->getOpcode() == X86::PHI; ++I) { + if (RegMap.getRegClass(I->getOperand(0).getReg())->getSize() == 10) + goto UsesFPReg; } - if (UsesFPReg) { - // Okay, this block uses an FP register. If the block has successors (ie, - // it's not an unwind/return), insert the FP_REG_KILL instruction. - if (BB->getBasicBlock()->getTerminator()->getNumSuccessors() && - RequiresFPRegKill(BB->getBasicBlock())) { - // Rewind past any terminator instructions that might exist. - MachineBasicBlock::iterator I = BB->end(); - while (I != BB->begin() && TII.isTerminatorInstr((--I)->getOpcode())); - ++I; - BMI(BB, I, X86::FP_REG_KILL, 0); - ++NumFPKill; } + continue; + UsesFPReg: + // Okay, this block uses an FP register. If the block has successors (ie, + // it's not an unwind/return), insert the FP_REG_KILL instruction. + if (BB->getBasicBlock()->getTerminator()->getNumSuccessors() && + RequiresFPRegKill(BB->getBasicBlock())) { + // Rewind past any terminator instructions that might exist. + MachineBasicBlock::iterator I = BB->end(); + while (I != BB->begin() && TII.isTerminatorInstr((--I)->getOpcode())); + ++I; + BMI(BB, I, X86::FP_REG_KILL, 0); + ++NumFPKill; } } } From lattner at cs.uiuc.edu Mon Feb 23 01:43:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 01:43:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/InstSelectSimple.cpp Message-ID: <200402230742.BAA30484@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: InstSelectSimple.cpp updated: 1.172 -> 1.173 --- Log message: Simplify code a bit, don't go off the end of the block, now that the current block we are in might be empty --- Diffs of the changes: (+9 -11) Index: llvm/lib/Target/X86/InstSelectSimple.cpp diff -u llvm/lib/Target/X86/InstSelectSimple.cpp:1.172 llvm/lib/Target/X86/InstSelectSimple.cpp:1.173 --- llvm/lib/Target/X86/InstSelectSimple.cpp:1.172 Mon Feb 23 01:29:45 2004 +++ llvm/lib/Target/X86/InstSelectSimple.cpp Mon Feb 23 01:42:19 2004 @@ -682,7 +682,6 @@ const TargetInstrInfo &TII = TM.getInstrInfo(); for (MachineFunction::iterator BB = F->begin(), E = F->end(); BB != E; ++BB) { - bool UsesFPReg = false; for (MachineBasicBlock::iterator I = BB->begin(), E = BB->end(); I!=E; ++I) for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) if (I->getOperand(i).isRegister()) { @@ -695,16 +694,15 @@ // If we haven't found an FP register use or def in this basic block, check // to see if any of our successors has an FP PHI node, which will cause a // copy to be inserted into this block. - if (!UsesFPReg) - for (succ_const_iterator SI = succ_begin(BB->getBasicBlock()), - E = succ_end(BB->getBasicBlock()); SI != E; ++SI) { - MachineBasicBlock *SBB = MBBMap[*SI]; - for (MachineBasicBlock::iterator I = SBB->begin(); - I != SBB->end() && I->getOpcode() == X86::PHI; ++I) { - if (RegMap.getRegClass(I->getOperand(0).getReg())->getSize() == 10) - goto UsesFPReg; - } + for (succ_const_iterator SI = succ_begin(BB->getBasicBlock()), + E = succ_end(BB->getBasicBlock()); SI != E; ++SI) { + MachineBasicBlock *SBB = MBBMap[*SI]; + for (MachineBasicBlock::iterator I = SBB->begin(); + I != SBB->end() && I->getOpcode() == X86::PHI; ++I) { + if (RegMap.getRegClass(I->getOperand(0).getReg())->getSize() == 10) + goto UsesFPReg; } + } continue; UsesFPReg: // Okay, this block uses an FP register. If the block has successors (ie, @@ -714,7 +712,7 @@ // Rewind past any terminator instructions that might exist. MachineBasicBlock::iterator I = BB->end(); while (I != BB->begin() && TII.isTerminatorInstr((--I)->getOpcode())); - ++I; + if (I != BB->end()) ++I; BMI(BB, I, X86::FP_REG_KILL, 0); ++NumFPKill; } From alkis at niobe.cs.uiuc.edu Mon Feb 23 10:22:02 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Mon Feb 23 10:22:02 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/TEST.nightly.report TEST.nightly.Makefile Message-ID: <200402231621.i1NGLMl08639@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs: TEST.nightly.report updated: 1.21 -> 1.22 TEST.nightly.Makefile updated: 1.26 -> 1.27 --- Log message: Add jit-ls column to nightly tests. --- Diffs of the changes: (+19 -1) Index: llvm/test/Programs/TEST.nightly.report diff -u llvm/test/Programs/TEST.nightly.report:1.21 llvm/test/Programs/TEST.nightly.report:1.22 --- llvm/test/Programs/TEST.nightly.report:1.21 Sun Jan 11 22:13:53 2004 +++ llvm/test/Programs/TEST.nightly.report Mon Feb 23 10:21:11 2004 @@ -73,6 +73,7 @@ ["LLC" , 'TEST-RESULT-llc-time: real\s*([.0-9m:]+)', \&FormatTime], ["LLC-LS" , 'TEST-RESULT-llc-ls-time: real\s*([.0-9m:]+)', \&FormatTime], ["JIT" , 'TEST-RESULT-jit-time: real\s*([.0-9m:]+)', \&FormatTime], + ["JIT-LS" , 'TEST-RESULT-jit-ls-time: real\s*([.0-9m:]+)', \&FormatTime], ["GCC/CBE" , \&GCCCBERatio], ["GCC/LLC" , \&GCCLLCRatio], ["GCC/LLC-LS" , \&GCCLLC_LSRatio] Index: llvm/test/Programs/TEST.nightly.Makefile diff -u llvm/test/Programs/TEST.nightly.Makefile:1.26 llvm/test/Programs/TEST.nightly.Makefile:1.27 --- llvm/test/Programs/TEST.nightly.Makefile:1.26 Thu Dec 18 21:35:27 2003 +++ llvm/test/Programs/TEST.nightly.Makefile Mon Feb 23 10:21:11 2004 @@ -12,7 +12,7 @@ REPORTS_TO_GEN := compile nat llc cbe jit ifdef ENABLE_LINEARSCAN -REPORTS_TO_GEN += llc-ls +REPORTS_TO_GEN += llc-ls jit-ls endif REPORTS_SUFFIX := $(addsuffix .report.txt, $(REPORTS_TO_GEN)) @@ -117,6 +117,23 @@ echo >> $@;\ else \ echo "TEST-FAIL: jit $(RELDIR)/$*" >> $@;\ + fi + +# JIT-linearscan tests +$(PROGRAMS_TO_TEST:%=Output/%.nightly.jit-ls.report.txt): \ +Output/%.nightly.jit-ls.report.txt: Output/%.llvm.bc Output/%.exe-jit-ls $(JIT) + @echo > $@ + -head -n 100 Output/$*.exe-jit-ls >> $@ + @-if test -f Output/$*.exe-jit-ls; then \ + echo "TEST-PASS: jit-ls $(RELDIR)/$*" >> $@;\ + $(JIT) $< -o /dev/null -f $(TIMEOPT) >> $@ 2>&1; \ + printf "TEST-RESULT-jit-ls: " >> $@;\ + grep "Total Execution Time" $@.info >> $@;\ + printf "TEST-RESULT-jit-ls-time: " >> $@;\ + grep "^real" Output/$*.out-jit-ls.time >> $@;\ + echo >> $@;\ + else \ + echo "TEST-FAIL: jit-ls $(RELDIR)/$*" >> $@;\ fi # Overall tests: just run subordinate tests From criswell at cs.uiuc.edu Mon Feb 23 10:52:01 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Feb 23 10:52:01 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/ Message-ID: <200402231651.KAA32685@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk: --- Log message: Directory /home/vadve/shared/PublicCVS/llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk added to the repository --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Mon Feb 23 10:53:02 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Feb 23 10:53:02 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/ Message-ID: <200402231652.KAA32701@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT: --- Log message: Directory /home/vadve/shared/PublicCVS/llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT added to the repository --- Diffs of the changes: (+0 -0) From alkis at niobe.cs.uiuc.edu Mon Feb 23 10:56:02 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Mon Feb 23 10:56:02 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/TEST.llc.report Message-ID: <200402231655.i1NGtie14591@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs: TEST.llc.report updated: 1.7 -> 1.8 --- Log message: Change column header to be more descriptive. --- Diffs of the changes: (+2 -2) Index: llvm/test/Programs/TEST.llc.report diff -u llvm/test/Programs/TEST.llc.report:1.7 llvm/test/Programs/TEST.llc.report:1.8 --- llvm/test/Programs/TEST.llc.report:1.7 Sat Feb 21 12:21:03 2004 +++ llvm/test/Programs/TEST.llc.report Mon Feb 23 10:55:33 2004 @@ -36,8 +36,8 @@ [], # Sizes ["#MCInsts", '([0-9]+).*Number of machine instrs printed'], - ["#Int" , '([0-9]+).*Number of original intervals'], - ["#IntJoin", '([0-9]+).*Number of intervals after coalescing'], + ["#IntOrig", '([0-9]+).*Number of original intervals'], + ["#IntCoal", '([0-9]+).*Number of intervals after coalescing'], [], # Number of transformations ["#store" , '([0-9]+).*Number of stores added'], From criswell at cs.uiuc.edu Mon Feb 23 11:07:14 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Feb 23 11:07:14 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/README adj.awk prog-small-data.awk prog.awk range.awk words-large.awk words-small.awk Message-ID: <200402231706.LAA00380@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT: README added (r1.1) adj.awk added (r1.1) prog-small-data.awk added (r1.1) prog.awk added (r1.1) range.awk added (r1.1) words-large.awk added (r1.1) words-small.awk added (r1.1) --- Log message: Adding gawk Malloc Benchmark. --- Diffs of the changes: (+96240 -0) Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/README diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/README:1.1 *** /dev/null Mon Feb 23 11:06:10 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/README Mon Feb 23 11:06:00 2004 *************** *** 0 **** --- 1,6 ---- + + Test Inputs to gawk program: + + gawk -f INPUT/prog.awk INPUT/prog-small-data.awk + gawk -f INPUT/adj.awk type=l linelen=70 indent=5 INPUT/words-small.awk + gawk -f INPUT/adj.awk type=l linelen=70 indent=5 INPUT/words-large.awk Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/adj.awk diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/adj.awk:1.1 *** /dev/null Mon Feb 23 11:06:10 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/adj.awk Mon Feb 23 11:06:00 2004 *************** *** 0 **** --- 1,194 ---- + # adj.nawk -- adjust lines of text per options + # + # NOTE: this nawk program is called from the shell script "adj" + # see that script for usage & calling conventions + # + # author: + # Norman Joseph (amanue!oglvee!norm) + + BEGIN { + FS = "\n" + blankline = "^[ \t]*$" + startblank = "^[ \t]+[^ \t]+" + startwords = "^[^ \t]+" + } + + $0 ~ blankline { + if ( type == "b" ) + putline( outline "\n" ) + else + putline( adjust( outline, type ) "\n" ) + putline( "\n" ) + outline = "" + } + + $0 ~ startblank { + if ( outline != "" ) { + if ( type == "b" ) + putline( outline "\n" ) + else + putline( adjust( outline, type ) "\n" ) + } + + firstword = "" + i = 1 + while ( substr( $0, i, 1 ) ~ "[ \t]" ) { + firstword = firstword substr( $0, i, 1 ) + i++ + } + inline = substr( $0, i ) + outline = firstword + + nf = split( inline, word, "[ \t]+" ) + + for ( i = 1; i <= nf; i++ ) { + if ( i == 1 ) { + testlen = length( outline word[i] ) + } else { + testlen = length( outline " " word[i] ) + if ( match( ".!?:;", "\\" substr( outline, length( outline ), 1 )) ) + testlen++ + } + + if ( testlen > linelen ) { + putline( adjust( outline, type ) "\n" ) + outline = "" + } + + if ( outline == "" ) + outline = word[i] + else if ( i == 1 ) + outline = outline word[i] + else { + if ( match( ".!?:;", "\\" substr( outline, length( outline ), 1 )) ) + outline = outline " " word[i] # 2 spaces + else + outline = outline " " word[i] # 1 space + } + } + } + + $0 ~ startwords { + nf = split( $0, word, "[ \t]+" ) + + for ( i = 1; i <= nf; i++ ) { + if ( outline == "" ) + testlen = length( word[i] ) + else { + testlen = length( outline " " word[i] ) + if ( match( ".!?:;", "\\" substr( outline, length( outline ), 1 )) ) + testlen++ + } + + if ( testlen > linelen ) { + putline( adjust( outline, type ) "\n" ) + outline = "" + } + + if ( outline == "" ) + outline = word[i] + else { + if ( match( ".!?:;", "\\" substr( outline, length( outline ), 1 )) ) + outline = outline " " word[i] # 2 spaces + else + outline = outline " " word[i] # 1 space + } + } + } + + END { + if ( type == "b" ) + putline( outline "\n" ) + else + putline( adjust( outline, type ) "\n" ) + printf ("Checksums: e = %d k = %d s = %d\n", ecount, kcount, scount); + } + + + # + # -- support functions -- + # + + function putline( line, fmt ) + { + ecount += (split(line, dummy, "e") -1) + kcount += (split(line, dummy, "k") -1) + scount += (split(line, dummy, "s") -1) + + # if ( indent ) { + # fmt = "%" indent "s%s" + # printf( fmt, " ", line ) + # } else + # printf( "%s", line ) + } + + + function adjust( line, type, fill, fmt ) + { + if ( type != "l" ) + fill = linelen - length( line ) + + if ( fill > 0 ) { + if ( type == "c" ) { + fmt = "%" (fill+1)/2 "s%s" + line = sprintf( fmt, " ", line ) + } else if ( type == "r" ) { + fmt = "%" fill "s%s" + line = sprintf( fmt, " ", line ) + } else if ( type == "b" ) { + line = fillout( line, fill ) + } + } + + return line + } + + + function fillout( line, need, i, newline, nextchar, blankseen ) + { + while ( need ) { + newline = "" + blankseen = 0 + + if ( dir == 0 ) { + for ( i = 1; i <= length( line ); i++ ) { + nextchar = substr( line, i, 1 ) + if ( need ) { + if ( nextchar == " " ) { + if ( ! blankseen ) { + newline = newline " " + need-- + blankseen = 1 + } + } else { + blankseen = 0 + } + } + newline = newline nextchar + } + + } else if ( dir == 1 ) { + for ( i = length( line ); i >= 1; i-- ) { + nextchar = substr( line, i, 1 ) + if ( need ) { + if ( nextchar == " " ) { + if ( ! blankseen ) { + newline = " " newline + need-- + blankseen = 1 + } + } else { + blankseen = 0 + } + } + newline = nextchar newline + } + } + + line = newline + + dir = 1 - dir + } + + return line + } Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/prog-small-data.awk diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/prog-small-data.awk:1.1 *** /dev/null Mon Feb 23 11:06:10 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/prog-small-data.awk Mon Feb 23 11:06:00 2004 *************** *** 0 **** --- 1,629 ---- + # Memory configuration: + # word size 4, page size(words) 1024, pages per segment 20000 + # gc semispaces(words) 5000000, 5000000, 5000000, 6000000 + # gc threshold 128000 500000 1000000 796094581 + # promote count 3 3 3 795046760 + # stack simulation: top n 250, opoints 100 + # file prefix: /tmp/zorn/e/results/slcomp128k + # + # Simulation configuration: + # test id: slcomp128k + # gc algorithm: stcp + # stack simulation on, cache tracing on, wide output on + # hash table size 500009 + # availability: memory size 8000000, cache size 128000 + # expected: urefs 3000000, refs 5000000, cycles 0 + # + # Stack simulation: + # S1 start 40000000, size 30000000, warmstart 3000000, after gc 100000 + # S2 start -1, size 50000, warmstart 0, after gc 100000 + # Cache traces: + # S1 start 40000000, size 20000000 + # S2 start -1, size 50000 + # + __address_range_invalidation 317501 317501 + __address_range_invalidation 643065 643065 + __address_range_invalidation 643065 643065 + __address_range_invalidation 738639 738639 + __print_curr_data 738639 738639 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __aobj 0 0 0 3810 88 167 14640 4030 4475 0 88799 0 30 9838 1 2946 624 0 129448 + __awrd 0 0 0 15024 176 668 111910 959452 72366 0 177598 0 120 59028 6 65192 5496 0 1467036 + __cobj 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __cwrd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __pobj 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __pwrd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __remscans 0 + __dirty_pages 126 0 0 58 + __gcbegin 0 738639 738639 + __gcends 802670 738639 + __pause_length 64031 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __lvo0 0 0 0 1 0 0 225 9 0 0 4437 0 0 220 0 256 0 0 5148 + __lvo1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvo2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvo3 0 0 0 0 0 0 14 0 10 0 1130 0 0 402 1 14 3 0 1574 + __lvo4 0 0 0 1 0 0 239 9 10 0 5567 0 0 622 1 270 3 0 6722 + __lvs0 0 0 0 4 0 0 1104 1906 0 0 8874 0 0 1320 0 4740 0 0 17948 + __lvs1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvs2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvs3 0 0 0 0 0 0 296 0 118 0 2260 0 0 2412 6 1608 30 0 6730 + __lvs4 0 0 0 4 0 0 1400 1906 118 0 11134 0 0 3732 6 6348 30 0 24678 + __cgc_scan 5155 + __cgc_forward 7583 + __cgc_deref 14242 + __cgc_test 6310 + __address_range_invalidation 1225900 1161869 + __address_range_invalidation 1521247 1457216 + __print_curr_data 1521247 1457216 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __aobj 0 0 0 4939 0 0 63 11 0 0 34852 0 0 21 0 2630 0 0 42516 + __awrd 0 0 0 19756 0 0 210 2552 0 0 69704 0 0 126 0 36010 0 0 128358 + __cobj 0 0 0 1 0 0 225 9 0 0 4437 0 0 220 0 256 0 0 5148 + __cwrd 0 0 0 4 0 0 1104 1906 0 0 8874 0 0 1320 0 4740 0 0 17948 + __pobj 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __pwrd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __remscans 7 + __dirty_pages 142 0 0 38 + __gcbegin 0 1521247 1457216 + __gcends 1582593 1457216 + __pause_length 61346 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __lvo0 0 0 0 0 0 0 23 11 0 0 2547 0 0 92 0 135 0 0 2808 + __lvo1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvo2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvo3 0 0 0 0 0 0 2 0 2 0 426 0 0 186 1 4 0 0 621 + __lvo4 0 0 0 0 0 0 25 11 2 0 2973 0 0 278 1 139 0 0 3429 + __lvs0 0 0 0 0 0 0 90 2552 0 0 5094 0 0 552 0 2480 0 0 10768 + __lvs1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvs2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvs3 0 0 0 0 0 0 132 0 20 0 852 0 0 1116 6 1092 0 0 3218 + __lvs4 0 0 0 0 0 0 222 2552 20 0 5946 0 0 1668 6 3572 0 0 13986 + __cgc_scan 4559 + __cgc_forward 6938 + __cgc_deref 12091 + __cgc_test 5733 + __address_range_invalidation 2008354 1882977 + __address_range_invalidation 2279276 2153899 + __print_curr_data 2279276 2153899 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __aobj 0 0 0 4341 0 0 120 15 0 0 34027 0 0 50 0 2690 0 0 41243 + __awrd 0 0 0 17352 0 0 408 2256 0 0 68054 0 0 300 0 39870 0 0 128240 + __cobj 0 0 0 1 0 0 248 20 0 0 3897 0 0 241 0 152 0 0 4559 + __cwrd 0 0 0 4 0 0 1194 4458 0 0 7794 0 0 1446 0 3396 0 0 18292 + __pobj 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __pwrd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __remscans 0 + __dirty_pages 129 0 0 50 + __gcbegin 0 2279276 2153899 + __gcends 2335784 2153899 + __pause_length 56508 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __lvo0 0 0 0 0 0 0 51 15 0 0 1379 0 0 50 0 22 0 0 1517 + __lvo1 0 0 0 0 0 0 0 0 0 0 220 0 0 0 0 1 0 0 221 + __lvo2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvo3 0 0 0 0 0 0 4 0 7 0 634 0 0 255 1 8 0 0 909 + __lvo4 0 0 0 0 0 0 55 15 7 0 2233 0 0 305 1 31 0 0 2647 + __lvs0 0 0 0 0 0 0 328 2256 0 0 2758 0 0 300 0 534 0 0 6176 + __lvs1 0 0 0 0 0 0 0 0 0 0 440 0 0 0 0 10 0 0 450 + __lvs2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvs3 0 0 0 0 0 0 268 0 74 0 1268 0 0 1530 6 1398 0 0 4544 + __lvs4 0 0 0 0 0 0 596 2256 74 0 4466 0 0 1830 6 1942 0 0 11170 + __cgc_scan 4331 + __cgc_forward 4886 + __cgc_deref 10151 + __cgc_test 4227 + __address_range_invalidation 2705982 2524097 + __address_range_invalidation 2968599 2786714 + __print_curr_data 2968599 2786714 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __aobj 0 0 0 2808 0 0 297 26 0 0 32692 0 0 135 0 2656 0 0 38614 + __awrd 0 0 0 11180 0 0 1028 1508 0 0 65384 0 0 810 0 48096 0 0 128006 + __cobj 0 0 0 1 0 0 296 35 0 0 3656 0 0 291 0 48 0 0 4327 + __cwrd 0 0 0 4 0 0 1386 6714 0 0 7312 0 0 1746 0 1460 0 0 18622 + __pobj 0 0 0 1 0 0 225 9 0 0 1486 0 0 220 0 19 0 0 1960 + __pwrd 0 0 0 4 0 0 1104 1906 0 0 2972 0 0 1320 0 936 0 0 8242 + __remscans 4 + __dirty_pages 130 3 0 45 + __gcbegin 0 2968599 2786714 + __gcends 3026057 2786714 + __pause_length 57458 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __lvo0 0 0 0 0 0 0 135 26 0 0 2755 0 0 137 0 80 0 0 3133 + __lvo1 0 0 0 0 0 0 1 0 0 0 242 0 0 0 0 5 0 0 248 + __lvo2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvo3 0 0 0 0 0 0 4 0 5 0 731 0 0 250 1 8 0 0 999 + __lvo4 0 0 0 0 0 0 140 26 5 0 3728 0 0 387 1 93 0 0 4380 + __lvs0 0 0 0 0 0 0 542 1508 0 0 5510 0 0 822 0 1350 0 0 9732 + __lvs1 0 0 0 0 0 0 130 0 0 0 484 0 0 0 0 86 0 0 700 + __lvs2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvs3 0 0 0 0 0 0 268 0 50 0 1462 0 0 1500 6 1398 0 0 4684 + __lvs4 0 0 0 0 0 0 940 1508 50 0 7456 0 0 2322 6 2834 0 0 15116 + __cgc_scan 4915 + __cgc_forward 5016 + __cgc_deref 11018 + __cgc_test 4284 + __address_range_invalidation 3338083 3098740 + __address_range_invalidation 3658911 3419568 + __address_range_invalidation 3658911 3419568 + __address_range_invalidation 3658911 3419568 + __address_range_invalidation 3662814 3423471 + __print_curr_data 3662814 3423471 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __aobj 0 0 0 2505 0 0 341 14 0 0 32109 0 0 137 0 2740 0 0 37846 + __awrd 0 0 0 9956 0 0 1150 1282 0 0 64218 0 0 822 0 50974 0 0 128402 + __cobj 0 0 0 0 0 0 206 52 0 0 4344 0 0 206 0 106 0 0 4914 + __cwrd 0 0 0 0 0 0 824 6316 0 0 8688 0 0 1236 0 1506 0 0 18570 + __pobj 0 0 0 0 0 0 21 11 0 0 816 0 0 21 0 11 0 0 880 + __pwrd 0 0 0 0 0 0 84 2552 0 0 1632 0 0 126 0 66 0 0 4460 + __remscans 1 + __dirty_pages 131 4 0 64 + __gcbegin 0 3662814 3423471 + __gcends 3738724 3423471 + __pause_length 75910 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __lvo0 0 0 0 1 0 0 139 14 0 0 3193 0 0 137 0 35 0 0 3519 + __lvo1 0 0 0 0 0 0 1 0 0 0 250 0 0 2 0 6 0 0 259 + __lvo2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvo3 0 0 0 0 0 0 8 0 25 0 2105 0 0 318 1 19 1 0 2477 + __lvo4 0 0 0 1 0 0 148 14 25 0 5548 0 0 457 1 60 1 0 6255 + __lvs0 0 0 0 4 0 0 546 1282 0 0 6386 0 0 822 0 2560 0 0 11600 + __lvs1 0 0 0 0 0 0 130 0 0 0 500 0 0 12 0 152 0 0 794 + __lvs2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvs3 0 0 0 0 0 0 414 0 316 0 4210 0 0 1908 6 2336 10 0 9200 + __lvs4 0 0 0 4 0 0 1090 1282 316 0 11096 0 0 2742 6 5048 10 0 21594 + __cgc_scan 6564 + __cgc_forward 8149 + __cgc_deref 16134 + __cgc_test 6399 + __address_range_invalidation 4195984 3880731 + __address_range_invalidation 4429854 4114601 + __print_curr_data 4429854 4114601 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __aobj 0 0 0 4108 0 0 881 8 0 0 35038 0 0 319 0 2247 0 0 42601 + __awrd 0 0 0 16158 0 0 2954 2052 0 0 70076 0 0 1914 0 34850 0 0 128004 + __cobj 0 0 0 1 0 0 324 55 0 0 5770 0 0 322 0 76 0 0 6548 + __cwrd 0 0 0 4 0 0 1286 5046 0 0 11540 0 0 1932 0 2806 0 0 22614 + __pobj 0 0 0 0 0 0 50 15 0 0 825 0 0 50 0 15 0 0 955 + __pwrd 0 0 0 0 0 0 198 2256 0 0 1650 0 0 300 0 90 0 0 4494 + __remscans 16 + __dirty_pages 129 5 0 56 + __gcbegin 0 4429854 4114601 + __gcends 4511181 4114601 + __pause_length 81327 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __lvo0 0 0 0 0 0 0 307 8 0 0 2043 0 0 314 0 48 0 0 2720 + __lvo1 0 0 0 0 0 0 1 0 0 0 388 0 0 9 0 5 0 0 403 + __lvo2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvo3 0 0 0 0 0 0 6 0 26 0 1457 0 0 440 1 8 0 0 1938 + __lvo4 0 0 0 0 0 0 314 8 26 0 3888 0 0 763 1 61 0 0 5061 + __lvs0 0 0 0 0 0 0 1256 2052 0 0 4086 0 0 1884 0 1958 0 0 11236 + __lvs1 0 0 0 0 0 0 130 0 0 0 776 0 0 54 0 86 0 0 1046 + __lvs2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvs3 0 0 0 0 0 0 272 0 308 0 2914 0 0 2640 6 1398 0 0 7538 + __lvs4 0 0 0 0 0 0 1658 2052 308 0 7776 0 0 4578 6 3442 0 0 19820 + __cgc_scan 6795 + __cgc_forward 8502 + __cgc_deref 16868 + __cgc_test 6481 + __address_range_invalidation 4912535 4515955 + __address_range_invalidation 5166600 4770020 + __print_curr_data 5166600 4770020 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __aobj 0 0 0 2620 0 0 465 19 0 0 32406 0 0 186 0 2619 0 0 38315 + __awrd 0 0 0 10416 0 0 1590 1400 0 0 64812 0 0 1116 0 48672 0 0 128006 + __cobj 0 0 0 1 0 0 579 48 0 0 5485 0 0 579 0 89 0 0 6781 + __cwrd 0 0 0 4 0 0 2338 4842 0 0 10970 0 0 3474 0 3110 0 0 24738 + __pobj 0 0 0 0 0 0 135 26 0 0 1941 0 0 135 0 26 0 0 2263 + __pwrd 0 0 0 0 0 0 542 1508 0 0 3882 0 0 810 0 156 0 0 6898 + __remscans 14 + __dirty_pages 132 3 0 48 + __gcbegin 0 5166600 4770020 + __gcends 5238994 4770020 + __pause_length 72394 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __lvo0 0 0 0 0 0 0 173 19 0 0 2460 0 0 183 0 22 0 0 2857 + __lvo1 0 0 0 0 0 0 1 0 0 0 558 0 0 7 0 5 0 0 571 + __lvo2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvo3 0 0 0 0 0 0 5 0 13 0 1276 0 0 419 1 10 0 0 1724 + __lvo4 0 0 0 0 0 0 179 19 13 0 4294 0 0 609 1 37 0 0 5152 + __lvs0 0 0 0 0 0 0 742 1400 0 0 4920 0 0 1098 0 1188 0 0 9348 + __lvs1 0 0 0 0 0 0 130 0 0 0 1116 0 0 42 0 86 0 0 1374 + __lvs2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvs3 0 0 0 0 0 0 270 0 130 0 2552 0 0 2514 6 1474 0 0 6946 + __lvs4 0 0 0 0 0 0 1142 1400 130 0 8588 0 0 3654 6 2748 0 0 17668 + __cgc_scan 5794 + __cgc_forward 7162 + __cgc_deref 14634 + __cgc_test 5374 + __address_range_invalidation 5598445 5129471 + __address_range_invalidation 5883700 5414726 + __address_range_invalidation 5883700 5414726 + __print_curr_data 5883700 5414726 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __aobj 0 0 0 2514 0 0 595 22 0 0 33436 0 0 234 0 2394 0 0 39195 + __awrd 0 0 0 9958 0 0 1938 1270 0 0 66872 0 0 1404 0 46562 0 0 128004 + __cobj 0 0 0 1 0 0 617 41 0 0 4472 0 0 616 0 46 0 0 5793 + __cwrd 0 0 0 4 0 0 2538 4734 0 0 8944 0 0 3696 0 2696 0 0 22612 + __pobj 0 0 0 1 0 0 137 14 0 0 1786 0 0 137 0 15 0 0 2090 + __pwrd 0 0 0 4 0 0 540 1282 0 0 3572 0 0 822 0 996 0 0 7216 + __remscans 1 + __dirty_pages 131 5 0 55 + __gcbegin 0 5883700 5414726 + __gcends 5979846 5414726 + __pause_length 96146 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __lvo0 0 0 0 0 0 0 213 22 0 0 5618 0 0 220 0 217 0 0 6290 + __lvo1 0 0 0 0 0 0 1 0 0 0 859 0 0 21 0 5 0 0 886 + __lvo2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvo3 0 0 0 0 0 0 6 0 23 0 1559 0 0 491 1 10 0 0 2090 + __lvo4 0 0 0 0 0 0 220 22 23 0 8036 0 0 732 1 232 0 0 9266 + __lvs0 0 0 0 0 0 0 842 1270 0 0 11236 0 0 1320 0 4132 0 0 18800 + __lvs1 0 0 0 0 0 0 130 0 0 0 1718 0 0 126 0 86 0 0 2060 + __lvs2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvs3 0 0 0 0 0 0 276 0 258 0 3118 0 0 2946 6 1474 0 0 8078 + __lvs4 0 0 0 0 0 0 1248 1270 258 0 16072 0 0 4392 6 5692 0 0 28938 + __cgc_scan 8346 + __cgc_forward 9128 + __cgc_deref 21098 + __cgc_test 6352 + __address_range_invalidation 6354224 5789104 + __address_range_invalidation 6585395 6020275 + __print_curr_data 6585395 6020275 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __aobj 0 0 0 3661 0 0 572 17 0 0 32364 0 0 216 0 2263 0 0 39093 + __awrd 0 0 0 14498 0 0 1952 1890 0 0 64728 0 0 1296 0 43640 0 0 128004 + __cobj 0 0 0 0 0 0 692 49 0 0 6657 0 0 692 0 245 0 0 8335 + __cwrd 0 0 0 0 0 0 2838 4722 0 0 13314 0 0 4152 0 4758 0 0 29784 + __pobj 0 0 0 0 0 0 307 8 0 0 609 0 0 307 0 9 0 0 1240 + __pwrd 0 0 0 0 0 0 1256 2052 0 0 1218 0 0 1842 0 512 0 0 6880 + __remscans 11 + __dirty_pages 140 3 0 49 + __gcbegin 0 6585395 6020275 + __gcends 6662430 6020275 + __pause_length 77035 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __lvo0 0 0 0 0 0 0 212 17 0 0 3519 0 0 220 0 23 0 0 3991 + __lvo1 0 0 0 0 0 0 1 0 0 0 1044 0 0 12 0 5 0 0 1062 + __lvo2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvo3 0 0 0 0 0 0 5 0 16 0 1356 0 0 421 1 10 0 0 1809 + __lvo4 0 0 0 0 0 0 218 17 16 0 5919 0 0 653 1 38 0 0 6862 + __lvs0 0 0 0 0 0 0 864 1890 0 0 7038 0 0 1320 0 3196 0 0 14308 + __lvs1 0 0 0 0 0 0 130 0 0 0 2088 0 0 72 0 86 0 0 2376 + __lvs2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvs3 0 0 0 0 0 0 270 0 182 0 2712 0 0 2526 6 1474 0 0 7170 + __lvs4 0 0 0 0 0 0 1264 1890 182 0 11838 0 0 3918 6 4756 0 0 23854 + __cgc_scan 6089 + __cgc_forward 8069 + __cgc_deref 15840 + __cgc_test 6062 + __address_range_invalidation 7093954 6451799 + __address_range_invalidation 7312170 6670015 + __print_curr_data 7312170 6670015 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __aobj 0 0 0 2389 0 0 471 15 2 0 33501 0 0 174 0 2477 0 0 39029 + __awrd 0 0 0 9494 0 0 1842 1318 20 0 67002 0 0 1044 0 47298 0 0 128018 + __cobj 0 0 0 0 0 0 588 58 0 0 4790 0 0 587 0 64 0 0 6087 + __cwrd 0 0 0 0 0 0 2428 4560 0 0 9580 0 0 3522 0 3442 0 0 23532 + __pobj 0 0 0 0 0 0 172 19 0 0 678 0 0 172 0 19 0 0 1060 + __pwrd 0 0 0 0 0 0 740 1400 0 0 1356 0 0 1032 0 114 0 0 4642 + __remscans 2 + __dirty_pages 131 5 0 58 + __gcbegin 0 7312170 6670015 + __gcends 7377361 6670015 + __pause_length 65191 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __lvo0 0 0 0 1 0 0 171 15 1 0 2734 0 0 175 0 22 0 0 3119 + __lvo1 0 0 0 0 0 0 1 0 0 0 1155 0 0 12 0 7 0 0 1175 + __lvo2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvo3 0 0 0 0 0 0 9 0 26 0 1176 0 0 351 1 17 0 0 1580 + __lvo4 0 0 0 1 0 0 181 15 27 0 5065 0 0 538 1 46 0 0 5874 + __lvs0 0 0 0 4 0 0 684 1318 10 0 5468 0 0 1050 0 1966 0 0 10500 + __lvs1 0 0 0 0 0 0 130 0 0 0 2310 0 0 72 0 1064 0 0 3576 + __lvs2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvs3 0 0 0 0 0 0 416 0 300 0 2352 0 0 2106 6 1820 0 0 7000 + __lvs4 0 0 0 4 0 0 1230 1318 310 0 10130 0 0 3228 6 4850 0 0 21076 + __cgc_scan 5215 + __cgc_forward 6582 + __cgc_deref 12874 + __cgc_test 4947 + __address_range_invalidation 7762010 7054664 + __address_range_invalidation 8012252 7304906 + __print_curr_data 8012252 7304906 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __aobj 0 0 0 2515 0 0 416 13 2 0 35033 0 0 151 0 2280 0 0 40410 + __awrd 0 0 0 9994 0 0 1642 1528 20 0 70066 0 0 906 0 43854 0 0 128010 + __cobj 0 0 0 1 0 0 587 54 1 0 3919 0 0 582 0 61 0 0 5205 + __cwrd 0 0 0 4 0 0 2372 4478 10 0 7838 0 0 3492 0 2200 0 0 20394 + __pobj 0 0 0 0 0 0 204 22 0 0 840 0 0 204 0 22 0 0 1292 + __pwrd 0 0 0 0 0 0 824 1270 0 0 1680 0 0 1224 0 132 0 0 5130 + __remscans 10 + __dirty_pages 130 4 0 54 + __gcbegin 0 8012252 7304906 + __gcends 8103962 7304906 + __pause_length 91710 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __lvo0 0 0 0 1 0 0 155 13 2 0 5273 0 0 155 0 155 0 0 5754 + __lvo1 0 0 0 0 0 0 1 0 0 0 1268 0 0 20 0 7 0 0 1296 + __lvo2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvo3 0 0 0 0 0 0 8 0 21 0 1300 0 0 471 1 16 0 0 1817 + __lvo4 0 0 0 1 0 0 164 13 23 0 7841 0 0 646 1 178 0 0 8867 + __lvs0 0 0 0 4 0 0 622 1528 20 0 10546 0 0 930 0 4556 0 0 18206 + __lvs1 0 0 0 0 0 0 130 0 0 0 2536 0 0 120 0 1064 0 0 3850 + __lvs2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvs3 0 0 0 0 0 0 410 0 246 0 2600 0 0 2826 6 1816 0 0 7904 + __lvs4 0 0 0 4 0 0 1162 1528 266 0 15682 0 0 3876 6 7436 0 0 29960 + __cgc_scan 7562 + __cgc_forward 9505 + __cgc_deref 19669 + __cgc_test 7564 + __address_range_invalidation 8422994 7623938 + __address_range_invalidation 8713285 7914229 + __print_curr_data 8713285 7914229 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __aobj 0 0 0 3235 0 0 452 14 0 0 33168 0 0 168 0 2438 0 0 39475 + __awrd 0 0 0 12834 0 0 1790 1494 0 0 66336 0 0 1008 0 44550 0 0 128012 + __cobj 0 0 0 1 0 0 538 45 2 0 6256 0 0 527 0 189 0 0 7558 + __cwrd 0 0 0 4 0 0 2170 4736 20 0 12512 0 0 3162 0 4882 0 0 27486 + __pobj 0 0 0 0 0 0 212 17 0 0 667 0 0 211 0 17 0 0 1124 + __pwrd 0 0 0 0 0 0 864 1890 0 0 1334 0 0 1266 0 102 0 0 5456 + __remscans 4 + __dirty_pages 135 5 0 46 + __gcbegin 0 8713285 7914229 + __gcends 8784574 7914229 + __pause_length 71289 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __lvo0 0 0 0 1 0 0 161 15 0 0 3779 0 0 168 0 70 0 0 4194 + __lvo1 0 0 0 0 0 0 1 0 0 0 1490 0 0 18 0 7 0 0 1516 + __lvo2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvo3 0 0 0 0 0 0 5 0 15 0 1291 0 0 416 1 15 0 0 1743 + __lvo4 0 0 0 1 0 0 167 15 15 0 6560 0 0 602 1 92 0 0 7453 + __lvs0 0 0 0 4 0 0 656 1756 0 0 7558 0 0 1008 0 3310 0 0 14292 + __lvs1 0 0 0 0 0 0 130 0 0 0 2980 0 0 108 0 1064 0 0 4282 + __lvs2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvs3 0 0 0 0 0 0 270 0 150 0 2582 0 0 2496 6 1794 0 0 7298 + __lvs4 0 0 0 4 0 0 1056 1756 150 0 13120 0 0 3612 6 6168 0 0 25872 + __cgc_scan 5897 + __cgc_forward 6453 + __cgc_deref 15383 + __cgc_test 4717 + __address_range_invalidation 9270347 8400002 + __address_range_invalidation 9381740 8511395 + __print_curr_data 9381740 8511395 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __aobj 0 0 0 2919 0 0 457 12 0 0 34267 0 0 165 0 2249 0 0 40069 + __awrd 0 0 0 11570 0 0 1810 1412 0 0 68534 0 0 990 0 43694 0 0 128010 + __cobj 0 0 0 2 0 0 486 42 2 0 4784 0 0 476 0 101 0 0 5893 + __cwrd 0 0 0 8 0 0 1960 4340 20 0 9568 0 0 2856 0 3616 0 0 22368 + __pobj 0 0 0 0 0 0 171 15 1 0 741 0 0 167 0 17 0 0 1112 + __pwrd 0 0 0 0 0 0 684 1318 10 0 1482 0 0 1002 0 224 0 0 4720 + __remscans 4 + __dirty_pages 133 3 0 45 + __gcbegin 0 9381740 8511395 + __gcends 9462210 8511395 + __pause_length 80470 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __lvo0 0 0 0 0 0 0 155 13 0 0 4633 0 0 160 0 89 0 0 5050 + __lvo1 0 0 0 0 0 0 1 0 0 0 1722 0 0 10 0 5 0 0 1738 + __lvo2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvo3 0 0 0 0 0 0 5 0 14 0 1214 0 0 400 1 8 0 0 1642 + __lvo4 0 0 0 0 0 0 161 13 14 0 7569 0 0 570 1 102 0 0 8430 + __lvs0 0 0 0 0 0 0 624 1522 0 0 9266 0 0 960 0 3842 0 0 16214 + __lvs1 0 0 0 0 0 0 130 0 0 0 3444 0 0 60 0 86 0 0 3720 + __lvs2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvs3 0 0 0 0 0 0 270 0 140 0 2428 0 0 2400 6 1398 0 0 6642 + __lvs4 0 0 0 0 0 0 1024 1522 140 0 15138 0 0 3420 6 5326 0 0 26576 + __cgc_scan 6592 + __cgc_forward 8571 + __cgc_deref 17101 + __cgc_test 6526 + __address_range_invalidation 10944638 9993823 + __print_curr_data 10944638 9993823 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __aobj 0 0 0 109 0 0 8 0 0 0 30186 0 0 4 0 3905 0 0 34212 + __awrd 0 0 0 434 0 0 30 0 0 0 60372 0 0 24 0 67150 0 0 128010 + __cobj 0 0 0 1 0 0 470 39 1 0 5498 0 0 464 0 117 0 0 6590 + __cwrd 0 0 0 4 0 0 1900 4434 10 0 10996 0 0 2784 0 4008 0 0 24136 + __pobj 0 0 0 1 0 0 154 13 1 0 559 0 0 148 0 14 0 0 890 + __pwrd 0 0 0 4 0 0 620 1528 10 0 1118 0 0 888 0 82 0 0 4250 + __remscans 2 + __dirty_pages 131 4 0 41 + __gcbegin 0 10944638 9993823 + __gcends 11227272 9993823 + __pause_length 282634 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __lvo0 0 0 0 0 0 0 4 1 0 0 19530 0 0 5 0 1809 0 0 21349 + __lvo1 0 0 0 0 0 0 1 0 0 0 1875 0 0 3 0 5 0 0 1884 + __lvo2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvo3 0 0 0 0 0 0 4 0 6 0 291 0 0 185 1 8 0 0 495 + __lvo4 0 0 0 0 0 0 9 1 6 0 21696 0 0 193 1 1822 0 0 23728 + __lvs0 0 0 0 0 0 0 14 242 0 0 39060 0 0 30 0 30254 0 0 69600 + __lvs1 0 0 0 0 0 0 130 0 0 0 3750 0 0 18 0 86 0 0 3984 + __lvs2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvs3 0 0 0 0 0 0 268 0 60 0 582 0 0 1110 6 1398 0 0 3424 + __lvs4 0 0 0 0 0 0 412 242 60 0 43392 0 0 1158 6 31738 0 0 77008 + __cgc_scan 22817 + __cgc_forward 32818 + __cgc_deref 68982 + __cgc_test 26522 + __address_range_invalidation 12200042 10966593 + __print_curr_data 12200042 10966593 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __aobj 0 0 0 0 0 0 1236 0 0 0 54387 0 0 412 0 6 0 0 56041 + __awrd 0 0 0 0 0 0 4944 0 0 0 108774 0 0 2472 0 11814 0 0 128004 + __cobj 0 0 0 0 0 0 320 26 0 0 20313 0 0 320 0 1835 0 0 22814 + __cwrd 0 0 0 0 0 0 1294 2906 0 0 40626 0 0 1920 0 30410 0 0 77156 + __pobj 0 0 0 0 0 0 161 14 0 0 526 0 0 161 0 14 0 0 876 + __pwrd 0 0 0 0 0 0 656 1494 0 0 1052 0 0 966 0 84 0 0 4252 + __remscans 3 + __dirty_pages 172 1 0 11 + __gcbegin 0 12200042 10966593 + __gcends 12725313 10966593 + __pause_length 525271 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __lvo0 0 0 0 0 0 0 412 0 0 0 36250 0 0 412 0 1803 0 0 38877 + __lvo1 0 0 0 0 0 0 0 0 0 0 2036 0 0 0 0 4 0 0 2040 + __lvo2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvo3 0 0 0 0 0 0 2 0 0 0 617 0 0 216 1 4 0 0 840 + __lvo4 0 0 0 0 0 0 414 0 0 0 38903 0 0 628 1 1811 0 0 41757 + __lvs0 0 0 0 0 0 0 1648 0 0 0 72500 0 0 2472 0 29814 0 0 106434 + __lvs1 0 0 0 0 0 0 0 0 0 0 4072 0 0 0 0 64 0 0 4136 + __lvs2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvs3 0 0 0 0 0 0 132 0 0 0 1234 0 0 1296 6 1092 0 0 3760 + __lvs4 0 0 0 0 0 0 1780 0 0 0 77806 0 0 3768 6 30970 0 0 114330 + __cgc_scan 51598 + __cgc_forward 66944 + __cgc_deref 127195 + __cgc_test 60932 + __address_range_invalidation 13164735 11406015 + __address_range_invalidation 13330236 11571516 + __print_curr_data 13330236 11571516 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __aobj 0 0 0 11116 0 0 699 1 0 0 20343 0 0 233 0 2898 0 0 35290 + __awrd 0 0 0 43798 0 0 2796 6210 0 0 40686 0 0 1398 0 33142 0 0 128030 + __cobj 0 0 0 0 0 0 571 12 0 0 48622 0 0 571 0 1821 0 0 51597 + __cwrd 0 0 0 0 0 0 2286 1412 0 0 97244 0 0 3426 0 30732 0 0 135100 + __pobj 0 0 0 0 0 0 155 12 0 0 471 0 0 155 0 12 0 0 805 + __pwrd 0 0 0 0 0 0 624 1412 0 0 942 0 0 930 0 72 0 0 3980 + __remscans 1 + __dirty_pages 141 4 0 48 + __gcbegin 1 71337878 60443088 + __gcends 72788342 60443088 + __pause_length 1450464 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __lvo0 0 0 0 1 0 0 46 3 0 0 5346 0 0 42 0 4 0 0 5442 + __lvo1 0 0 0 0 0 0 2 0 0 0 3964 0 0 10 0 7 0 0 3983 + __lvo2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvo3 0 0 0 0 0 0 7 0 14 0 992 0 0 406 1 16 0 0 1436 + __lvo4 0 0 0 1 0 0 55 3 14 0 10302 0 0 458 1 27 0 0 10861 + __lvs0 0 0 0 4 0 0 218 7494 0 0 10692 0 0 252 0 4112 0 0 22772 + __lvs1 0 0 0 0 0 0 134 0 0 0 7928 0 0 60 0 1064 0 0 9186 + __lvs2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __lvs3 0 0 0 0 0 0 404 0 148 0 1984 0 0 2436 6 1816 0 0 6794 + __lvs4 0 0 0 4 0 0 756 7494 148 0 20604 0 0 2748 6 6992 0 0 38752 + __cgc_scan 2191 + __cgc_forward 2201 + __cgc_deref 4781 + __cgc_test 1212 + __address_range_invalidation 105735040 85664874 + __STCP_GCTOTALS + __print_curr_data 105735040 85664874 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __aobj 0 0 0 24795 0 0 2 0 0 0 798 0 0 1 0 2 0 0 25598 + __awrd 0 0 0 49594 0 0 8 0 0 0 1596 0 0 6 0 44 0 0 51248 + __cobj 0 0 0 0 0 0 0 0 0 0 2058 0 0 0 0 0 0 0 2058 + __cwrd 0 0 0 0 0 0 0 0 0 0 4116 0 0 0 0 0 0 0 4116 + __pobj 0 0 0 0 0 0 0 0 0 0 1323 0 0 0 0 0 0 0 1323 + __pwrd 0 0 0 0 0 0 0 0 0 0 2646 0 0 0 0 0 0 0 2646 + __remscans 133 + __dirty_pages 51 258 0 122 + __print_total_data 105735040 85664874 + __NAMES unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __AOBJ 0 0 0 774728 93 167 65105 4859 4609 0 4263003 0 30 28450 1 236650 624 0 5378319 + __AWRD 0 0 0 2196274 186 668 314870 1127558 73764 0 8526006 0 120 170700 6 4478402 5496 0 16894050 + __COBJ 0 0 0 73 7 0 64785 3106 266 0 1560024 0 0 63478 0 53219 0 0 1744958 + __CWRD 0 0 0 272 14 0 273384 602676 2744 0 3120048 0 0 380868 0 1362540 0 0 5742546 + __POBJ 0 0 0 10 2 0 17300 827 66 0 191171 0 0 16956 0 8456 0 0 234788 + __PWRD 0 0 0 40 4 0 73058 167206 674 0 382342 0 0 101736 0 149460 0 0 874520 + __REMSCANS 2731 + __LOOKUPS 3449995 + __MISSES 134340 + __total_dirty_bits 17118 1950 0 5502 + __old_loc_hash_table 105735040 85664874 + + >> full 1030, empty 253977, longest 2, entries 2058 + __cgc_scan 0 + __cgc_forward 0 + __cgc_deref 0 + __cgc_test 0 + __cgc_total_scan 1747689 + __cgc_total_forward 2118188 + __cgc_total_deref 4709273 + __cgc_total_test 1757613 + __id_hash_table 105735040 85664874 + + >> full 202098, empty 297911, longest 7, entries 257475 + __loc_hash_table 105735040 85664874 + + >> full 203421, empty 296588, longest 6, entries 257475 + __big_obj_hash_table 105735040 85664874 + + >> full 673, empty 340, longest 5, entries 1077 + __store_contents_misses 355 + __write_barrier_traps 5886 + __vsize_indirect_refs 0 + __total_refs 105735040 + __total_urefs 85664874 + __gc_overhead 20070166 + __total_loads 497760 + __total_loadps 63792050 + __total_stores 967753 + __total_storeps 4852879 + __total_storeis 15554432 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __stit 0 0 0 2196020 10 0 205362 170012 1426 0 8415034 0 0 112998 0 4453570 0 0 15554432 + __stt0 0 0 0 0 0 0 0 0 0 0 993672 0 0 17839 0 2125182 0 0 3136693 + __stt1 0 0 0 0 0 0 0 0 0 0 8393 0 0 3619 0 144356 0 0 156368 + __stt2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __stt3 0 0 0 0 0 0 0 0 0 0 2102 0 0 1521267 0 36091 3 0 1559463 + __stt4 0 0 0 0 0 0 0 0 0 0 1004167 0 0 1542725 0 2305629 3 0 4852524 + __stc0 0 555378 0 0 0 0 51 3 919 0 1678351 0 0 64451 340993 496509 38 0 3136693 + __stc1 0 146487 0 0 0 0 0 0 30 0 4410 0 0 1974 3155 312 0 0 156368 + __stc2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __stc3 0 726838 0 0 0 0 0 640 0 0 2645 0 0 235619 592694 1023 4 0 1559463 + __stc4 0 1428703 0 0 0 0 51 643 949 0 1685406 0 0 302044 936842 497844 42 0 4852524 + __storep_target_contents_number 0 0 2127457 + __storep_target_contents_number 0 1 31074 + __storep_target_contents_number 0 2 0 + __storep_target_contents_number 0 3 422784 + __storep_target_contents_number 0 4 555378 + __storep_target_contents_number 1 0 2389 + __storep_target_contents_number 1 1 2427 + __storep_target_contents_number 1 2 0 + __storep_target_contents_number 1 3 5065 + __storep_target_contents_number 1 4 146487 + __storep_target_contents_number 2 0 0 + __storep_target_contents_number 2 1 0 + __storep_target_contents_number 2 2 0 + __storep_target_contents_number 2 3 0 + __storep_target_contents_number 2 4 0 + __storep_target_contents_number 3 0 1880 + __storep_target_contents_number 3 1 1617 + __storep_target_contents_number 3 2 0 + __storep_target_contents_number 3 3 829128 + __storep_target_contents_number 3 4 726838 + __storep_target_contents_number 4 0 0 + __storep_target_contents_number 4 1 0 + __storep_target_contents_number 4 2 0 + __storep_target_contents_number 4 3 0 + __storep_target_contents_number 4 4 0 + __names unknown fixnum char bignum sfloat lfloat string ivec code special cons ratio complex symbol nil gvec struct user total + __nvo0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 + __nvo1 0 0 0 3 1 0 17248 749 65 0 127973 0 0 16948 0 6540 0 0 169527 + __nvo2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __nvo3 0 0 0 0 0 0 392 0 191 0 6280 0 0 979 1 30 5 0 7878 + __nvo4 0 0 0 3 1 0 17640 749 256 0 134254 0 0 17927 1 6570 5 0 177406 + __nvs0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 + __nvs1 0 0 0 12 2 0 72188 144262 650 0 255946 0 0 101688 0 110788 0 0 685536 + __nvs2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + __nvs3 0 0 0 0 0 0 2012 0 2920 0 12560 0 0 5874 6 3090 46 0 26508 + __nvs4 0 0 0 12 2 0 74200 144262 3570 0 268508 0 0 107562 6 113878 46 0 712046 + __ii_notes 129065 + __ii_allocs 5249254 + __ii_loads 64289810 + __ii_loadmisses 14215 + __ii_stores 5820632 + __ii_storemisses 25759 + __ii_internal_literals 134340 + __ii_stored_literals 1428703 + __ii_copy_counts 6824103 + __ii_copy_misses 545 + __ii_unknown_objects 0 + __ii_bad_tag_refs 3027369 + __ii_eq_tests 0 + __ii_deaths 0 + __ii_death_misses 0 Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/prog.awk diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/prog.awk:1.1 *** /dev/null Mon Feb 23 11:06:10 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/prog.awk Mon Feb 23 11:06:00 2004 *************** *** 0 **** --- 1,276 ---- + # + # cgc_forward -- counts forward references (update and reads) + # cgc_deref -- counts scans of the newspace area + # cgc_updates -- counts updates for forwarding pointer + # + # _cwrd counts words copied (transports and promotes) + # _pwrd counts promotes + + function abs(x) { + if (x < 0) return -x; + else return x; + } + + function update (idx) { + unknown = $2 + fix = $3 + char = $4 + big = $5 + float = $6 + $7 + string = $8 + ivec = $9 + $10 + special = $11 + conscount = $12 + ratcomp = $13 + $14 + symbol = $15 + nil = $16 + gvec = $17 + $18 + $19 + totalcount = $20 + cons[idx] = conscount + fixed[idx] = float + ratcomp + symbol + nil + unknown + fix + char + variable[idx] = big + string + ivec + special + gvec + total[idx] = totalcount; + } + + function update_totals() { + + total_length += pause_length; + + for (idx in indices) { + totalcons[idx] += cons[idx]; + totalfixed[idx] += fixed[idx]; + totalvariable[idx] += variable[idx]; + totaltotal[idx] += total[idx]; + } + + total_updates += updates; + total_forwards += forwards; + total_derefs += derefs; + } + + function check_values () { + + for (idx in indices) { + if (cons[idx] + fixed[idx] + variable[idx] != total[idx]) { + printf "ERROR -- bad sum: %s, cons %d, fixed %d, variable %d, total %d\n", \ + idx, cons[idx], fixed[idx], variable[idx], total[idx] + exit; + } + if (totalcons[idx] + totalfixed[idx] + totalvariable[idx] != totaltotal[idx]) { + printf "ERROR -- bad total sum: %s, cons %d, fixed %d, variable %d, total %d\n", \ + idx, totalcons[idx], totalfixed[idx], totalvariable[idx], totaltotal[idx] + exit; + } + } + } + + function print_values () { + + for (idx in indices) { + printf "CHECK: %s, cons %d, fixed %d, variable %d, total %d\n", \ + idx, cons[idx], fixed[idx], variable[idx], total[idx] + } + for (idx in indices) { + printf "CHECK: totals: %s, cons %d, fixed %d, variable %d, total %d\n", \ + idx, totalcons[idx], totalfixed[idx], totalvariable[idx], totaltotal[idx] + } + } + + function initialize() { + + indices["cw"] = "cw" + indices["co"] = "co" + indices["aw"] = "aw" + indices["ao"] = "ao" + indices["pw"] = "pw" + indices["po"] = "po" + + for (idx in indices) { + totalfixed[idx] = 0; + totalcons[idx] = 0; + totalvariable[idx] = 0; + totaltotal[idx] = 0; + } + + total_length = 0; + gccount = 0; + } + + function calculate_costs (name, consarg, fixedarg, vararg, totalarg, derefarg, forwardarg, pause_length_arg) { + + # calculate the costs: + + all_objects = totalarg["co"]; + cons_objects = consarg["co"]; + fixed_objects = fixedarg["co"] + var_objects = vararg["co"]; + + real_forwards = (forwardarg - all_objects); + #print forwardarg, real_forwards, all_objects; + cons_frac = (cons_objects / all_objects); + fixed_frac = (fixed_objects / all_objects); + var_frac = (var_objects / all_objects); + + # previously allocation = 6 instr per object allocated + + # calculate the costs: + # allocation: + # 4 instr per cons + # 11 instr per fixed (4 to get the vector and index) + # 17 instr per variable (like fixed, but 6 to allocate relocatable part) + + alloc_cost = 2 * totalarg["ao"] + totalarg["aw"] + + #print totalarg["ao"], alloc_cost + + a = derefarg; + b = 0; # can't tell without count + c = a - b; + e = forwardarg; + d = c - e; + f = cons_objects + cons_frac * real_forwards; + g = cons_objects; + h = cons_frac * real_forwards; + #print cons_frac, real_forwards, h; + i = consarg["co"] - consarg["po"]; + j = consarg["po"]; + e1 = g; + k = e - f; + l = fixed_objects + fixed_frac * real_forwards; + m = fixed_frac * real_forwards; + n = fixed_objects; + o = fixedarg["co"] - fixedarg["po"]; + p = fixedarg["po"]; + e2 = n; + q = k - l; + # print q, (var_objects + var_frac * real_forwards) + if ((abs(q) - abs(int((var_objects + var_frac * real_forwards)))) > 2) { + print "var check error", q, (var_objects + var_frac * real_forwards) + exit + } + r = var_frac * real_forwards; + s = var_objects; + t = vararg["co"] - vararg["po"]; + u = vararg["po"]; + e3 = s; + e4 = e1 + e2 + e3; + e5 = e4 + h + m + r; + e6 = e5 + b + d; + if (int(a) != int(e6)) { + print "total check error", a, e6 + exit; + } + get_copy_cost = 5 + set_copy_cost = 3 + acost = 4 + bcost = 0 + ccost = 4 + dcost = 0 + ecost = 3 + fcost = 5 + gcost = get_copy_cost + 4 + hcost = 3 + icost = set_copy_cost + 2 + 3 + jcost = set_copy_cost + 4 + 3 + kcost = 3 + lcost = 5 + mcost = 3 + ncost = get_copy_cost + 4 + ocost = set_copy_cost + 2 + pcost = set_copy_cost + 4 + qcost = 5 + rcost = 3 + scost = get_copy_cost + 4 + tcost = set_copy_cost + 2 + ucost = set_copy_cost + 4 + e4cost = 4 + e5cost = 2 + e6cost = 4 + + # print a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u; + typeforwardcost = e * ecost + f * fcost + k * kcost + l * lcost + q * qcost; + transportcost = g * gcost + h * hcost + i * icost + j * jcost + \ + m * mcost + n * ncost + o * ocost + p * pcost + \ + r * rcost + s * scost + t * tcost + u * ucost + \ + + ((2 * fixedarg["cw"]) - fixedarg["co"]) + \ + + ((4 * vararg["cw"]) - vararg["co"]) + + + scancost = a * acost + b * bcost + c * ccost + d * dcost + \ + e6 * e6cost; + updatecost = e4 * e4cost + e5 * e5cost; + totalcost = alloc_cost + scancost + typeforwardcost + transportcost + updatecost; + print name, gcstart, alloc_cost, scancost, typeforwardcost, transportcost, updatecost, totalcost, 6 * pause_length_arg; + } + + + BEGIN { + + initialize(); + + total_forwards = 0 + total_derefs = 0; + total_updates = 0; + + } + + $0 ~ /gc algorithm/ { + algorithm = $4 + } + + $1 ~ /__gcbegin/ { + togen = $2; + gcstart = $4 + gccycle = 1; + } + + (gccycle == 1) && $1 ~ /__pause_length/ { + pause_length = $2; + } + + (gccycle == 1) && $1 ~ /__cgc_forward/ { + forwards = $2; + } + + (gccycle == 1) && $1 ~ /__cgc_test/ { + updates = $2; + } + + (gccycle == 1) && $1 ~ /__cgc_deref/ { + derefs = $2; + } + + (gccycle == 1) && $1 ~ /__cwrd/ { + update("cw"); + } + + (gccycle == 1) && $1 ~ /__cobj/ { + update("co"); + } + + (gccycle == 1) && $1 ~ /__awrd/ { + update("aw"); + } + + (gccycle == 1) && $1 ~ /__aobj/ { + update("ao"); + } + + (gccycle == 1) && $1 ~ /__pobj/ { + update("po"); + } + + (gccycle == 1) && $1 ~ /__pwrd/ { + update("pw") + + gccount += 1; + update_totals(); + check_values(); + calculate_costs("Current", cons, fixed, variable, total, derefs, forwards, pause_length); + } + + + END { + check_values(); + calculate_costs("Total", totalcons, totalfixed, totalvariable, totaltotal, total_derefs, total_forwards, total_length); + } Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/range.awk diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/range.awk:1.1 *** /dev/null Mon Feb 23 11:06:10 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/range.awk Mon Feb 23 11:06:00 2004 *************** *** 0 **** --- 1,27 ---- + # + # range.awk -- perform associated ops to create a range + # + # $1 -- the operation to perform + # $2 -- the column to operate on + # + BEGIN { + base = ARGV[1]; + top = ARGV[3]; + if (ARGV[4] == "by") { + incr = ARGV[5]; + } else { + incr = 1; + } + + if (incr > 0) { + for (i = base; i <= top; i += incr) { + printf "%d ", i; + } + } else { + for (i = base; i >= top; i += incr) { + printf "%d ", i; + } + } + printf "\n"; + exit; + } Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/words-large.awk diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/words-large.awk:1.1 *** /dev/null Mon Feb 23 11:06:10 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/words-large.awk Mon Feb 23 11:06:00 2004 *************** *** 0 **** --- 1,69964 ---- + a + A&M + A&P + a's + AAA + AAAS + aardvark + aardwolf + Aarhus + Aaron + ABA + Ababa + abaca + abaci + aback + abacus + abacuses + abaft + abalone + abandon + abandoned + abandoning + abandonment + abandonments + abandons + abase + abased + abasement + abasements + abases + abash + abashed + abashedly + abashes + abashing + abashment + abasing + abate + abated + abatement + abatements + abater + abates + abating + abatis + abattis + abattoir + abaxial + abba + abbacies + abbacy + abbas + abbatial + abbe + abbess + abbey + abbeys + abbot + abbots + Abbott + abbreviatable + abbreviate + abbreviated + abbreviates + abbreviating + abbreviation + abbreviations + abbreviator + abby + abc + abcissa + abdicate + abdicated + abdicating + abdication + abdomen + abdomens + abdominal + abducent + abduct + abducted + abduction + abductions + abductor + abductors + abducts + Abe + abeam + abecedarian + abed + Abel + Abelian + Abelson + abend + abends + Aberdeen + Abernathy + aberrant + aberrantly + aberrate + aberration + aberrations + abet + abetment + abets + abetted + abetter + abetting + abettor + abeyance + abeyant + abhor + abhorred + abhorrence + abhorrent + abhorrently + abhorrer + abhorring + abhors + abide + abided + abides + abiding + Abidjan + Abigail + abilities + ability + abject + abjection + abjections + abjectly + abjectness + abjuration + abjure + abjured + abjurer + abjures + abjuring + ablactation + ablate + ablated + ablates + ablating + ablation + ablative + ablaut + ablaze + able + abler + ablest + abloom + abluent + ablute + ablution + ably + abnegate + abnegated + abnegating + abnegation + Abner + abnormal + abnormalities + abnormality + abnormally + abnormity + Abo + aboard + abode + abodes + abolish + abolished + abolisher + abolishers + abolishes + abolishing + abolishment + abolishments + abolition + abolitionist + abolitionists + abominable + abominably + abominate + abominated + abominating + abomination + aboriginal + aboriginals + aborigine + aborigines + aborning + abort + aborted + aborticide + abortifacient + aborting + abortion + abortionist + abortions + abortive + abortively + aborts + abound + abounded + abounding + abounds + about + above + aboveboard + aboveground + abovementioned + abracadabra + abradant + abrade + abraded + abrades + abrading + Abraham + Abram + Abramson + abranchiate + abrasion + abrasions + abrasive + abreact + abreaction + abreactions + abreast + abridge + abridged + abridgement + abridges + abridging + abridgment + abroach + abroad + abrogate + abrogated + abrogates + abrogating + abrogation + abrogator + abrupt + abruption + abruptly + abruptness + abs + abscess + abscessed + abscesses + abscise + abscissa + abscissae + abscissas + abscission + abscond + absconded + absconder + absconding + absconds + absence + absences + absent + absented + absentee + absenteeism + absentees + absentia + absenting + absently + absentminded + absents + absinth + absinthe + absinthism + absolute + absolutely + absoluteness + absolutes + absolution + absolutism + absolutist + absolutory + absolve + absolved + absolves + absolving + absorb + absorbed + absorbency + absorbent + absorber + absorbing + absorbs + absorption + absorptions + absorptive + abstain + abstained + abstainer + abstaining + abstains + abstemious + abstemiously + abstemiousness + abstention + abstentions + absterge + abstertion + abstinence + abstinent + abstract + abstracted + abstracting + abstraction + abstractionism + abstractionist + abstractions + abstractive + abstractly + abstractness + abstractor + abstractors + abstracts + abstrict + abstriction + abstruse + abstrusely + abstruseness + absurd + absurdities + absurdity + absurdly + absurdness + abuilding + abulia + abundance + abundances + abundant + abundantly + abusable + abuse + abused + abuses + abusing + abusive + abusively + abut + abutilon + abutment + abuts + abuttals + abutted + abutter + abutters + abutting + abuzz + abysm + abysmal + abysmally + abyss + abyssa + abysses + Abyssinia + AC + acacia + academia + academic + academically + academicals + academician + academicism + academics + academies + academy + Acadia + acajou + acaleph + acanthi + acanthine + acanthocephalan + acanthoid + acanthopterygian + acanthus + acanthuses + Acapulco + acariasis + acarid + acaroid + acarology + acarpellous + acarpelous + acatalectic + acaudal + acaudelescent + accede + acceded + accedes + acceding + accelerando + accelerant + accelerate + accelerated + accelerates + accelerating + acceleration + accelerations + accelerative + accelerator + accelerators + accelerometer + accelerometers + accent + accented + accenting + accents + accentual + accentuate + accentuated + accentuates + accentuating + accentuation + accept + acceptability + acceptable + acceptably + acceptance + acceptances + acceptant + acceptation + accepted + accepter + accepters + accepting + acceptor + acceptors + accepts + access + accessable + accessaries + accessary + accessed + accesses + accessibility + accessible + accessibly + accessing + accession + accessions + accessor + accessorial + accessories + accessors + accessory + accidence + accident + accidental + accidentally + accidently + accidents + accipiter + acclaim + acclaimed + acclaiming + acclaims + acclamation + acclimate + acclimated + acclimates + acclimating + acclimation + acclimatization + acclimatized + acclimatizes + acclimatizing + acclivities + acclivity + acclivous + accolade + accolades + accommodate + accommodated + accommodates + accommodating + accommodatingly + accommodation + accommodations + accomodate + accompanied + accompanies + accompaniment + accompaniments + accompanist + accompanists + accompany + accompanying + accomplice + accomplices + accomplish + accomplished + accomplisher + accomplishers + accomplishes + accomplishing + accomplishment + accomplishments + accord + accordance + accordances + accordant + accorded + accorder + accorders + according + accordingly + accordion + accordionist + accordions + accords + accost + accosted + accosting + accosts + accouchement + accoucheur + accoucheuse + account + accountability + accountable + accountably + accountancy + accountant + accountants + accounted + accounting + accountrement + accounts + accouplement + accouter + accouterment + accouterments + accoutre + accoutrement + accoutrements + accoutring + Accra + accredit + accreditate + accreditation + accreditations + accredited + accrete + accretion + accretions + accrual + accrue + accrued + accrues + accruing + acculturate + acculturated + acculturates + acculturating + acculturation + accumbent + accumulate + accumulated + accumulates + accumulating + accumulation + accumulations + accumulative + accumulator + accumulators + accupy + accuracies + accuracy + accurate + accurately + accurateness + accursed + accurst + accusal + accusation + accusations + accusatival + accusative + accusatorial + accusatory + accuse + accused + accuser + accusers + accuses + accusing + accusingly + accustom + accustomed + accustoming + accustoms + ace + acedia + acentric + acephalous + acerate + acerb + acerbate + acerbic + acerbity + acerbityacerose + acervate + aces + acescent + acetabulum + acetal + acetaldehyde + acetamide + acetanilide + acetate + acetic + acetified + acetify + acetifying + acetin + acetometer + acetone + acetophenetidin + acetous + acetum + acetyl + acetylate + acetylcholine + acetylene + ache + ached + achene + aches + achier + achiest + achievable + achieve + achieved + achievement + achievements + achiever + achievers + achieves + achieving + Achilles + achilles + aching + achlamydeous + achlorhydria + achondrite + achondroplasia + achromatic + achromatin + achy + acid + acidic + acidification + acidified + acidify + acidifying + acidities + acidity + acidly + acidosis + acids + acidulate + acidulated + acidulating + acidulous + acidulously + Ackerman + Ackley + acknowledge + acknowledgeable + acknowledged + acknowledgement + acknowledgements + acknowledger + acknowledgers + acknowledges + acknowledging + acknowledgment + acknowledgments + ACM + acme + acne + acolyte + acolytes + aconite + acorn + acorns + acoustic + acoustical + acoustically + acoustician + acoustics + acquaint + acquaintance + acquaintances + acquaintanceship + acquainted + acquainting + acquaints + acquiesce + acquiesced + acquiescence + acquiescent + acquiescently + acquiesces + acquiescing + acquirable + acquire + acquired + acquirement + acquires + acquiring + acquisition + acquisitions + acquisitive + acquisitively + acquisitiveness + acquit + acquits + acquittal + acquittance + acquitted + acquitter + acquitting + acre + acreage + acres + acrid + acridity + acridly + acrimonies + acrimonious + acrimony + acrobacy + acrobat + acrobatic + acrobatically + acrobatics + acrobats + acromegaly + acronym + acronyms + acrophobia + acropolis + across + acrostic + acrylate + acrylic + act + Actaeon + acted + acting + actinic + actinically + actinide + actinism + actinium + actinoid + actinolite + actinometer + actinometers + action + actionable + actions + activate + activated + activates + activating + activation + activations + activator + activators + active + actively + activism + activist + activists + activities + activity + Acton + actor + actors + actress + actresses + acts + actual + actualities + actuality + actualization + actualize + actualized + actualizing + actually + actuals + actuarial + actuarially + actuaries + actuary + actuate + actuated + actuates + actuating + actuation + actuator + actuators + acuity + acumen + acute + acutely + acuteness + acyclic + acyclically + ad + Ada + ada + adage + adages + adagio + adagios + Adair + Adam + adamant + adamantine + adamantly + Adamson + adapt + adaptability + adaptable + adaptably + adaptation + adaptations + adapted + adapter + adapters + adapting + adaptive + adaptively + adaptor + adaptors + adapts + adcon + adcons + add + addax + added + addend + addenda + addendum + adder + adders + addict + addicted + addicting + addiction + addictions + addictive + addicts + adding + Addis + Addison + addition + additional + additionally + additions + additive + additively + additives + additivity + addle + addlebrained + addled + addleheaded + addlepated + addling + addr + address + addressability + addressable + addressed + addressee + addressees + addresser + addressers + addresses + addressing + Addressograph + adds + adduce + adduceable + adduced + adduces + adducible + adducing + adduct + adducted + adducting + adduction + adductor + adducts + Adelaide + Adele + Adelia + Aden + adenine + adenoid + adenoidal + adenoids + adenoma + adenosine + adept + adeptly + adeptness + adequacies + adequacy + adequate + adequately + adhere + adhered + adherence + adherences + adherent + adherents + adherer + adherers + adheres + adhering + adhesion + adhesions + adhesive + adhesively + adhesiveness + adhesives + adiabatic + adiabatically + adieu + adios + adipic + adipose + adiposity + Adirondack + adjacency + adjacent + adjacently + adject + adjectival + adjectivally + adjective + adjectives + adjoin + adjoined + adjoining + adjoins + adjoint + adjourn + adjourned + adjourning + adjournment + adjourns + adjudge + adjudged + adjudges + adjudging + adjudicate + adjudicated + adjudicates + adjudicating + adjudication + adjudications + adjudicative + adjudicator + adjunct + adjunctive + adjuncts + adjuration + adjure + adjured + adjures + adjuring + adjust + adjustable + adjustably + adjusted + adjuster + adjusters + adjusting + adjustment + adjustments + adjustor + adjustors + adjusts + adjutant + adjutants + Adkins + Adler + adman + admen + administer + administered + administering + administerings + administers + administrable + administrant + administrate + administrated + administrating + administration + administrations + administrative + administratively + administrator + administrators + administratrix + admirable + admirably + admiral + admirals + admiralties + admiralty + admiration + admirations + admire + admired + admirer + admirers + admires + admiring + admiringly + admissibility + admissible + admissibly + admission + admissions + admit + admits + admittance + admitted + admittedly + admitter + admitters + admitting + admix + admixed + admixes + admixture + admonish + admonished + admonishes + admonishing + admonishment + admonishments + admonition + admonitions + ado + adobe + adolescence + adolescent + adolescents + Adolph + Adolphus + Adonis + adopt + adopted + adopter + adopters + adopting + adoption + adoptions + adoptive + adopts + adorable + adorably + adoration + adore + adored + adorer + adores + adoring + adoringly + adorn + adorned + adornment + adornments + adorns + adown + adposition + adrenal + adrenaline + adreno + Adrian + Adriatic + Adrienne + adrift + adroit + adroitly + adroitness + ads + adsorb + adsorbate + adsorbed + adsorbent + adsorbing + adsorbs + adsorption + adsorptive + adulate + adulated + adulating + adulation + adulator + adult + adulterant + adulterate + adulterated + adulterates + adulterating + adulteration + adulterer + adulterers + adulteress + adulteries + adulterous + adulterously + adultery + adulthood + adults + adumbrate + adumbrated + adumbrates + adumbrating + adumbration + advance + advanced + advancement + advancements + advances + advancing + advantage + advantaged + advantageous + advantageously + advantages + advent + adventist + adventists + adventitious + adventitiously + adventure + adventured + adventurer + adventurers + adventures + adventuresome + adventuress + adventuring + adventurous + adventurousness + adverb + adverbial + adverbially + adverbs + adversarial + adversaries + adversary + adverse + adversely + adversities + adversity + advert + advertence + advertent + advertise + advertised + advertisement + advertisements + advertiser + advertisers + advertises + advertising + advertize + advertized + advertizement + advertizing + advice + advisability + advisable + advisably + advise + advised + advisedly + advisedness + advisee + advisees + advisement + advisements + adviser + advisers + advises + advising + advisor + advisories + advisors + advisory + advocacy + advocate + advocated + advocates + advocating + adze + adzes + Aegean + aegis + Aeneas + Aeneid + aeolian + Aeolus + aeon + aerate + aerated + aerates + aerating + aeration + aerator + aerators + aerial + aerialist + aerials + aerie + aero + aeroacoustic + Aerobacter + aerobatics + aerobic + aerobics + aerodynamic + aerodynamics + aerogene + aeromechanics + aeronautic + aeronautical + aeronautically + aeronautics + aeroplane + aeroplanes + aerosol + aerosolize + aerosols + aerospace + aerostat + Aeschylus + aestethic + aesthete + aesthetic + aesthetical + aesthetically + aestheticism + aesthetics + afaced + afacing + afar + afd + afdecho + affability + affable + affably + affair + affairs + affect + affectate + affectation + affectations + affected + affectedly + affectedness + affecting + affectingly + affection + affectionate + affectionately + affections + affective + affector + affects + afferent + affiance + affianced + affiancing + affidavit + affidavits + affiliate + affiliated + affiliates + affiliating + affiliation + affiliations + affine + affinities + affinity + affirm + affirmable + affirmation + affirmations + affirmative + affirmatively + affirmed + affirming + affirms + affix + affixed + affixes + affixing + afflatus + afflict + afflicted + afflicting + affliction + afflictions + afflictive + afflicts + affluence + affluent + afford + affordable + afforded + affording + affords + afforest + afforestation + affray + affricate + affricates + affright + affront + affronted + affronting + affronts + Afghan + afghan + Afghanistan + afghanistan + afghans + aficionado + aficionados + afield + afire + aflame + afloat + aflutter + afoot + afore + aforementioned + aforesaid + aforethought + afoul + afraid + afresh + Africa + africa + african + africans + afro + aft + after + afterbirth + afterburner + afterdamp + aftereffect + afterglow + afterimage + afterlife + aftermath + aftermost + afternoon + afternoons + aftershock + aftershocks + aftertaste + afterthought + afterthoughts + afterward + afterwards + afterword + again + against + Agamemnon + agape + agar + agate + agates + Agatha + agave + age + aged + Agee + ageing + ageless + agelong + agencies + agency + agenda + agendas + agendum + agendums + agent + agents + ager + ageratum + agers + ages + agglomerate + agglomerated + agglomerates + agglomerating + agglomeration + agglomerations + agglomerative + agglutinate + agglutinated + agglutinates + agglutinating + agglutination + agglutinative + agglutinin + agglutinins + aggrandize + aggrandized + aggrandizement + aggrandizer + aggrandizes + aggrandizing + aggravate + aggravated + aggravates + aggravating + aggravation + aggravations + aggregate + aggregated + aggregately + aggregates + aggregating + aggregation + aggregations + aggression + aggressions + aggressive + aggressively + aggressiveness + aggressor + aggressors + aggrieve + aggrieved + aggrieves + aggrieving + aghast + agile + agilely + agilities + agility + aging + agitate + agitated + agitatedly + agitates + agitating + agitation + agitations + agitator + agitators + agleam + aglitter + aglow + Agnes + Agnew + agnomen + agnostic + agnostically + agnosticism + agnostics + ago + agog + agone + agonies + agonistic + agonize + agonized + agonizes + agonizing + agonizingly + agony + agouti + agouties + agoutis + agouty + agrarian + agree + agreeability + agreeable + agreeably + agreed + agreeing + agreement + agreements + agreer + agreers + agrees + agrestis + agribusiness + Agricola + agricultural + agriculturalist + agriculturally + agriculture + agriculturist + agrimony + agronomist + agronomy + aground + agt + agtbasic + ague + Agway + ah + aha + ahead + ahem + Ahmedabad + ahoy + aid + Aida + aide + aided + Aides + aides + aiding + aidman + aidmanmen + aids + aigret + aigrette + Aiken + ail + ailanthus + ailanthuses + aile + ailed + aileron + ailerons + ailing + ailment + ailments + ails + aim + aimed + aimer + aimers + aiming + aimless + aimlessly + aimlessness + aims + ain't + Ainu + air + airbag + airbags + airborn + airborne + airbrush + airbus + aircraft + aircrafts + airdrome + airdrop + airdropped + airdropping + airdrops + aired + airedale + airer + airers + Aires + aires + airfare + airfield + airfields + airflow + airfoil + airfoils + airframe + airframes + airier + airiest + airily + airiness + airing + airings + airless + airlift + airlifts + airline + airliner + airlines + airlock + airlocks + airmail + airmails + airman + airmass + airmen + airpark + airplane + airplanes + airport + airports + airs + airship + airships + airsick + airspace + airspeed + airstream + airstrip + airstrips + airtight + airwaves + airway + airways + airy + ais + aisle + aisles + Aitken + ajar + Ajax + AK + Akers + akimbo + akin + Akron + AL + ala + Alabama + alabama + Alabamian + alabamian + alabaster + alack + alackaday + alacritous + alacrity + alai + Alameda + Alamo + alan + alar + alarm + alarmed + alarming + alarmingly + alarmist + alarms + alarum + alas + Alaska + alaska + alaskan + alb + alba + albacore + Albania + albania + Albanian + albanian + albanians + Albany + albatross + albeit + Alberich + Albert + Alberta + Alberto + albinism + albino + albinos + Albrecht + Albright + album + albumen + albumin + albuminous + albums + Albuquerque + Alcestis + alchemic + alchemical + alchemist + alchemy + alcibiades + Alcmena + Alcoa + alcohol + alcoholic + alcoholics + alcoholism + alcohols + Alcott + alcove + alcoves + Aldebaran + aldehyde + Alden + alden + alder + alderman + aldermanic + aldermen + alders + Aldrich + aldrin + ale + Alec + Aleck + alectoria + alee + alembic + aleph + alert + alerted + alertedly + alerter + alerters + alerting + alertly + alertness + alerts + ales + alewife + Alex + Alexander + Alexandra + Alexandre + Alexandria + alexandrine + Alexei + Alexis + alfalfa + alfonso + Alfred + Alfredo + alfresco + alga + algae + algaecide + algal + algebra + algebraic + algebraically + algebraist + algebraists + algebras + Algenib + Alger + Algeria + algeria + algerian + Algiers + alginate + Algol + algol + Algonquin + algorithm + algorithmic + algorithmically + algorithms + Alhambra + Ali + alia + alias + aliased + aliases + aliasing + alibi + alibied + alibiing + alibis + Alice + Alicia + alien + alienable + alienate + alienated + alienates + alienating + alienation + alienator + alienee + alienist + alienor + aliens + alight + alighted + alighting + alights + align + aligned + aligning + alignment + alignments + aligns + alike + aliment + alimentary + aliments + alimony + aline + alinement + aliphatic + aliquant + aliquot + Alison + Alistair + alit + alive + alizarin + alkali + alkalies + alkaline + alkalinity + alkalis + alkalization + alkalize + alkalized + alkalizing + alkaloid + alkaloids + alkane + alkanes + alkyl + all + Allah + allah + Allan + allay + allayed + allaying + allays + allegate + allegation + allegations + allege + alleged + allegedly + alleges + Allegheny + allegiance + allegiances + allegiant + alleging + allegoric + allegorical + allegorically + allegories + allegorize + allegorized + allegorizing + allegory + Allegra + allegretto + allegrettos + allegro + allegros + allele + alleles + allelic + allelopathy + alleluia + allemand + allemande + Allen + Allentown + allergen + allergenic + allergic + allergies + allergist + allergy + alleviate + alleviated + alleviater + alleviaters + alleviates + alleviating + alleviation + alleviations + alleviative + alleviator + alley + alleys + alleyway + alleyways + alliance + alliances + allied + allies + alligation + alligations + alligator + alligators + Allis + Allison + alliterate + alliterated + alliterating + alliteration + alliterations + alliterative + allocable + allocatable + allocate + allocated + allocates + allocating + allocation + allocations + allocator + allocators + allopathic + allopathy + allophone + allophones + allophonic + allot + alloted + allotment + allotments + allotrope + allotropic + allotropism + allotropy + allots + allotted + allotter + allotting + allow + allowable + allowably + allowance + allowanced + allowances + allowancing + allowed + allowing + allows + alloy + alloyed + alloying + alloys + allspice + Allstate + allude + alluded + alludes + alluding + allure + allured + allurement + allures + alluring + alluringly + allusion + allusions + allusive + allusively + allusiveness + alluvial + alluvium + alluvivia + alluviviums + ally + allying + allyl + Allyn + alma + Almaden + almagest + almanac + almanacs + almightily + almightiness + almighty + almond + almondlike + almonds + almoner + almost + alms + almshouse + almsman + alnico + aloe + aloes + aloft + aloha + alone + aloneness + along + alongside + aloof + aloofly + aloofness + aloud + alp + alpaca + alpenstock + Alpert + alpha + alphabet + alphabetic + alphabetical + alphabetically + alphabetics + alphabetization + alphabetize + alphabetized + alphabetizes + alphabetizing + alphabets + alphameric + alphanumeric + Alpheratz + Alphonse + alpine + alps + already + alright + Alsatian + also + Alsop + alt + Altair + altar + altarpiece + altars + alter + alterable + alterably + alterate + alteration + alterations + altercate + altercated + altercating + altercation + altercations + altered + alterer + alterers + altering + alterman + altern + alternate + alternated + alternately + alternates + alternating + alternation + alternations + alternative + alternatively + alternatives + alternator + alternators + alters + althaea + althea + althorn + although + altimeter + altitude + altitudes + alto + altogether + Alton + altos + altruism + altruist + altruistic + altruistically + alum + alumina + aluminate + aluminium + aluminize + aluminized + aluminizing + aluminous + aluminum + alumna + alumnae + alumni + alumnus + alundum + Alva + Alvarez + alveolar + alveoli + alveolus + Alvin + alway + always + alyssum + am + AMA + Amadeus + amain + amalgam + amalgamate + amalgamated + amalgamates + amalgamating + amalgamation + amalgamations + amalgams + amanita + amanuenses + amanuensis + amaranth + amaranthine + Amarillo + amaryllis + amass + amassed + amasses + amassing + amateur + amateurish + amateurishly + amateurishness + amateurism + amateurs + amatory + amaze + amazed + amazedly + amazement + amazer + amazers + amazes + amazing + amazingly + Amazon + amazon + amazons + ambassador + ambassadorial + ambassadors + ambassadorship + amber + ambergris + amberjack + ambiance + ambidexterity + ambidextrous + ambidextrously + ambience + ambient + ambiguities + ambiguity + ambiguous + ambiguously + ambiguousness + ambition + ambitions + ambitious + ambitiously + ambitiousness + ambivalence + ambivalent + ambivalently + amble + ambled + ambler + ambles + ambling + ambrose + ambrosia + ambrosial + ambrosian + ambulance + ambulances + ambulant + ambulate + ambulated + ambulating + ambulation + ambulatories + ambulatory + ambuscade + ambuscaded + ambuscading + ambush + ambushed + ambushes + ambushing + amdahl + ameba + Amelia + amelia + ameliorate + ameliorated + ameliorates + ameliorating + amen + amenable + amend + amende + amended + amending + amendment + amendments + amends + amenities + amenity + amenorrhea + Amerada + America + america + american + Americana + americana + americans + americanum + americanumancestors + americas + americium + Ames + amethyst + amethystine + Amherst + ami + amiability + amiable + amiably + amicability + amicable + amicably + amid + amide + amidship + amidships + amidst + amigo + amigos + amine + amino + aminobenzoic + aminopeptidase + amiss + amities + amity + Amman + Ammerman + ammeter + ammo + ammonia + ammoniac + ammonium + ammunition + amnesia + amnesiac + amnesic + amnestied + amnesties + amnesty + amnestying + amninia + amninions + amnion + amniotic + Amoco + amoeba + amoebae + amoeban + amoebas + amoebic + amoeboid + amok + among + amongst + amontillado + amoral + amorality + amorally + amorist + amorous + amorously + amorousness + amorphism + amorphous + amorphously + amort + amortise + amortization + amortize + amortized + amortizes + amortizing + Amos + amount + amounted + amounter + amounters + amounting + amounts + amour + amp + amperage + ampere + amperes + ampersand + ampersands + Ampex + amphetamine + amphetamines + amphibia + amphibian + amphibians + amphibious + amphibiously + amphibole + amphibology + amphioxis + amphitheater + amphitheaters + amphitheatre + amphora + amphorae + amphoras + ample + amplectant + ampler + amplest + amplexus + amplification + amplified + amplifier + amplifiers + amplifies + amplify + amplifying + amplitude + amplitudes + amply + ampoule + ampoules + amps + ampul + ampule + amputate + amputated + amputates + amputating + amputation + amputee + amra + Amsterdam + amsterdam + Amtrak + amtrak + amuck + amulet + amulets + amusable + amuse + amused + amusedly + amusement + amusements + amuser + amusers + amuses + amusing + amusingly + amy + amygdaloid + amyl + amylase + an + ana + Anabaptist + anabaptist + anabaptists + Anabel + anabolic + anabolism + anachronism + anachronisms + anachronistic + anachronistically + anaconda + anacondas + anaemia + anaerobe + anaerobic + anaesthesia + anaesthetic + anaesthetist + anaesthetize + anaesthetized + anaesthetizing + anaglyph + anagram + anagrams + Anaheim + anal + analagous + analeptic + analgesia + analgesic + analog + analogical + analogies + analogist + analogize + analogized + analogizing + analogous + analogously + analogue + analogues + analogy + analyse + analysed + analyser + analyses + analysing + analysis + analyst + analysts + analytic + analytical + analytically + analyticities + analyticity + analyzable + analyze + analyzed + analyzer + analyzers + analyzes + analyzing + anamorphic + anapaest + anapaestic + anapest + anapestic + anaphora + anaphoric + anaphorically + anaplasmosis + anarch + anarchic + anarchical + anarchism + anarchist + anarchistic + anarchists + anarchy + Anastasia + anastigmat + anastigmatic + anastomoses + anastomosis + anastomotic + anathema + anathemas + anathematize + anathematized + anathematizing + Anatole + anatomic + anatomical + anatomically + anatomies + anatomist + anatomize + anatomized + anatomizing + anatomy + ancestor + ancestors + ancestral + ancestrally + ancestress + ancestries + ancestry + anchor + anchorage + anchorages + anchored + anchoress + anchoret + anchoring + anchorite + anchoritism + anchors + anchovies + anchovy + ancient + anciently + ancients + ancillary + and + andante + Andean + anders + Andersen + Anderson + Andes + andesine + andesite + anding + andiron + Andorra + andorra + Andover + Andre + Andrea + Andrei + Andrew + andrewartha + androgen + androgenic + androgyny + Andromache + Andromeda + ands + Andy + anecdotal + anecdote + anecdotes + anecdysis + anechoic + anemia + anemic + anemically + anemometer + anemometers + anemometry + anemone + anemotactic + anemotaxis + anent + aneroid + anesthesia + anesthetic + anesthetically + anesthetics + anesthetist + anesthetization + anesthetize + anesthetized + anesthetizes + anesthetizing + aneurism + aneurysm + anew + angel + Angela + Angeles + angeles + angelfish + angelic + Angelica + angelical + angelically + Angelina + Angeline + Angelo + angels + anger + angered + angering + angers + Angie + angina + angiography + angiosperm + angle + angled + angler + anglers + Angles + angles + angleworm + Anglican + anglican + anglicanism + anglicans + angling + Anglo + anglophilia + Anglophobia + anglophobia + Angola + angola + Angora + angrier + angriest + angrily + angry + angst + angstrom + anguish + anguished + angular + angularities + angularity + angularly + Angus + anharmonic + Anheuser + anhydride + anhydrite + anhydrous + anhydrously + ani + aniline + animadversion + animadvert + animal + animalcule + animalism + animalist + animalistic + animality + animalize + animalized + animalizing + animals + animate + animated + animatedly + animately + animateness + animater + animates + animating + animation + animations + animator + animators + animism + animist + animistic + animized + animosities + animosity + animus + anion + anionic + anions + anise + aniseed + aniseikonic + anisotropic + anisotropies + anisotropy + Anita + Ankara + ankara + ankle + anklebone + ankles + anklet + anklets + Ann + Anna + annal + Annale + Annalen + annalist + annalistic + annals + Annapolis + Anne + anneal + annealer + annelid + Annette + annex + annexable + annexation + annexed + annexes + annexing + Annie + annihilate + annihilated + annihilates + annihilating + annihilation + annihilator + anniversaries + anniversary + annotate + annotated + annotates + annotating + annotation + annotations + annotative + annotator + announce + announced + announcement + announcements + announcer + announcers + announces + announcing + annoy + annoyance + annoyances + annoyed + annoyer + annoyers + annoying + annoyingly + annoys + annual + annually + annuals + annuities + annuity + annul + annular + annulations + annuli + annullable + annulled + annulling + annulment + annulments + annuls + annulus + annum + annunciate + annunciated + annunciates + annunciating + annunciation + annunciator + annunciators + anode + anodes + anodic + anodize + anodized + anodizes + anodyne + anoint + anointed + anointing + anointment + anoints + anomalies + anomalous + anomalously + anomaly + anomic + anomie + anon + anonymity + anonymous + anonymously + anopheles + anorexia + anorthic + anorthite + anorthosite + another + anova + anre + Anselm + Anselmo + ANSI + ansi + answer + answerable + answered + answerer + answerers + answering + answers + ant + antacid + Antaeus + antagonism + antagonisms + antagonist + antagonistic + antagonistically + antagonists + antagonize + antagonized + antagonizes + antagonizing + antarctic + Antarctica + antarctica + Antares + ante + anteater + anteaters + antebellum + antecedence + antecedent + antecedently + antecedents + antechamber + anted + antedate + antedated + antedating + antediluvian + anteed + anteing + antelope + antelopes + antenna + antennae + antennas + antepenult + anterior + anteriorly + anteroom + anthelmintic + anthem + anthems + anther + anthill + anthological + anthologies + anthologist + anthologize + anthologized + anthologizing + anthology + Anthony + anthracene + anthracite + anthracitic + anthracnose + anthrax + anthropocentric + anthropogenic + anthropoid + anthropoidal + anthropologic + anthropological + anthropologically + anthropologist + anthropologists + anthropology + anthropometric + anthropometrical + anthropometrically + anthropometry + anthropomorphic + anthropomorphically + anthropomorphism + anti + antiaircraft + antibacterial + antibiotic + antibiotics + antibodies + antibody + antic + antichrist + anticipate + anticipated + anticipates + anticipating + anticipation + anticipations + anticipative + anticipatory + anticked + anticking + anticlerical + anticlericalism + anticlimactic + anticlimax + anticlinal + anticline + anticoagulant + anticoagulation + anticompetitive + antics + anticyclone + anticyclonic + antidepressant + antidisestablishmentarianism + antidotal + antidote + antidotes + Antietam + antiferroelectric + antiformant + antifreeze + antifundamentalist + antigen + antigenic + antigens + Antigone + antigorite + antihero + antiheroes + antihistamine + antihistorical + antiknock + antilogarithm + antimacassar + antimagnetic + antimatter + antimicrobial + antimissile + antimony + antinomian + antinomy + Antioch + antiparallel + antiparticle + antipasto + antipathetic + antipathetical + antipathies + antipathy + antipersonnel + antiperspirant + antiphlogistic + antiphon + antiphonal + antiphonally + antiphonic + antipodal + antipode + antipodean + antipodes + antipope + antipyretic + antiquarian + antiquarians + antiquaries + antiquary + antiquate + antiquated + antiquation + antique + antiqued + antiqueness + antiques + antiquing + antiquities + antiquity + antiredeposition + antiresonance + antiresonator + antis + antiscorbutic + antisemite + antisemitic + antisemitism + antisepsis + antiseptic + antiseptically + antisera + antiserum + antislavery + antisocial + antispasmodic + antisubmarine + antisymmetric + antisymmetry + antitank + antitheses + antithesis + antithetic + antithetical + antithyroid + antitoxic + antitoxin + antitoxins + antitrust + antiuating + antivivisectionist + antler + antlered + antlers + Antoine + Antoinette + Anton + Antonio + antonovics + Antony + antonym + antra + antrum + antrums + ants + Antwerp + anura + anuran + anurans + anus + anuses + anvil + anvils + anxieties + anxiety + anxious + anxiously + anxiousness + any + anybody + anybody'd + anyhow + anymore + anyone + anyplace + anything + anytime + anyway + anywhere + anywise + aorta + aortae + aortas + aoudad + apace + apache + apaches + apart + apartheid + apartment + apartments + apathetic + apathetically + apathies + apathy + apatite + ape + aped + apelike + aperient + aperiodic + aperiodicity + aperitif + aperture + apertures + apes + apetalous + apex + apexes + aphasia + aphasic + aphelilia + aphelilions + aphelion + aphid + aphides + aphids + aphis + aphonic + aphorism + aphorisms + aphoristic + aphrodisiac + Aphrodite + aphrodite + apiararies + apiaries + apiarist + apiary + apical + apically + apices + apicultural + apiculture + apiculturist + apiece + aping + apish + apishness + apl + aplenty + aplomb + apnea + apocalypse + apocalyptic + apocalyptical + apocope + Apocrypha + apocrypha + apocryphal + apogee + apogees + Apollo + apollo + Apollonian + apollonian + apologetic + apologetically + apologetics + apologia + apologies + apologist + apologists + apologize + apologized + apologizes + apologizing + apologue + apology + apoplectic + apoplectical + apoplexy + aport + apostasies + apostasy + apostate + apostle + apostles + apostolic + apostolical + apostrophe + apostrophes + apostrophize + apostrophized + apostrophizing + apothecarcaries + apothecary + apothegm + apotheoses + apotheosis + apotheosize + apotheosized + apotheosizing + appal + Appalachia + appalachia + appalachian + appalachians + appall + appalled + appalling + appallingly + appaloosa + appanage + apparatus + apparatuses + apparel + appareled + apparent + apparently + apparition + apparitional + apparitions + appeal + appealed + appealer + appealers + appealing + appealingly + appeals + appear + appearance + appearances + appeared + appearer + appearers + appearing + appears + appeasable + appease + appeased + appeasement + appeases + appeasing + appellant + appellants + appellate + appellation + appellative + append + appendage + appendages + appendectomies + appendectomy + appended + appender + appenders + appendices + appendicitis + appending + appendix + appendixes + appends + appertain + appertains + appetite + appetites + appetizer + appetizers + appetizing + appetizingly + Appian + applaud + applauded + applauding + applauds + applause + apple + Appleby + applejack + apples + applesauce + Appleton + appliance + appliances + applicability + applicable + applicably + applicant + applicants + applicate + application + applications + applicative + applicatively + applicator + applicators + applied + applier + appliers + applies + applique + apply + applying + appoint + appointe + appointed + appointee + appointees + appointer + appointers + appointing + appointive + appointment + appointments + appoints + apport + apportion + apportioned + apportioning + apportionment + apportionments + apportions + apposable + appose + apposed + apposing + apposite + appositely + appositeness + apposition + appositional + appositive + appraisal + appraisals + appraise + appraised + appraisement + appraiser + appraisers + appraises + appraising + appraisingly + appreciable + appreciably + appreciate + appreciated + appreciates + appreciating + appreciation + appreciations + appreciative + appreciatively + appreciativeness + appreciator + apprehend + apprehended + apprehending + apprehends + apprehensible + apprehension + apprehensions + apprehensive + apprehensively + apprehensiveness + apprentice + apprenticed + apprentices + apprenticeship + apprenticing + apprise + apprised + apprises + apprising + apprize + apprized + apprizing + approach + approachability + approachable + approached + approacher + approachers + approaches + approaching + approbate + approbation + appropriable + appropriate + appropriated + appropriately + appropriateness + appropriates + appropriating + appropriation + appropriations + appropriative + appropriator + appropriators + approval + approvals + approve + approved + approver + approvers + approves + approving + approvingly + approx + approximable + approximant + approximants + approximate + approximated + approximately + approximates + approximating + approximation + approximations + appurtenance + appurtenances + appurtenant + apricot + apricots + April + april + apron + aprons + apropos + apse + apsis + apt + apterous + apteryx + aptitude + aptitudes + aptly + aptness + aqua + aquacultural + aquaculture + aquae + aqualung + aquamarine + aquanaut + aquaplane + aquaplaned + aquaplaning + aquaria + aquariia + aquariiums + aquarist + aquarium + Aquarius + aquarius + aquas + aquatic + aquatically + aquatint + aqueduct + aqueducts + aqueous + aquifer + aquifers + Aquila + aquiline + Aquinas + AR + Arab + arab + arabesque + Arabia + arabia + arabian + arabians + Arabic + arabic + arable + arabs + Araby + Arachne + arachnid + arachnidan + arachnids + arbalest + arbalist + arbiter + arbiters + arbitrage + arbitrament + arbitrarily + arbitrariness + arbitrary + arbitrate + arbitrated + arbitrates + arbitrating + arbitration + arbitrational + arbitrator + arbitrators + arbor + arborea + arboreal + arbores + arborescent + arboreta + arboretum + arboretums + arbors + arborvitae + arbutus + arc + arcade + arcaded + arcades + Arcadia + arcana + arcane + arccos + arccosine + arced + arceuthobium + arch + archae + archaeological + archaeologist + archaeologists + archaeology + archaic + archaically + archaicness + archaism + archaize + archangel + archangels + archbishop + archbishopric + archdeacon + archdeaconries + archdeaconry + archdiocese + archdioceses + archduchess + archduchies + archduchy + archduke + arched + archegonial + archegonium + archenemies + archenemy + archeological + archeologist + archeology + archer + archers + archery + arches + archetypal + archetype + archetypical + archfiend + archfool + Archibald + archidiaconal + archidiaconate + archiepiscopal + archiepiscopate + Archimedes + arching + archipelago + archipelagoes + archipelagos + architect + architectonic + architectonics + architects + architectural + architecturally + architecture + architectures + architrave + archival + archive + archived + archiver + archivers + archives + archiving + archivist + archly + archness + archon + archpriest + archway + arcing + arclength + arclike + arcs + arcsin + arcsine + arctan + arctangent + arctic + arctics + Arcturus + Arden + ardent + ardently + ardor + ardors + ardour + ardours + arduous + arduously + arduousness + are + area + areal + areas + areaway + areawide + aren + aren't + arena + arenaceous + arenas + arenicolor + Arequipa + Ares + arg + argent + argental + Argentina + argentina + argillaceous + arginine + Argive + argo + argon + Argonaut + argonaut + argonauts + Argonne + argos + argosies + argosy + argot + arguable + arguably + argue + argued + arguer + arguers + argues + arguing + argument + argumentation + argumentative + argumentativeness + argumentive + arguments + Argus + argyle + arhat + aria + Ariadne + Arianism + arianism + arianist + arianists + arid + aridity + aridly + aridness + Aries + aries + aright + aril + arillate + arise + arised + arisen + ariser + arises + arising + arisings + aristocracies + aristocracy + aristocrat + aristocratic + aristocratically + aristocrats + Aristotelean + Aristotelian + aristotelian + Aristotle + aristotle + arithmetic + arithmetical + arithmetically + arithmetics + arithmetize + arithmetized + arithmetizes + Arizona + arizona + ark + Arkansan + Arkansas + arkansas + Arlen + Arlene + Arlington + arm + armada + armadillo + armadillos + Armageddon + armageddon + armament + armaments + Armata + armature + armchair + armchairs + Armco + armed + Armenia + armenian + armer + armers + armful + armfuls + armhole + armies + armillaria + arming + armistice + armit + armless + armlet + armlike + armload + armoire + Armonk + armor + armored + armorer + armorial + armories + armory + Armour + armour + armpit + armpits + arms + Armstrong + armstrong + army + arnica + Arnold + aroma + aromas + aromatic + aromatically + arose + around + arousal + arouse + aroused + arouses + arousing + ARPA + arpa + arpanet + arpeggio + arpeggios + arrack + Arragon + arraign + arraigned + arraigning + arraignment + arraignments + arraigns + arrange + arrangeable + arranged + arrangement + arrangements + arranger + arrangers + arranges + arranging + arrant + arras + array + arrayal + arrayed + arraying + arrays + arrear + arrears + arrest + arrested + arrester + arresters + arresting + arrestingly + arrestor + arrestors + arrests + Arrhenius + arribadas + arrival + arrivals + arrive + arrived + arrivederci + arrives + arriving + arrogance + arrogancy + arrogant + arrogantly + arrogate + arrogated + arrogates + arrogating + arrogation + arrow + arrowed + arrowhead + arrowheads + arrowroot + arrows + arroyo + arroyos + arsenal + arsenals + arsenate + arsenic + arsenide + arsine + arson + arsonist + art + Artemis + artemis + artemisia + arterial + arteries + arteriolar + arteriole + arterioles + arteriolosclerosis + arteriosclerosis + arteriosclerotic + artery + artful + artfully + artfulness + arthogram + arthritic + arthritically + arthritis + arthropod + arthropods + Arthur + artichoke + artichokes + article + articled + articles + articling + articular + articulate + articulated + articulately + articulateness + articulates + articulating + articulation + articulations + articulator + articulators + articulatory + Artie + artier + artiest + artifact + artifacts + artifactually + artifice + artificer + artifices + artificial + artificialities + artificiality + artificially + artificialness + artilleries + artillerist + artillery + artilleryman + artillerymen + artiness + artisan + artisans + artist + artiste + artistic + artistically + artistry + artists + artless + artlessly + artlessness + arts + Arturo + artwork + arty + aru + Aruba + arum + aryan + aryl + as + asafetida + asafoetida + asap + asbestos + asbestus + ascebc + ascend + ascendable + ascendance + ascendancy + ascendant + ascended + ascendence + ascendency + ascendent + ascender + ascenders + ascendible + ascending + ascends + ascension + ascensions + ascent + ascertain + ascertainable + ascertained + ascertaining + ascertainment + ascertains + ascetic + ascetically + asceticism + ascetics + ascidian + ascidiia + ascidium + ascii + ascomycete + ascomycetes + ascorbic + ascot + ascribable + ascribe + ascribed + ascribes + ascribing + ascription + asepsis + aseptic + aseptically + asexual + asexually + ash + ashame + ashamed + ashamedly + ashcan + ashen + Asher + asher + ashes + Asheville + ashier + ashiest + Ashland + ashlar + ashler + Ashley + ashman + ashmen + Ashmolean + ashore + ashtray + ashtrays + ashy + Asia + asia + asian + asians + Asiatic + asiatic + aside + Asilomar + asinine + asininely + asininities + asininity + ask + askance + asked + asker + askers + askew + asking + asks + aslant + asleep + asocial + asp + asparagine + asparagus + aspartic + aspect + aspects + aspen + asperities + asperity + asperse + aspersed + aspersing + aspersion + aspersions + asphalt + asphaltic + aspheric + asphodel + asphyxia + asphyxiant + asphyxiate + asphyxiated + asphyxiating + asphyxiation + asphyxiator + aspic + aspidistra + aspirant + aspirants + aspirate + aspirated + aspirates + aspirating + aspiration + aspirations + aspirator + aspirators + aspire + aspired + aspires + aspirin + aspiring + aspiringly + aspirins + asplenium + ass + assagai + assai + assail + assailable + assailant + assailants + assailed + assailer + assailing + assails + Assam + assassin + assassinate + assassinated + assassinates + assassinating + assassination + assassinations + assassins + assault + assaulted + assaulting + assaultive + assaults + assay + assayed + assayer + assaying + assemblage + assemblages + assemble + assembled + assembler + assemblers + assembles + assemblies + assembling + assembly + assemblyman + assemblymen + assent + assented + assenter + assenting + assents + assert + asserted + asserter + asserters + asserting + assertion + assertions + assertive + assertively + assertiveness + assertor + assertors + asserts + asses + assess + assessed + assesses + assessing + assessment + assessments + assessor + assessors + asset + assets + asseverate + asseverated + asseverating + asseveration + assiduities + assiduity + assiduous + assiduously + assiduousness + assign + assignable + assignation + assignations + assigned + assignee + assignees + assigner + assigners + assigning + assignment + assignments + assignor + assigns + assimilable + assimilate + assimilated + assimilates + assimilating + assimilation + assimilations + assimilative + assist + assistance + assistances + assistant + assistants + assistantship + assistantships + assisted + assisting + assists + associable + associate + associated + associates + associating + association + associational + associations + associative + associatively + associativity + associator + associators + assonance + assonant + assort + assortative + assorted + assortment + assortments + assorts + assuage + assuaged + assuagement + assuages + assuaging + assume + assumed + assumedly + assumer + assumes + assuming + assumption + assumptions + assurance + assurances + assure + assured + assuredly + assurer + assurers + assures + assuring + assuringly + Assyria + assyrian + Assyriology + assyriology + Astarte + astatine + aster + asteria + asterisk + asterisks + astern + asteroid + asteroidal + asteroids + asters + asthma + asthmatic + astigmat + astigmatic + astir + ASTM + astonish + astonished + astonishes + astonishing + astonishingly + astonishment + Astor + Astoria + astound + astounded + astounding + astoundingly + astounds + astrachan + astraddle + astrakhan + astral + astray + astride + astringency + astringent + astringently + astrolabe + astrologer + astrology + astronaut + astronautic + astronautical + astronautics + astronauts + astronomer + astronomers + astronomic + astronomical + astronomically + astronomy + astrophysical + astrophysicist + astrophysics + astute + astutely + astuteness + Asuncion + asunder + asylum + asylums + asymmetric + asymmetrical + asymmetrically + asymmetries + asymmetry + asymptomatically + asymptote + asymptotes + asymptotic + asymptotically + asymtote + asymtotes + asymtotic + asymtotically + asynchronism + asynchronisms + asynchronous + asynchronously + asynchrony + at + AT&T + Atalanta + ataractic + ataraxic + atavism + atavistic + ataxia + ataxic + Atchison + ate + atelier + atemporal + Athabascan + atheism + atheist + atheistic + atheistical + atheists + Athena + athena + athenaeum + atheneum + Athenian + athenian + athenians + Athens + athens + atherosclerosis + athirst + athlete + athletes + athletic + athletically + athleticism + athletics + athwart + atilt + atingle + Atkins + Atkinson + Atlanta + atlanta + atlantes + atlantic + Atlantica + Atlantis + atlas + atlases + atmosphere + atmospheres + atmospheric + atmospherical + atoll + atolls + atom + atomic + atomically + atomics + atomization + atomize + atomized + atomizer + atomizes + atomizing + atoms + atonal + atonalism + atonalistic + atonality + atonally + atone + atoned + atonement + atoner + atones + atoning + atop + atpoints + Atreus + atria + atrium + atriums + atrocious + atrociously + atrociousness + atrocities + atrocity + atrophic + atrophied + atrophies + atrophy + atrophying + atropine + Atropos + attach + attachable + attache + attached + attacher + attachers + attaches + attaching + attachment + attachments + attack + attackable + attacked + attacker + attackers + attacking + attacks + attain + attainability + attainable + attainably + attainder + attained + attainer + attainers + attaining + attainment + attainments + attains + attaint + attar + attatched + attatches + attempt + attempted + attempter + attempters + attempting + attempts + attend + attendance + attendances + attendant + attendants + attended + attendee + attendees + attender + attenders + attending + attends + attention + attentional + attentionality + attentions + attentive + attentively + attentiveness + attenuable + attenuate + attenuated + attenuates + attenuating + attenuation + attenuator + attenuators + attest + attestation + attested + attester + attesting + attestor + attests + attic + Attica + attics + attire + attired + attires + attiring + attitude + attitudes + attitudinal + attitudinize + attitudinized + attitudinizing + attn + attntrp + attorney + attorneys + attract + attractable + attractant + attractants + attracted + attracting + attraction + attractions + attractive + attractively + attractiveness + attractor + attractors + attracts + attributable + attribute + attributed + attributes + attributing + attribution + attributions + attributive + attributively + attrition + attune + attuned + attunes + attuning + Atwater + Atwood + atypic + atypical + atypically + Auberge + Aubrey + auburn + Auckland + auckland + auction + auctioneer + auctioneers + auctions + audacious + audaciously + audaciousness + audacities + audacity + audibility + audible + audibly + audience + audiences + audio + audiogram + audiograms + audiological + audiologist + audiologists + audiology + audiometer + audiometers + audiometric + audiometry + audiophile + audiotape + audiovisual + audit + audited + auditing + audition + auditioned + auditioning + auditions + auditor + auditorium + auditoriums + auditors + auditory + audits + Audrey + Audubon + audubon + Auerbach + Aug + aug + Augean + auger + augers + aught + augite + augment + augmentable + augmentation + augmentative + augmented + augmenter + augmenting + augments + augur + auguries + augurs + augury + august + Augusta + augusta + Augustine + augustly + augustness + Augustus + auk + aunt + auntie + aunts + aunty + aura + aurae + aural + aurally + auras + aureate + Aurelius + aureola + aureole + aureomycin + auric + auricle + auricular + auricularly + auriferous + Auriga + aurochs + aurora + Auschwitz + auscultate + auscultated + auscultates + auscultating + auscultation + auscultations + auspice + auspices + auspicious + auspiciously + auspiciousness + austenite + austere + austerely + austereness + austerities + austerity + austerus + Austin + austin + austral + Australia + australia + australian + Australis + australite + Austria + austria + austrian + autarchic + autarchical + autarchies + autarchy + autarkic + autarkical + autarky + authentic + authentically + authenticate + authenticated + authenticates + authenticating + authentication + authentications + authenticator + authenticators + authenticity + author + authored + authoring + authoritarian + authoritarianism + authoritative + authoritatively + authoritativeness + authorities + authority + authorization + authorizations + authorize + authorized + authorizer + authorizers + authorizes + authorizing + authors + authorship + autism + autistic + auto + autobiographer + autobiographic + autobiographical + autobiographies + autobiography + autoclave + autocollimate + autocollimator + autocorrelate + autocorrelation + autocracies + autocracy + autocrat + autocratic + autocratical + autocratically + autocrats + autodecrement + autodecremented + autodecrements + autodialer + autofluorescence + autogiro + autograph + autographed + autographing + autographs + autogyro + autogyros + autohypnosis + autoincrement + autoincremented + autoincrements + autoindex + autoindexing + autointoxication + automat + automata + automate + automated + automates + automatic + automatically + automating + automation + automatism + automaton + automatonta + automatontons + automobile + automobiles + automorphism + automotive + autonavigator + autonavigators + autonomic + autonomies + autonomous + autonomously + autonomy + autopilot + autopilots + autopsied + autopsies + autopsy + autoregressive + autos + autosomal + autosome + autosuggestibility + autosuggestible + autotransformer + autumn + autumnal + autumns + auxiliaries + auxiliary + avail + availabilities + availability + available + availably + availed + availer + availers + availing + avails + avalanche + avalanched + avalanches + avalanching + avant + avarice + avaricious + avariciously + avariciousness + avast + avatar + Ave + ave + avenge + avenged + avenger + avenges + avenging + Aventine + avenue + avenues + aver + average + averaged + averages + averaging + averred + averrer + averring + avers + averse + aversely + averseness + aversion + aversions + avert + averted + avertible + averting + averts + Avery + Avesta + avg + avian + aviararies + aviaries + aviary + aviate + aviation + aviator + aviators + aviatrix + avid + avidity + avidly + avionic + avionics + Avis + Aviv + avocado + avocados + avocate + avocation + avocational + avocations + avocet + Avogadro + avoid + avoidable + avoidably + avoidance + avoided + avoider + avoiders + avoiding + avoids + avoirdupois + Avon + avouch + avouchment + avow + avowal + avowed + avowedly + avower + avows + avuncular + await + awaited + awaiting + awaits + awake + awaked + awaken + awakened + awakener + awakening + awakens + awakes + awaking + award + awarded + awarder + awarders + awarding + awards + aware + awareness + awash + away + aways + awe + awed + aweigh + awesome + awesomely + awesomeness + awful + awfully + awfulness + awhile + awing + awkward + awkwardly + awkwardness + awl + awls + awn + awned + awning + awnings + awoke + awol + awry + ax + axe + axed + axer + axers + axes + axial + axially + axil + axilla + axillae + axillary + axillas + axing + axiological + axiology + axiom + axiomatic + axiomatically + axiomatization + axiomatizations + axiomatize + axiomatized + axiomatizes + axiomatizing + axioms + axis + axisymmetric + axle + axles + axletree + axolotl + axolotls + axon + axons + aye + Ayers + ayes + Aylesbury + AZ + azalea + azaleas + Azerbaijan + azimuth + azimuthal + azimuths + Aztec + Aztecan + azure + azurite + b + b's + baa + babasu + babbage + babbitt + babbittry + babble + babbled + babbler + babbles + babbling + Babcock + babe + Babel + babel + babes + babied + babies + babirousa + babiroussa + babirusa + babirussa + babka + baboo + baboon + baboons + babu + babul + babushka + baby + babyhood + babying + babyish + babylike + Babylon + babysat + babysit + babysitter + babysitting + baccalaureat + baccalaureate + baccara + baccarat + baccate + bacchanal + bacchanalian + bacchant + bacchante + bacchantes + bacchantic + bacchants + bacchic + Bacchus + bacciferous + bacciform + baccivorous + Bach + bach + bachelor + bachelorhood + bachelors + bacilary + bacilli + bacilliform + bacillus + back + backache + backaches + backarrow + backarrows + backbencher + backbend + backbends + backbit + backbite + backbiter + backbiting + backbitten + backboard + backbone + backbones + backbreaking + backcountry + backcross + backdate + backdoor + backdown + backdrop + backdrops + backed + backer + backers + backfield + backfill + backfire + backfired + backfiring + backgammon + background + backgrounds + backhand + backhanded + backhouse + backing + backlash + backless + backliding + backlist + backlog + backlogged + backlogging + backlogs + backoff + backorder + backpack + backpacker + backpacking + backpacks + backpedal + backpedaled + backpedaling + backplane + backplanes + backplate + backpointer + backpointers + backrest + backs + backscatter + backscattered + backscattering + backscatters + backset + backsheesh + backshish + backside + backsite + backslapper + backslash + backslashes + backslid + backslide + backslider + backspace + backspaced + backspacefile + backspaces + backspacing + backspin + backstage + backstair + backstairs + backstay + backstitch + backstitched + backstitches + backstitching + backstop + backstretch + backstroke + backstroked + backstroking + backswept + backsword + backtrace + backtrack + backtracked + backtracker + backtrackers + backtracking + backtracks + backup + backups + backus + backward + backwardly + backwardness + backwards + backwash + backwater + backwaters + backwood + backwoods + backyard + backyards + bacon + bacteremia + bacteria + bacterial + bactericidal + bactericide + bacteriologic + bacteriological + bacteriologist + bacteriology + bacteriolysis + bacteriophage + bacterioscopy + bacteriostasis + bacteririum + bacterium + bacterize + bacteroid + baculiform + baculine + baculum + bad + badderlocks + bade + Baden + badge + badged + badger + badgered + badgering + badgers + badges + badging + badinage + badinaged + badinaging + badland + badlands + badly + badman + badmen + badminton + badness + Baffin + baffle + baffled + bafflement + baffler + bafflers + baffling + bag + bagasse + bagatelle + bagatelles + bagel + bagels + bagful + baggage + bagged + bagger + baggers + baggier + baggiest + baggily + bagginess + bagging + baggy + Baghdad + Bagley + bagman + bagnio + bagpipe + bagpiper + bagpipes + bags + baguet + baguette + bagwig + bah + Bahama + Bahrein + baht + bail + bailable + bailed + bailee + bailer + Bailey + bailie + bailiff + bailiffs + bailing + bailiwick + bailment + bailor + bailsman + bailsmen + bainite + Baird + bairdi + bairn + bait + baited + baiter + baiting + baits + baize + baja + bake + baked + bakehouse + Bakelite + baker + bakeries + bakers + Bakersfield + bakery + bakes + bakeshop + Bakhtiari + baking + baklava + baksheesh + bakshish + Baku + balalaika + balalaikas + balance + balanceable + balanced + balancer + balancers + balances + balancing + balas + balata + Balboa + balbriggan + balconies + balcony + bald + baldachin + baldaquin + balderdash + baldfaced + baldhead + balding + baldly + baldness + baldpate + baldric + Baldwin + baldy + bale + baled + baleen + balefire + baleful + balefully + balefulness + baler + bales + Balfour + Bali + balibuntal + balibuntl + Balinese + baling + balk + Balkan + balkan + balkanize + balkanized + balkanizing + balkans + balked + balker + balkier + balkiest + balkiness + balking + balkline + balks + balky + ball + ballad + ballade + balladeer + balladmonger + balladry + ballads + Ballard + ballast + ballasts + balled + baller + ballerina + ballerinas + ballers + ballet + balletomane + ballets + ballfield + ballgown + ballgowns + balling + ballista + ballistic + ballistics + ballonet + balloon + ballooned + ballooner + ballooners + ballooning + balloonist + balloons + ballot + ballots + ballottement + ballpark + ballparks + ballplayer + ballplayers + ballroom + ballrooms + balls + ballute + ballyhoo + ballyhooed + ballyhooing + balm + balmacaan + balmier + balmiest + balmily + balminess + balms + balmy + balneal + balneology + baloney + balr + balsa + balsam + balsamic + Baltic + baltic + Baltimore + baltimore + Baltimorean + baluster + balustrade + balustrades + Balzac + bam + Bamako + Bamberger + Bambi + bambini + bambino + bambinos + bamboo + bamboozle + bamboozled + bamboozlement + bamboozling + ban + Banach + banal + banalities + banality + banally + banana + bananas + Banbury + band + bandage + bandaged + bandages + bandaging + bandaid + bandana + bandanna + bandbox + bandeau + bandeaux + banded + banderilla + banderillero + banderol + banderole + bandgap + bandicoot + bandied + bandies + banding + bandit + banditry + bandits + banditti + bandlimit + bandlimited + bandlimiting + bandlimits + bandmaster + bandog + bandoleer + bandolier + bandore + bandpass + bands + bandsman + bandsmen + bandstand + bandstands + bandstop + bandwagon + bandwagons + bandwidth + bandwidths + bandy + bandying + bandylegged + bane + baneberries + baneberry + baneful + banefully + bang + bangboard + banged + banging + bangkok + Bangladesh + bangladesh + bangle + bangles + Bangor + bangs + Bangui + banian + banish + banished + banishes + banishing + banishment + banister + banisters + banjo + banjoes + banjoist + banjos + bank + bankbook + banked + banker + bankers + banking + bankroll + bankrupcy + bankrupt + bankruptcies + bankruptcy + bankrupted + bankrupting + bankrupts + banks + banksia + banlieue + banned + banner + banneret + bannerol + banners + banning + bannister + bannock + banns + banquet + banqueter + banqueting + banquetings + banquets + banquette + bans + banshee + banshees + banshie + bantam + bantamweight + banter + bantered + banterer + bantering + banteringly + banters + Bantu + bantu + Bantus + bantus + banyan + banzai + baobab + baptisia + baptism + baptismal + baptisms + Baptist + baptist + Baptiste + baptisteries + baptistery + baptistries + baptistry + baptists + baptize + baptized + baptizes + baptizing + bar + barathea + barb + Barbados + barbados + Barbara + barbarian + barbarianism + barbarians + barbaric + barbarically + barbarism + barbarities + barbarity + barbarization + barbarize + barbarized + barbarizing + barbarous + barbarously + barbasco + barbate + barbecue + barbecued + barbecueing + barbecues + barbecuing + barbed + barbel + barbell + barbellate + barbells + barbeque + barbequed + barber + barbering + barberries + barberry + barbers + barbershop + barbery + barbet + barbette + barbican + barbicel + barbital + barbiturate + barbiturates + Barbour + barbs + barbudo + barbule + barbwire + barcarole + barcarolle + Barcelona + barchan + Barclay + bard + bardic + bards + bare + bareback + bared + barefaced + barefacedly + barefoot + barefooted + barege + barehanded + bareheaded + barelegged + barely + bareness + barer + bares + baresark + barest + barflies + barfly + bargain + bargained + bargainer + bargaining + bargains + barge + bargeboard + barged + bargee + bargeman + bargemen + barges + barghest + barging + baric + barilla + baring + barite + baritone + baritones + barium + bark + barked + barkeep + barkeeper + barkentine + barker + barkers + barking + barks + barley + barleycorn + Barlow + barm + barmaid + barmier + barmiest + barmy + barn + Barnabas + barnacle + barnacles + Barnard + Barnes + Barnet + Barnett + Barney + Barnhard + barns + barnstorm + barnstormed + barnstorming + barnstorms + barnyard + barnyards + barograph + barometer + barometers + barometric + barometrical + baron + baronage + baroness + baronet + baronetcies + baronetcy + baronial + baronies + barons + barony + baroque + baroqueness + barouche + Barr + barrack + barracks + barracuda + barracudas + barrage + barraged + barrages + barraging + barratry + barre + barred + barrel + barreled + barreling + barrelled + barrelling + barrels + barren + barrenly + barrenness + Barrett + barrette + barricade + barricaded + barricades + barricading + barrier + barriers + barring + barringer + Barrington + barrister + barroom + barrow + Barry + Barrymore + bars + Barstow + bartend + bartender + bartenders + barter + bartered + barterer + bartering + barters + Barth + Bartholomew + Bartlett + Bartok + Barton + barycentric + baryon + barytes + barytone + bas + basal + basalt + basat + bascule + base + baseball + baseballs + baseband + baseboard + baseboards + based + Basel + baseless + baselessness + baseline + baselines + basely + baseman + basemen + basement + basements + basename + baseness + baseplate + basepoint + baser + bases + bash + bashaw + bashed + bashes + bashful + bashfully + bashfulness + bashing + basic + basically + basics + basidiomycetes + basil + basilar + basilica + basilisk + basin + basing + basins + basis + basitting + bask + basked + basket + basketball + basketballs + baskets + basketweaving + basking + basophilic + bass + basses + basset + Bassett + bassi + bassinet + bassinets + basso + bassoon + bassoonist + bassos + basswood + bast + bastard + bastardization + bastardize + bastardized + bastardizing + bastardly + bastards + bastardy + baste + basted + baster + bastes + bastile + bastille + bastinado + bastinadoes + basting + bastion + bastioned + bastions + bat + Batavia + batch + batched + Batchelder + batches + batching + bate + bateau + bated + Bateman + bater + bath + bathe + bathed + bather + bathers + bathes + bathetic + bathhouse + bathing + bathmat + bathos + bathrobe + bathrobes + bathroom + bathrooms + baths + bathtub + bathtubs + Bathurst + bathymetric + bathysphere + batik + bating + batiste + baton + batons + Bator + bats + batsman + batsmen + batt + battalion + battalions + batted + Battelle + batten + battens + batter + battered + batteries + battering + batters + battery + battier + battiest + batting + battle + battled + battledore + battlefield + battlefields + battlefront + battlefronts + battleground + battlegrounds + battlement + battlements + battler + battlers + battles + battleship + battleships + battling + batty + batwing + bauble + baubles + baud + Baudelaire + Bauer + Bauhaus + baulk + Bausch + bauxite + Bavaria + bawd + bawdier + bawdiest + bawdily + bawdiness + bawdy + bawl + bawled + bawling + bawls + Baxter + bay + bayberries + bayberry + Bayda + bayed + Bayesian + baying + Baylor + bayonet + bayoneted + bayoneting + bayonets + Bayonne + bayou + bayous + Bayport + Bayreuth + bays + bazaar + bazaars + bazooka + bbs + bcd + be + beach + beachcomber + beached + beaches + beachhead + beachheads + beaching + beacon + beacons + bead + beaded + beadier + beadiest + beading + beadle + beadles + beads + beady + beagle + beagles + beak + beaked + beaker + beakers + beaks + beam + beamed + beamer + beamers + beaming + beamingly + beams + bean + beaned + beaner + beaners + beaning + beans + bear + bearable + bearably + bearberry + beard + bearded + beardless + beards + Beardsley + beared + bearer + bearers + bearing + bearings + bearish + bearishly + bearpaw + bears + bearskin + beast + beastie + beastlier + beastliest + beastliness + beastly + beasts + beat + beatable + beatably + beaten + beater + beaters + beatific + beatification + beatified + beatify + beatifying + beating + beatings + beatitude + beatitudes + beatnik + beatniks + Beatrice + beats + beau + Beaujolais + Beaumont + Beauregard + beaus + beauteous + beauteously + beautician + beauties + beautification + beautifications + beautified + beautifier + beautifiers + beautifies + beautiful + beautifully + beautify + beautifying + beauty + beaux + beaver + beavers + bebop + becalm + becalmed + becalming + becalms + became + because + Bechtel + beck + becket + Beckman + beckon + beckoned + beckoning + beckons + Becky + becloud + become + becomes + becoming + becomingly + bed + bedaub + bedazzle + bedazzled + bedazzlement + bedazzles + bedazzling + bedbug + bedbugs + bedchamber + bedclothes + bedded + bedder + bedders + bedding + bedeck + bedevil + bedeviled + bedeviling + bedevilment + bedevils + bedew + bedfast + bedfellow + Bedford + bedight + bedim + bedimmed + bedimming + bedizen + bedizenment + bedlam + bedpan + bedpost + bedposts + bedraggle + bedraggled + bedraggling + bedridden + bedrock + bedroll + bedroom + bedrooms + beds + bedside + bedsore + bedspread + bedspreads + bedspring + bedsprings + bedstead + bedsteads + bedstraw + bedtime + bee + Beebe + beebread + beech + Beecham + beechen + beecher + beechnut + beechwood + beef + beefed + beefer + beefers + beefier + beefiest + beefiness + beefing + beefs + beefsteak + beefy + beehive + beehives + beeline + been + beep + beeped + beeping + beeps + beer + beers + bees + beeswax + beet + Beethoven + beethoven + beetle + beetled + beetles + beetling + beets + beeves + befall + befallen + befalling + befalls + befell + befit + befits + befitted + befitting + befittingly + befog + befogged + befogging + before + beforehand + befoul + befouled + befouling + befouls + befriend + befriended + befriending + befriends + befuddle + befuddled + befuddlement + befuddles + befuddling + beg + began + begat + beget + begets + begetter + begetting + beggar + beggarliness + beggarly + beggars + beggary + begged + begging + begin + beginner + beginners + beginning + beginnings + begins + begird + begirded + begirding + begirt + begone + begonia + begot + begotten + begrime + begrimed + begriming + begrudge + begrudged + begrudges + begrudging + begrudgingly + begs + beguile + beguiled + beguilement + beguiler + beguiles + beguiling + beguilingly + begun + behalf + behav + behave + behaved + behaves + behaving + behavior + behavioral + behaviorally + behaviorism + behaviorist + behavioristic + behaviors + behaviour + behavioural + behaviourally + behaviourist + behaviours + behead + beheading + beheld + behemoth + behemoths + behest + behind + behindhand + behold + beholden + beholder + beholders + beholding + beholds + behoof + behoove + behooved + behooves + behooving + beige + Beijing + being + beings + Beirut + bejewel + bejeweled + bejeweling + bel + Bela + belabor + belabored + belaboring + belabors + belate + belated + belatedly + belatedness + belay + belayed + belaying + belays + belch + belched + belches + belching + beldam + beldame + beleaguer + Belfast + belfries + belfry + Belgian + belgian + belgians + Belgium + belgium + Belgrade + belie + belied + belief + beliefs + belies + believability + believable + believably + believe + believed + believer + believers + believes + believing + belittle + belittled + belittlement + belittler + belittles + belittling + bell + Bella + belladonna + Bellamy + Bellatrix + bellboy + bellboys + belle + belles + belletrist + belletristic + bellflower + bellhop + bellhops + bellicose + bellicosely + bellicosity + bellied + bellies + belligerence + belligerency + belligerent + belligerently + belligerents + Bellingham + Bellini + bellman + bellmen + bellow + bellowed + bellowing + bellows + bells + bellum + bellwether + bellwethers + belly + bellyache + bellyached + bellyacher + bellyaching + bellybutton + bellyfull + bellying + Belmont + Beloit + belong + belonged + belonging + belongings + belongs + belove + beloved + below + Belshazzar + belt + belted + belting + belts + Beltsville + beluga + belugas + belvedere + belvidere + bely + belying + BEMA + bemadden + beman + bemire + bemired + bemiring + bemoan + bemoaned + bemoaning + bemoans + bemuse + bemused + bemusement + bemusing + Ben + bench + benched + benches + benchmark + benchmarking + benchmarks + bend + bendable + bendell + bender + benders + bending + Bendix + bends + beneath + Benedict + benedict + Benedictine + benedictine + benediction + benedictions + benedictory + Benedikt + benefaction + benefactor + benefactors + benefactress + benefice + beneficed + beneficence + beneficences + beneficent + beneficently + beneficial + beneficially + beneficiaries + beneficiary + beneficing + benefit + benefited + benefiting + benefits + benefitted + benefitting + Benelux + benevolence + benevolent + benevolently + Bengal + bengal + Bengali + bengali + benight + benighted + benign + benignant + benignantly + benignities + benignity + benignly + benison + Benjamin + Bennett + Bennington + Benny + Benson + bent + bentgrass + Bentham + benthic + Bentley + Benton + benumb + Benz + Benzedrine + benzedrine + benzene + benzine + benzoate + benzocaine + benzoin + benzol + Beograd + Beowulf + beplaster + bequeath + bequeathal + bequeathed + bequeathing + bequeaths + bequest + bequests + berate + berated + berates + berating + Berea + bereave + bereaved + bereavement + bereavements + bereaves + bereaving + bereft + Berenices + Beresford + beret + berets + berg + bergamot + Bergen + Bergland + Berglund + Bergman + Bergson + Bergstrom + beribbon + beribboned + beriberi + Berkeley + berkeley + berkelium + Berkowitz + Berkshire + Berlin + berlin + berliner + berliners + Berlioz + Berlitz + berm + Berman + berme + Bermuda + bermuda + Bern + Bernadine + Bernard + Bernardino + Bernardo + berne + Bernet + Bernhard + Bernice + Bernie + Berniece + Bernini + Bernoulli + Bernstein + Berra + berried + berries + berry + berrying + berryman + berserk + Bert + berth + Bertha + berths + Bertie + Bertram + Bertrand + Berwick + beryl + beryllium + beseech + beseeches + beseeching + beseechingly + beseem + beset + besets + besetting + beside + besides + besiege + besieged + besieger + besiegers + besieging + besmear + besmirch + besmirched + besmirches + besmirching + besom + besot + besotted + besotter + besotting + besought + bespangle + bespangled + bespangling + bespatter + bespeak + bespeaking + bespeaks + bespectacled + bespoke + bespoken + bespread + bespreading + Bess + Bessel + bessel + Bessemer + Bessie + best + bested + bestial + bestialities + bestiality + bestially + besting + bestir + bestirred + bestirring + bestow + bestowal + bestowed + bestrew + bestrewed + bestrewing + bestrewn + bestridden + bestride + bestriding + bestrode + bests + bestseller + bestsellers + bestselling + bestubble + bet + beta + betake + betaken + betatron + betel + Betelgeuse + beth + bethel + Bethesda + bethink + bethinking + Bethlehem + bethought + betide + betided + betiding + betimes + betoken + betony + betook + betray + betrayal + betrayed + betrayer + betraying + betrays + betroth + betrothal + betrothed + bets + Betsey + Betsy + Bette + better + bettered + bettering + betterment + betterments + betters + betting + bettor + Betty + between + betwixt + bevel + beveled + beveling + bevels + beverage + beverages + Beverly + bevies + bevy + bewail + bewailed + bewailer + bewailing + bewails + beware + bewared + bewaring + bewhisker + bewhiskered + bewilder + bewildered + bewildering + bewilderingly + bewilderment + bewilders + bewitch + bewitched + bewitchery + bewitches + bewitching + bewitchment + bey + beyond + bezel + bhang + bhoy + Bhutan + Bialystok + bianco + biangular + biannual + biannually + bias + biased + biases + biasing + biassed + biaxial + bib + bibb + bibbed + bibbing + Bible + bible + bibles + biblical + biblically + bibliographer + bibliographic + bibliographical + bibliographies + bibliography + bibliophile + bibs + bibulous + bicameral + bicarbonate + bicentenarnaries + bicentenary + bicentennial + bicep + biceps + bichloride + bichromate + bicker + bickered + bickerer + bickering + bickers + bicolor + bicolored + biconcave + biconnected + biconvex + bicuspid + bicycle + bicycled + bicycler + bicyclers + bicycles + bicycling + bicyclist + bid + biddable + bidden + bidder + bidders + biddies + bidding + biddy + bide + bided + bidet + bidiagonal + biding + bidirectional + bidirectionally + bids + bien + biennial + biennially + biennium + bier + bifocal + bifocals + bifurcate + bifurcated + bifurcating + bifurcation + big + bigamies + bigamist + bigamous + bigamy + Bigelow + bigger + biggest + Biggs + bighearted + bighorn + bight + bights + bigness + bigot + bigoted + bigotries + bigotry + bigots + biharmonic + bijection + bijections + bijective + bijectively + bijou + bijouterie + bijoux + bike + biked + bikes + biking + bikini + bikinis + bilabial + bilateral + bilateralism + bilaterally + bilayer + bilberries + bilberry + bile + bilge + bilges + bilharziasis + biliary + bilinear + bilingual + bilingualism + bilingually + bilious + biliousness + bilk + bilked + bilker + bilking + bilks + bill + billable + billboard + billboards + billed + biller + billers + billet + billeted + billeting + billets + billfold + billhead + billiard + billiards + Billie + billies + Billiken + billing + billings + billingsgate + billion + billions + billionth + billow + billowed + billowier + billowiest + billows + billowy + bills + billy + Biltmore + bimetallic + bimetallism + bimetallist + Bimini + bimodal + bimodality + bimolecular + bimonthlies + bimonthly + bin + binaries + binary + binaural + bind + binder + binderies + binders + bindery + binding + bindingly + bindings + bindle + binds + bindweed + bing + binge + binges + Bingham + Binghamton + bingle + bingo + Bini + binnacle + binned + binning + binocular + binoculars + binomial + bins + binuclear + bioassay + bioassays + biochemic + biochemical + biochemically + biochemist + biochemistry + biocontrol + biofeedback + biogeography + biographer + biographers + biographic + biographical + biographically + biographies + biography + biologic + biological + biologically + biologist + biologists + biology + biomathematics + biomedical + biomedicine + Biometrika + biometry + bionic + bionics + biophysical + biophysicist + biophysics + biopsies + biopsy + bioscience + biosciences + biosphere + biostatistic + biosynthesize + biota + biotic + biotin + biotite + bipartisan + bipartisanship + bipartite + bipartition + biped + bipedal + bipeds + biplane + biplanes + bipolar + biracial + birch + birchen + birches + bird + birdbath + birdbaths + birdie + birdied + birdies + birdlike + birdlime + birds + birdsall + birdseed + birdwatch + birefringence + birefringent + biretta + Birgit + Birmingham + birth + birthday + birthdays + birthed + birthmark + birthplace + birthplaces + birthrate + birthright + birthrights + births + birthstone + biscuit + biscuits + bisect + bisected + bisecting + bisection + bisectional + bisections + bisector + bisectors + bisects + biserial + bisexual + bishop + bishopric + bishops + Bismarck + Bismark + bismuth + bison + bisons + bisque + bisques + Bissau + bistable + bistate + bistro + bistros + bisync + bit + bitch + bitches + bitchier + bitchiest + bitchiness + bitchy + bite + bited + biter + biters + bites + biting + bitingly + bitmap + bitmapped + bitnet + bits + bitt + bitted + bitten + bitter + bitterer + bitterest + bitterly + bittern + bitterness + bitternut + bitterroot + bitters + bittersweet + bitting + bitumen + bituminous + bitwise + bivalent + bivalve + bivalved + bivalves + bivariate + bivouac + bivouaced + bivouacked + bivouacking + bivouacs + biweeklies + biweekly + biz + bizarre + bizarrely + bizarreness + Bizet + blab + blabbed + blabbermouth + blabbermouths + blabbing + blabs + black + blackball + blackberries + blackberry + blackbird + blackbirds + blackboard + blackboards + blackbody + Blackburn + blacked + blacken + blackened + blackener + blackening + blackens + blacker + blackest + Blackfeet + blackguard + blackguardly + blackhead + blackhearted + blacking + blackish + blackjack + blackjacks + blacklist + blacklisted + blacklisting + blacklists + blackly + blackmail + blackmailed + blackmailer + blackmailers + blackmailing + blackmails + Blackman + blackness + blackout + blackouts + blacks + blacksmith + blacksmiths + blacksnake + Blackstone + blackthorn + blacktop + blacktopped + blacktopping + Blackwell + bladder + bladdernut + bladders + bladderwort + blade + bladed + blades + Blaine + Blair + Blake + blamable + blame + blameable + blamed + blameless + blamelessly + blamelessness + blamer + blamers + blames + blameworthiness + blameworthy + blaming + blanc + blanch + Blanchard + Blanche + blanched + blanches + blanching + blancmange + bland + blandish + blandishment + blandly + blandness + blank + blanked + blanker + blankest + blanket + blanketed + blanketer + blanketers + blanketing + blankets + blanking + blankly + blankness + blanks + blare + blared + blares + blarina + blaring + blarney + blarneyed + blarneying + blase + blaspheme + blasphemed + blasphemer + blasphemes + blasphemies + blaspheming + blasphemous + blasphemously + blasphemousness + blasphemy + blast + blasted + blaster + blasters + blasting + blastoff + blasts + blastula + blat + blatancies + blatancy + blatant + blatantly + blather + blatherer + Blatz + blaze + blazed + blazer + blazers + blazes + blazing + blazingly + blazon + blazonry + bleach + bleached + bleacher + bleachers + bleaches + bleaching + bleak + bleaker + bleakly + bleakness + blear + bleary + bleat + bleating + bleats + bled + bleed + bleeder + bleeding + bleedings + bleeds + Bleeker + bleep + blemish + blemishes + blench + blend + blended + blender + blending + blends + Blenheim + blennies + blenny + blent + bless + blessed + blessedness + blesses + blessing + blessings + blest + blew + blight + blighted + blimp + blimps + blind + blinded + blinder + blinders + blindfold + blindfolded + blindfolding + blindfolds + blinding + blindingly + blindly + blindness + blinds + blink + blinked + blinker + blinkers + blinking + blinks + Blinn + blintz + blip + blips + bliss + blissful + blissfully + blissfulness + blister + blistered + blistering + blisters + blit + blithe + blithely + blitheness + blithering + blithesome + blitz + blitzes + blitzkrieg + blizzard + blizzards + blk + blksize + bloat + bloated + bloater + bloating + bloats + blob + blobs + bloc + Bloch + block + blockade + blockaded + blockader + blockades + blockading + blockage + blockages + blockbuster + blockbusting + blocked + blocker + blockers + blockhead + blockhouse + blockhouses + blocking + blocks + blocky + blocs + bloke + blokes + Blomberg + Blomquist + blond + blonde + blondes + blonds + blood + bloodbath + bloodcurdling + blooded + bloodhound + bloodhounds + bloodied + bloodier + bloodiest + bloodily + bloodiness + bloodless + bloodlessly + bloodletting + bloodline + bloodmobile + bloodroot + bloods + bloodshed + bloodshot + bloodstain + bloodstained + bloodstains + bloodstone + bloodstream + bloodsucker + bloodsucking + bloodthirsty + bloody + bloodying + bloom + bloomed + bloomers + Bloomfield + blooming + Bloomington + blooms + bloop + blooper + blossom + blossomed + blossoms + blot + blotch + blotchier + blotchiest + blotchy + blots + blotted + blotter + blotting + blouse + bloused + blouses + blousing + blow + blower + blowers + blowfish + blowflies + blowfly + blowgun + blowhole + blowier + blowiest + blowing + blown + blowout + blowpipe + blows + blowsy + blowtorch + blowup + blowy + blowzier + blowziest + blowzy + blubber + blubberer + blubbery + blucher + bludgeon + bludgeoned + bludgeoning + bludgeons + blue + blueback + bluebell + blueberries + blueberry + bluebill + bluebird + bluebirds + blueblood + bluebonnet + bluebonnets + bluebook + bluebottle + bluebush + blued + bluefish + bluegill + bluegrass + blueing + blueish + bluejacket + bluejay + blueness + bluenose + bluepoint + blueprint + blueprints + bluer + blues + bluest + bluestocking + bluet + bluff + bluffer + bluffing + bluffly + bluffness + bluffs + bluing + bluish + Blum + Blumenthal + blunder + blunderbuss + blundered + blunderer + blundering + blunderings + blunders + blunt + blunted + blunter + bluntest + blunting + bluntly + bluntness + blunts + blur + blurb + blurred + blurriness + blurring + blurry + blurs + blurt + blurted + blurting + blurts + blush + blushed + blusher + blushes + blushful + blushing + blushingly + bluster + blustered + blusterer + blustering + blusteringly + blusterous + blusters + blustery + blutwurst + Blvd + Blythe + BMW + bnf + boa + boar + board + boarded + boarder + boarders + boarding + boardinghouse + boardinghouses + boards + boardwalk + boast + boasted + boaster + boasters + boastful + boastfully + boastfulness + boasting + boastingly + boastings + boasts + boat + boater + boaters + boathouse + boathouses + boating + boatload + boatloads + boatman + boatmen + boats + boatsman + boatsmen + boatswain + boatswains + boatyard + boatyards + bob + bobbed + Bobbie + bobbies + bobbin + bobbing + bobbins + bobble + bobbled + bobbling + bobby + bobcat + bobolink + bobolinks + bobs + bobsled + bobsledded + bobsledding + bobtail + bobwhite + bobwhites + Boca + bock + bode + boded + bodes + bodhisattva + bodice + bodied + bodies + bodiless + bodily + boding + bodkin + Bodleian + body + bodybuilder + bodybuilders + bodybuilding + bodyguard + bodyguards + bodying + bodyweight + boe + Boeing + Boeotia + boer + boettner + bog + bogey + bogeyman + bogeymen + bogeys + bogged + boggier + boggiest + bogging + boggle + boggled + boggles + boggling + boggy + bogie + bogies + Bogota + bogs + bogus + bogy + bogyman + Bohemia + Bohr + boil + boiled + boiler + boilerplate + boilers + boiling + boils + Bois + Boise + boisterous + boisterously + boisterousness + bold + bolder + boldest + boldface + boldfaced + boldly + boldness + bole + bolero + boleros + boletus + bolivar + Bolivia + bolivia + boll + bolo + Bologna + bologna + bolometer + bolos + Bolshevik + bolshevik + bolsheviks + Bolshevism + bolshevism + Bolshevist + Bolshoi + bolster + bolstered + bolstering + bolsters + bolt + bolted + bolter + bolting + Bolton + bolts + Boltzmann + bolus + boluses + bomb + bombard + bombarde + bombarded + bombardier + bombarding + bombardment + bombards + bombast + bombastic + bombastically + Bombay + bombay + bombed + bomber + bombers + bombing + bombings + bombproof + bombs + bombshell + bombsight + bon + bona + bonanza + bonanzas + Bonaparte + Bonaventure + bonbon + bond + bondage + bonded + bonder + bonders + bonding + bondman + bondmen + bonds + bondsman + bondsmen + bondwoman + bondwomen + bone + boned + bonedry + boneless + bonelike + boner + boners + bones + bonfire + bonfires + bong + bongo + bongos + bonier + boniest + Boniface + boniness + boning + bonito + bonitoes + bonitos + bonjour + Bonn + bonn + bonnet + bonneted + bonnets + Bonneville + Bonnie + bonnier + bonniest + bonny + bonsai + bonus + bonuses + bony + bonze + boo + boob + boobies + booboo + booboos + booby + boodle + booed + boogie + booing + book + bookable + bookbind + bookbinder + bookbinderies + bookbindery + bookbinding + bookcase + bookcases + booked + bookend + booker + bookers + bookie + bookies + booking + bookings + bookish + bookkeep + bookkeeper + bookkeepers + bookkeeping + bookkeeps + booklet + booklets + bookmaker + bookmark + bookmobile + bookplate + books + bookseller + booksellers + bookshelf + bookshelves + bookstore + bookstores + bookworm + booky + boolean + booleans + boom + boomed + boomerang + boomerangs + booming + booms + boomtown + boomtowns + boon + boondocks + boondoggle + boondoggled + boondoggler + boondoggling + Boone + boor + boorish + boorishly + boorishness + boors + boos + boost + boosted + booster + boosting + boosts + boot + bootable + bootblack + booted + bootee + Bootes + booth + boothes + booths + bootie + booties + booting + bootleg + bootleger + bootlegged + bootlegger + bootleggers + bootlegging + bootlegs + bootless + bootlessly + bootlessness + bootlick + bootlicker + boots + bootstrap + bootstrapped + bootstrapping + bootstraps + booty + booze + boozed + boozier + booziest + boozing + boozy + bop + bopped + boracic + borate + borated + borates + borating + borax + Bordeaux + bordello + bordellos + Borden + border + bordered + bordering + borderings + borderland + borderlands + borderline + borders + bore + boreal + Borealis + Boreas + bored + boredom + borer + bores + Borg + boric + boring + borings + Boris + born + borne + Borneo + borneo + boron + borosilicate + borough + boroughs + Borroughs + borrow + borrowed + borrower + borrowers + borrowing + borrows + borsch + borsht + bort + borzoi + Bosch + Bose + bosh + bosky + bosom + bosoms + bosomy + boson + bosonic + boss + bossed + bosses + bossier + bossiest + bossily + bossiness + bossism + bossy + Boston + boston + bostonian + bostonians + bosun + Boswell + botanic + botanical + botanist + botanists + botany + botch + botched + botcher + botchers + botches + botching + botchy + botfly + both + bother + bothered + bothering + bothers + bothersome + Botswana + botswana + bottle + bottled + bottleneck + bottlenecks + bottler + bottlers + bottles + bottling + bottom + bottomed + bottoming + bottomless + bottommost + bottoms + botulin + botulinus + botulism + Boucher + boucle + boudoir + bouffant + bougainvillaea + bougainvillea + bough + boughs + bought + bouillon + boulder + boulders + boulevard + boulevards + bounce + bounced + bouncer + bounces + bouncing + bouncy + bound + boundaries + boundary + bounded + bounden + bounder + bounding + boundless + boundlessness + bounds + bounteous + bounteously + bounties + bountiful + bounty + bouquet + bouquets + Bourbaki + bourbon + bourgeois + bourgeoisie + bourn + bourne + boustrophedon + boustrophedonic + bout + boutique + boutonniere + bouts + bouvardia + bovine + bovines + bow + Bowditch + bowdlerism + bowdlerization + bowdlerize + bowdlerized + bowdlerizes + bowdlerizing + Bowdoin + bowed + bowel + bowels + Bowen + bower + bowers + bowfin + bowie + bowing + bowknot + bowl + bowlder + bowled + bowleg + bowlegged + bowler + bowlers + bowles + bowline + bowlines + bowling + bowls + bowman + bowmen + bows + bowshot + bowsprit + bowstring + bowstrings + box + boxcar + boxcars + boxed + boxer + boxers + boxes + boxier + boxiest + boxing + boxtop + boxtops + boxwood + boxy + boy + boyar + Boyce + boycott + boycotted + boycotts + Boyd + boyfriend + boyfriends + boyhood + boyish + boyishly + boyishness + Boyle + Boylston + boys + boysenberries + boysenberry + BP + bpi + bra + brace + braced + bracelet + bracelets + bracer + braces + brachia + brachiopod + brachium + bracing + bracken + bracket + bracketed + bracketing + brackets + bracketted + brackish + bract + bracteal + brad + Bradbury + bradded + bradding + Bradford + Bradley + Bradshaw + Brady + brae + braes + brag + Bragg + braggadocio + braggadocios + braggart + bragged + bragger + bragging + brags + Brahmaputra + Brahms + Brahmsian + braid + braided + braiding + braids + Braille + braille + brain + Brainard + braincase + brainchild + brained + brainier + brainiest + braininess + braining + brainless + brainpan + brains + brainstem + brainstems + brainstorm + brainstorms + brainwash + brainwashed + brainwashes + brainwashing + brainy + braise + braised + braising + brake + braked + brakeman + brakemen + brakes + braking + bramble + brambles + brambly + bran + branch + branched + branches + branching + branchings + brand + branded + Brandeis + Brandenburg + brandied + brandies + branding + brandish + brandishes + brandishing + Brandon + brands + Brandt + brandy + brandying + brandywine + Braniff + brant + bras + brash + brashly + brashness + Brasilia + brass + brasses + brassier + brassiere + brassiest + brassily + brassiness + brassy + brat + brats + bratwurst + Braun + bravado + brave + braved + bravely + braveness + braver + bravery + braves + bravest + braving + bravo + bravos + bravura + brawl + brawler + brawling + brawn + brawnier + brawniest + brawniness + brawny + bray + brayed + brayer + braying + brays + braze + brazed + brazen + brazenly + brazenness + brazes + brazier + braziers + Brazil + brazil + Brazilian + brazilian + brazing + Brazzaville + breach + breached + breacher + breachers + breaches + breaching + bread + breadbasket + breadboard + breadboards + breadbox + breadboxes + breaded + breadfruit + breading + breadroot + breads + breadstuff + breadth + breadwinner + breadwinners + break + breakable + breakables + breakage + breakaway + breakdown + breakdowns + breaker + breakers + breakfast + breakfasted + breakfaster + breakfasters + breakfasting + breakfasts + breakfront + breaking + breaklist + breakneck + breakoff + breakpoint + breakpoints + breaks + breakthrough + breakthroughes + breakthroughs + breakup + breakwater + breakwaters + bream + breams + breast + breastbone + breasted + breastplate + breasts + breastwork + breastworks + breath + breathable + breathe + breathed + breather + breathers + breathes + breathier + breathiest + breathily + breathing + breathless + breathlessly + breaths + breathtaking + breathtakingly + breathy + breccia + bred + breech + breechcloth + breeches + breed + breeder + breeders + breeding + breedings + breeds + breeze + breezed + breezes + breezeway + breezier + breeziest + breezily + breeziness + breezing + breezy + Bremen + bremsstrahlung + Brenda + Brendan + Brennan + Brenner + Brent + Brest + brethren + Breton + Brett + breve + brevet + brevetcies + brevetcy + breveted + breveting + brevets + brevetted + brevetting + breviaries + breviary + brevicauda + brevicomis + brevity + brew + brewed + brewer + breweries + brewers + brewery + brewing + brews + Brewster + Brian + briar + briarroot + briars + briarwood + briary + bribable + bribe + bribed + briber + bribers + bribery + bribes + bribing + Brice + brick + brickbat + bricked + bricker + bricklayer + bricklayers + bricklaying + bricks + bridal + bride + bridegroom + brides + bridesmaid + bridesmaids + bridge + bridgeable + bridged + bridgehead + bridgeheads + Bridgeport + bridges + Bridget + Bridgetown + Bridgewater + bridgework + bridging + bridle + bridled + bridles + bridling + brief + briefcase + briefcases + briefed + briefer + briefest + briefing + briefings + briefly + briefness + briefs + brier + brierroot + brierwood + briery + brig + brigade + brigaded + brigades + brigadier + brigadiers + brigading + brigand + brigandage + brigantine + Briggs + Brigham + bright + brighten + brightened + brightener + brighteners + brightening + brightens + brighter + brightest + brightly + brightness + Brighton + brigs + brilliance + brilliancy + brilliant + brilliantly + Brillouin + brim + brimful + brimmed + brimming + brimstone + Brindisi + brindle + brindled + brine + brined + bring + bringed + bringer + bringers + bringing + brings + brinier + briniest + brininess + brining + brink + brinkmanship + briny + brioche + briquet + briquette + Brisbane + brisk + brisker + brisket + briskly + briskness + bristle + bristled + bristles + bristlier + bristliest + bristliness + bristling + bristly + Bristol + brit + Britain + britain + Britannic + Britannica + britches + British + british + britisher + Briton + briton + britons + Brittany + Britten + brittle + brittleness + broach + broached + broaches + broaching + broad + broadax + broadaxe + broadband + broadcast + broadcasted + broadcaster + broadcasters + broadcasting + broadcastings + broadcasts + broadcloth + broaden + broadened + broadener + broadeners + broadening + broadenings + broadens + broader + broadest + broadloom + broadly + broadness + broadside + broadsword + Broadway + brocade + brocaded + brocading + broccoli + brochure + brochures + Brock + brockle + brogan + Broglie + brogue + broil + broiled + broiler + broilers + broiling + broils + broke + broken + brokenhearted + brokenly + brokenness + broker + brokerage + brokers + Bromfield + bromide + bromides + bromidic + bromine + Bromley + bronchi + bronchial + bronchiolar + bronchiole + bronchioles + bronchitic + bronchitis + broncho + bronchos + bronchoscope + bronchus + bronco + broncobuster + broncobusting + broncos + brontosauri + Brontosaurus + brontosaurus + brontosauruses + Bronx + bronze + bronzed + bronzes + bronzing + bronzy + brooch + brooches + brood + brooder + brooding + broods + broody + brook + Brooke + brooked + Brookhaven + brooklet + Brookline + Brooklyn + brooks + brookside + broom + broomcorn + brooms + broomstick + broomsticks + broth + brothel + brothels + brother + brotherhood + brotherliness + brotherly + brothers + brougham + brought + brouhaha + brow + browbeat + browbeaten + browbeating + browbeats + brown + Browne + browned + Brownell + browner + brownest + Brownian + brownie + brownies + browning + brownish + brownness + brownout + browns + brownstone + brows + browse + browsed + browser + browsing + Bruce + brucellosis + Bruckner + Bruegel + bruise + bruised + bruiser + bruises + bruising + bruisingly + bruit + Brumidi + brunch + brunches + brunet + brunette + Brunhilde + Bruno + Brunswick + brunt + brush + brushed + brushes + brushfire + brushfires + brushing + brushlike + brushoff + brushwood + brushwork + brushy + brusk + brusque + brusquely + brusqueness + Brussels + brussels + brutal + brutalities + brutality + brutalization + brutalize + brutalized + brutalizes + brutalizing + brutally + brute + brutes + brutish + brutishly + brutishness + Bryan + Bryant + Bryce + Bryn + bryophyta + bryophyte + bryozoa + bsf + BSTJ + BTL + bub + bubble + bubbled + bubbles + bubbling + bubbly + bubo + buboes + bubonic + buccal + buccaneer + Buchanan + Bucharest + bucharest + Buchenwald + Buchwald + buck + buckaroo + buckaroos + buckboard + buckboards + bucked + bucker + bucket + bucketful + bucketfull + bucketfuls + buckets + buckeye + buckhorn + bucking + buckland + buckle + buckled + buckler + buckles + Buckley + buckling + Bucknell + buckram + bucks + bucksaw + buckshot + buckskin + buckskins + buckthorn + bucktooth + bucktoothed + buckwheat + bucolic + bucolically + bud + Budapest + budapest + Budd + budded + Buddha + Buddhism + Buddhist + buddies + budding + buddy + budge + budged + budgerigar + budges + budget + budgetary + budgeted + budgeter + budgeters + budgeting + budgets + budgie + budging + buds + Budweiser + budworm + Buena + Buenos + buenos + buff + buffalo + buffaloed + buffaloes + buffaloing + buffalos + buffer + buffered + buffering + bufferrer + bufferrers + buffers + buffet + buffeted + buffeting + buffetings + buffets + bufflehead + buffoon + buffoonery + buffoons + buffs + bufo + bug + bugaboo + bugaboos + bugbear + bugeyed + bugged + bugger + buggers + buggier + buggies + buggiest + bugging + buggy + bughouse + bugle + bugled + bugler + bugles + bugling + bugs + Buick + build + builder + builders + building + buildings + builds + buildup + buildups + built + builtin + Bujumbura + bulb + bulbar + bulblet + bulbous + bulbs + Bulgaria + bulgaria + bulgarian + bulge + bulged + bulges + bulging + bulgy + bulk + bulked + bulkhead + bulkheads + bulkier + bulkiest + bulkily + bulkiness + bulks + bulky + bull + bulldog + bulldogged + bulldogging + bulldogs + bulldoze + bulldozed + bulldozer + bulldozes + bulldozing + bulled + bullet + bulletin + bulletins + bulletproof + bullets + bullfight + bullfighter + bullfinch + bullfrog + bullfrogs + bullhead + bullheaded + bullheadedness + bullhide + bullhorn + bullied + bullies + bulling + bullion + bullish + bullock + bullpen + bulls + bullseye + bullwhack + bullwhip + bully + bullyboy + bullying + bulrush + bulwark + bum + bumble + bumblebee + bumblebees + bumbled + bumbler + bumblers + bumbles + bumbling + bummed + bummer + bummest + bumming + bump + bumped + bumper + bumpers + bumpier + bumpiest + bumpily + bumpiness + bumping + bumpkin + bumps + bumptious + bumptiously + bumptiousness + bumpy + bums + bun + bunch + bunched + bunches + bunchiness + bunching + bunchy + bunco + buncoed + buncoing + buncombe + buncos + Bundestag + bundle + bundled + bundles + bundling + Bundoora + bundy + bung + bungalow + bungalows + bunghole + bungle + bungled + bungler + bunglers + bungles + bungling + bunion + bunions + bunk + bunker + bunkered + bunkers + bunkhouse + bunkhouses + bunkmate + bunkmates + bunko + bunks + bunkum + bunnell + bunnies + bunny + buns + Bunsen + bunt + bunted + bunter + bunters + bunting + bunts + Bunyan + buoy + buoyancy + buoyant + buoyantly + buoyed + buoys + bur + burbank + burbot + burbots + Burch + burden + burdened + burdening + burdens + burdensome + burdock + bureau + bureaucracies + bureaucracy + bureaucrat + bureaucratic + bureaucratization + bureaucratize + bureaucratized + bureaucratizing + bureaucrats + bureaus + bureaux + buret + burette + burg + burgeon + burgeoned + burgeoning + burgess + burgesses + burgh + burgher + burghers + burglar + burglaries + burglarize + burglarized + burglarizes + burglarizing + burglarproof + burglarproofed + burglarproofing + burglarproofs + burglars + burglary + burgle + burgled + burgling + burgomaster + Burgundian + Burgundy + burial + buried + buries + Burke + burkei + burl + burlap + burled + burlesque + burlesqued + burlesques + burlesquing + burley + burlier + burliest + burliness + Burlington + burly + Burma + Burmese + burn + burnable + burned + burner + burners + Burnett + Burnham + burning + burningly + burnings + burnish + burnished + burnisher + burnishes + burnishing + burnoose + burnout + burns + Burnside + burnsides + burnt + burntly + burntness + burp + burped + burping + burps + Burr + burr + burro + burros + Burroughs + burrow + burrowed + burrower + burrowing + burrows + burrs + bursa + bursae + bursar + bursas + bursitis + burst + burstiness + bursting + bursts + bursty + Burt + burthen + Burton + Burtt + Burundi + bury + burying + burys + bus + busboy + busboys + Busch + bused + buses + bush + bushed + bushel + bushels + bushes + bushier + bushiest + bushiness + bushing + bushland + bushman + bushmaster + bushmen + Bushnell + bushwhack + bushwhacked + bushwhacker + bushwhacking + bushwhacks + bushy + busied + busier + busiest + busily + business + businesses + businesslike + businessman + businessmen + businesswoman + businesswomen + busing + buskin + buss + bussed + busses + bussing + bust + bustard + bustards + busted + buster + bustle + bustled + bustling + busts + busy + busybodies + busybody + busying + busyness + but + butadiene + butane + butch + butcher + butchered + butcheries + butchers + butchery + butene + buteo + butler + butlers + butt + butte + butted + butter + butterball + buttercup + buttered + butterer + butterers + butterfat + Butterfield + butterfingers + butterflies + butterfly + butteries + buttering + buttermilk + butternut + butters + butterscotch + buttery + buttes + butting + buttock + buttocks + button + buttoned + buttonhole + buttonholed + buttonholes + buttonholing + buttoning + buttons + buttonweed + buttonwood + buttress + buttressed + buttresses + buttressing + Buttrick + butts + butyl + butyrate + butyric + buxom + buxomness + Buxtehude + Buxton + buy + buyer + buyers + buying + buys + buzz + Buzzard + buzzard + buzzards + buzzed + buzzer + buzzes + buzzing + buzzword + buzzwords + buzzy + by + bye + bygone + bylaw + bylaws + byline + bylines + bypass + bypassed + bypasses + bypassing + bypath + byplay + byproduct + byproducts + Byrd + Byrne + byroad + Byron + Byronic + bystander + bystanders + byte + bytes + byway + byways + byword + bywords + Byzantine + Byzantium + c + c's + CA + cab + cabal + cabala + cabaletta + cabalism + cabalistic + caballero + caballeros + cabana + cabaret + cabbage + cabbages + cabbageworm + cabbala + cabbie + cabbies + cabby + cabdriver + caber + cabezon + cabin + cabinet + cabinetmake + cabinetmaker + cabinetmaking + cabinetry + cabinets + cabinetwork + cabins + cable + cabled + cablegram + cables + cablet + cabling + cabman + cabob + cabochon + cabomba + caboodle + caboose + Cabot + cabotage + cabretta + cabrilla + cabriole + cabriolet + cabs + cabstand + cacao + cacaos + cacciatore + cachalot + cachalote + cache + cached + cachepot + caches + cachet + cachexia + cachinate + caching + cachou + cachucha + cacique + cackle + cackled + cackler + cackles + cackling + CACM + cacodemon + cacodyl + cacoenthes + cacogenesis + cacography + cacomistle + cacophonies + cacophonist + cacophonous + cacophony + cacti + cactus + cactuses + cacuminal + cad + cadaster + cadastre + cadaver + cadaverine + cadaverous + caddice + caddie + caddied + caddies + caddis + caddish + caddishly + caddishness + caddy + caddying + cade + cadelle + cadence + cadenced + cadent + cadenza + cadet + cadetship + cadge + cadged + cadger + cadging + cadgy + cadi + Cadillac + cadmium + cadre + caducecei + caduceus + caducous + Cady + caeca + caecilian + caecum + caenogenesis + Caesar + caesium + caespitose + caesura + caesurae + caesuras + cafard + cafe + cafes + cafeteria + cafeterias + caffein + caffeine + caftan + cage + caged + cageling + cager + cagers + cages + cagey + cagier + cagiest + cagily + caginess + caging + cagy + cahier + Cahill + cahoot + cahoots + cai + caiman + caimans + Cain + Caine + caique + cairn + cairngorm + Cairo + cairo + caisson + caitiff + cajeput + cajole + cajoled + cajoler + cajolery + cajoles + cajoling + cajuput + cake + caked + cakes + cakewalk + caking + Cal + calabash + calaboose + caladium + Calais + calamanco + calamander + calamary + calamine + calamint + calamite + calamities + calamitous + calamitously + calamitousness + calamity + calamondin + calamus + calando + calash + calathus + calaverite + calcaneus + calcar + calcareous + calceiform + calceolaria + calceolate + calces + calcic + calcicole + calciferol + calciferous + calcific + calcification + calcified + calcifuge + calcify + calcifying + calcimine + calcimined + calcimining + calcine + calcined + calcining + calcite + calcium + calcomp + calcsinter + calcspar + calculable + calculate + calculated + calculates + calculating + calculation + calculational + calculations + calculative + calculator + calculators + calculi + calculous + calculus + calculuses + Calcutta + calcutta + Calder + caldera + calderium + caldron + Caldwell + Caleb + caleche + calefacient + calefaction + calefactory + calendar + calendars + calender + calendrical + calends + calendula + calenture + calescent + calf + calfskin + Calgary + Calhoun + caliber + calibers + calibrate + calibrated + calibrates + calibrating + calibration + calibrations + calibrator + calibre + calices + caliche + calicle + calico + calicoes + calicos + calif + California + california + californian + californicus + californium + caliginous + calipash + calipee + caliper + caliph + caliphate + caliphs + calisthenic + calisthenics + calk + calker + Calkins + call + calla + callable + Callaghan + Callahan + called + caller + callers + calligraph + calligrapher + calligraphic + calligraphy + calling + calliope + callisthenics + Callisto + callosities + callosity + callous + calloused + callously + callousness + callow + callowness + calls + callus + calluses + calm + calmed + calmer + calmest + calming + calmingly + calmly + calmness + calms + calomel + caloric + calorically + calorie + calories + calorific + calorimeter + calorimetric + calorimetry + calory + Calumet + calumniate + calumniated + calumniating + calumniation + calumniator + calumnies + calumny + Calvary + calve + calved + Calvert + calves + Calvin + calving + calyces + calypso + calyx + calyxes + cam + camaraderie + camber + cambium + Cambodia + Cambrian + cambric + Cambridge + cambridge + Camden + came + camel + camelback + camellia + camelopard + Camelot + camels + cameo + cameos + camera + cameraman + cameramen + cameras + Cameron + Cameroun + camilla + Camille + Camino + camisole + camomile + camouflage + camouflaged + camouflages + camouflaging + camp + campaign + campaigned + campaigner + campaigners + campaigning + campaigns + campanile + campaniles + campanili + Campbell + camped + camper + campers + campfire + campground + camphor + camphorate + camphorated + camphorating + camphoric + camping + campion + camps + campsite + campsites + campus + campuses + campusses + can + can't + Canaan + Canada + canada + Canadian + canadian + canadians + canaille + canal + canalize + canalized + canalizing + canalled + canalling + canals + canard + canards + canaries + canary + canasta + Canaveral + Canberra + cancan + cancel + canceled + canceler + canceling + cancellate + cancellation + cancellations + cancelled + canceller + cancelling + cancels + cancer + cancerous + cancers + candela + candelabra + candelabras + candelabrum + candelabrums + candid + candidacies + candidacy + candidate + candidates + Candide + candidly + candidness + candied + candies + candle + candled + candlelight + candlepower + candler + candles + candlestick + candlesticks + candlewick + candling + candor + candour + candy + candying + cane + canebrake + caned + caner + Canfield + canham + canine + caning + Canis + canister + canker + cankerous + cankerworm + canna + cannabis + canned + cannel + canner + canneries + canners + cannery + cannibal + cannibalism + cannibalistic + cannibalization + cannibalize + cannibalized + cannibalizes + cannibalizing + cannibals + cannier + canniest + cannily + canniness + canning + cannister + cannisters + cannon + cannonade + cannonaded + cannonading + cannonball + cannoneer + cannonries + cannonry + cannons + cannot + canny + canoe + canoed + canoeing + canoeist + canoes + Canoga + canon + canonic + canonical + canonicalization + canonicalize + canonicalized + canonicalizes + canonicalizing + canonically + canonicals + canonicity + canonization + canonize + canonized + canonizing + canons + canopied + canopies + canopy + canopying + canreply + cans + canst + cant + cantabile + Cantabrigian + cantaloup + cantaloupe + cantankerous + cantankerously + cantankerousness + cantata + canteen + canter + Canterbury + canterelle + canthal + canticle + cantilever + cantle + canto + canton + Cantonese + cantonment + cantons + cantor + cantors + cantos + canvas + canvasback + canvases + canvass + canvassed + canvasser + canvassers + canvasses + canvassing + canyon + canyons + cap + capabilities + capability + capable + capably + capacious + capaciously + capaciousness + capacitance + capacitances + capacitate + capacities + capacitive + capacitor + capacitors + capacity + caparison + cape + capella + caper + capers + capes + Capetown + capillaries + capillarity + capillary + Capistrano + capita + capital + capitalism + capitalist + capitalistic + capitalistically + capitalists + capitalization + capitalizations + capitalize + capitalized + capitalizer + capitalizers + capitalizes + capitalizing + capitally + capitals + capitol + Capitoline + capitols + capitulate + capitulated + capitulating + capitulation + capo + capon + capped + capping + caprice + capricious + capriciously + capriciousness + Capricorn + caps + capsicum + capsize + capsized + capsizing + capstan + capstone + capsular + capsule + capsules + capsulize + capsulized + capsulizing + captain + captaincies + captaincy + captained + captaining + captains + captainship + caption + captions + captious + captiously + captiousness + captivate + captivated + captivates + captivating + captivatingly + captivation + captivator + captive + captives + captivities + captivity + captor + captors + capture + captured + capturer + capturers + captures + capturing + Caputo + capybara + car + carabao + carabaos + carabineer + carabinier + Caracas + caracul + carafe + caramel + carapace + carat + caravan + caravans + caravansaries + caravansary + caravel + caraway + carbide + carbine + carbohydrate + carbolic + Carboloy + carbon + carbonaceous + carbonate + carbonated + carbonates + carbonating + carbonation + Carbondale + Carbone + carbonic + carboniferous + carbonium + carbonization + carbonize + carbonized + carbonizer + carbonizers + carbonizes + carbonizing + carbons + carbonyl + carborundum + carboxy + carboxylic + carboy + carbuncle + carbuncular + carburet + carbureted + carbureting + carburetion + carburetor + carburetors + carburetted + carburetting + carburettor + carcajou + carcase + carcass + carcasses + carcinogen + carcinogenic + carcinoma + carcinomas + carcinomata + card + cardamom + cardamon + cardboard + carder + cardiac + Cardiff + cardigan + cardinal + cardinalities + cardinality + cardinally + cardinals + carding + cardiod + cardiogram + cardiograph + cardiologist + cardiology + cardiovascular + cards + cardsharp + care + cared + careen + career + careerist + careers + carefree + careful + carefully + carefulness + careless + carelessly + carelessness + carene + cares + caress + caressed + caresser + caresses + caressing + caressingly + caret + caretaker + caretakers + careworn + Carey + carfare + Cargill + cargo + cargoes + cargos + carhop + Carib + Caribbean + caribou + caricature + caricatured + caricaturing + caricaturist + caries + carillon + caring + cariole + carious + caripeta + Carl + Carla + Carleton + Carlin + Carlisle + Carlo + carload + Carlson + Carlton + Carlyle + Carmela + Carmen + Carmichael + carminative + carmine + carnage + carnal + carnalities + carnality + carnally + carnation + carne + Carnegie + carnegie + carnelian + carney + carnival + carnivals + carnivore + carnivorous + carnivorously + carnivorousness + carob + carol + caroler + Carolina + carolina + carolinas + Caroline + Carolingian + Carolinian + carolled + caroller + carolling + carols + Carolyn + carom + carotid + carousal + carouse + caroused + carouser + carousing + carp + carpal + carpale + carpalia + Carpathia + carpel + carpenter + carpenters + carpentry + carper + carpet + carpetbag + carpetbagged + carpetbagger + carpetbagging + carpeted + carpeting + carpets + carpi + carping + carport + carps + carpus + Carr + carrageen + Carrara + carrel + carrell + carriage + carriages + Carrie + carried + carrier + carriers + carries + carrion + Carroll + carrot + carrots + carroty + carrousel + Carruthers + carry + carryall + carryed + carrying + carryover + carryovers + carrys + cars + carsick + carsickness + Carson + cart + cartage + carte + carted + cartel + carter + carters + Cartesian + cartesian + Carthage + cartilage + cartilaginous + carting + cartographer + cartographic + cartography + carton + cartons + cartoon + cartoonist + cartoons + cartridge + cartridges + carts + cartwheel + Caruso + carve + carved + carvel + carven + carver + carves + carving + carvings + carwash + caryatid + caryatides + caryatids + casaba + Casanova + casbah + cascadable + cascade + cascaded + cascades + cascading + cascara + case + casebook + caseconv + cased + casefied + casefy + casefying + caseharden + casein + caseload + casemate + casemated + casement + casements + caseous + cases + casework + caseworker + Casey + cash + cashbook + cashed + casher + cashers + cashes + cashew + cashier + cashiers + cashing + cashmere + casing + casings + casino + casinos + cask + casket + caskets + casks + Cassandra + cassava + casserole + casseroles + cassette + cassia + cassimere + cassino + Cassiopeia + Cassius + cassock + cassowaries + cassowary + cast + castanet + castanets + castaway + caste + casted + castellated + castellation + caster + casters + castes + casteth + castigate + castigated + castigating + castigation + castigator + Castillo + casting + castle + castled + castles + castling + castoff + castor + castrate + castrated + castrating + castration + Castro + casts + casual + casually + casualness + casuals + casualties + casualty + casuist + casuistic + casuistical + casuistries + casuistry + cat + catabolic + catabolism + cataclysm + cataclysmal + cataclysmic + catacomb + catafalque + catalepsy + cataleptic + Catalina + catalog + cataloged + cataloger + cataloging + catalogs + catalogue + catalogued + cataloguer + catalogues + cataloguing + catalpa + catalyses + catalysis + catalyst + catalysts + catalytic + catalytically + catalyze + catalyzed + catalyzer + catalyzing + catamaran + catamount + catapult + cataract + catarrh + catarrhal + catastrophe + catastrophes + catastrophic + catatonia + catatonic + catawba + catbird + catboat + catcall + catch + catchable + catchall + catched + catcher + catchers + catches + catchier + catchiest + catching + catchpennies + catchpenny + catchup + catchword + catchy + catechise + catechism + catechist + catechistic + catechistical + catechization + catechize + catechized + catechizer + catechizing + categoric + categorical + categorically + categories + categorization + categorize + categorized + categorizer + categorizers + categorizes + categorizing + category + catenate + catenating + catenation + cater + catered + caterer + caterers + catering + caterpillar + caterpillars + caters + caterwaul + catesbeiana + catfish + catgut + catharsis + cathartic + cathead + cathedra + cathedral + cathedrals + Catherine + Catherwood + catheter + catheterize + catheterized + catheterizing + catheters + cathode + cathodes + cathodic + catholic + catholically + catholicity + catholics + Cathy + cation + cationic + catkin + catlike + catnap + catnapped + catnapping + catnip + cats + Catskill + catsup + cattail + catted + cattier + cattiest + cattily + cattiness + catting + cattish + cattishness + cattle + cattleman + cattlemen + catty + catwalk + Caucasian + Caucasus + Cauchy + caucus + caudal + caudate + caudated + caught + caul + cauldron + cauldrons + cauliflower + caulk + caulker + causal + causality + causally + causate + causation + causations + causative + causatively + cause + caused + causeless + causer + causes + causeway + causeways + causing + caustic + caustically + causticity + causticly + caustics + cauteries + cauterization + cauterize + cauterized + cauterizing + cautery + caution + cautionary + cautioned + cautioner + cautioners + cautioning + cautionings + cautions + cautious + cautiously + cautiousness + cavalcade + cavalier + cavalierly + cavalierness + cavalries + cavalry + cavalryman + cavalrymen + cave + caveat + caveats + caved + caveman + cavemen + Cavendish + cavern + cavernous + caverns + caves + caviar + caviare + cavies + cavil + caviler + caviller + cavilling + Caviness + caving + cavities + cavity + cavort + cavy + caw + cawing + cay + cayenne + Cayley + cayman + caymans + Cayuga + cayuse + CBS + ccid + ccitt + ccw + ccws + CDC + cdf + cdr + cease + ceased + ceaseless + ceaselessly + ceaselessness + ceases + ceasing + ceca + Cecil + Cecilia + Cecropia + cecum + cedar + cedarbird + cede + ceded + cedilla + ceding + Cedric + ceil + ceiling + ceilings + celandine + Celanese + Celebes + celebrant + celebrate + celebrated + celebrates + celebrating + celebration + celebrations + celebrities + celebrity + celerity + celery + celesta + celestial + celestially + Celia + celibacy + celibate + cell + cellar + cellarage + cellaret + cellars + celled + celli + cellist + cellists + cello + cellophane + cellos + cells + cellular + celluloid + cellulose + Celsius + Celtic + cement + cemented + cementer + cementing + cementlike + cements + cementum + cemetaries + cemetary + cemeteries + cemetery + cenobite + cenotaph + Cenozoic + censer + censor + censored + censorial + censoring + censorious + censoriously + censors + censorship + censurable + censure + censured + censurer + censures + censuring + census + censuses + censusing + cent + centaur + centavo + centavos + centenarian + centenaries + centenary + centennial + centennially + center + centerboard + centered + centering + centerline + centerpiece + centerpieces + centers + centesimal + centigrade + centigram + centigramme + centiliter + centilitre + centime + centimeter + centimeters + centimetre + centimetres + centipede + centipedes + central + centralism + centralist + centralistic + centrality + centralization + centralize + centralized + centralizer + centralizes + centralizing + centrally + centre + centred + centres + centrex + centric + centrical + centrically + centrifugal + centrifugally + centrifugate + centrifugation + centrifuge + centrifuged + centring + centripetal + centripetally + centrist + centroid + cents + centum + centuries + centurion + century + cephalic + cephalopod + Cepheus + ceramic + ceramicist + ceramist + ceramium + ceratocystis + Cerberus + cereal + cereals + cerebella + cerebellum + cerebellums + cerebra + cerebral + cerebrally + cerebrate + cerebrated + cerebrating + cerebration + cerebrospinal + cerebrum + cerebrums + cerement + ceremonial + ceremonialism + ceremonially + ceremonialness + ceremonies + ceremonious + ceremoniously + ceremoniousness + ceremony + Ceres + cereus + cerise + cerium + CERN + certain + certainly + certainties + certainty + certifiable + certificate + certificated + certificates + certificating + certification + certifications + certified + certifier + certifiers + certifies + certify + certifying + certiorari + certitude + cerulean + cerumen + Cervantes + cervical + cervices + cervix + cervixes + Cesare + cesium + cessation + cessations + cession + Cessna + cesspit + cesspits + cesspool + cetacean + cetera + Cetus + Ceylon + Cezanne + cf + Chablis + Chad + Chadwick + chaetognath + chafe + chafed + chafer + chafes + chaff + chaffer + chaffier + chaffiest + chaffinch + chaffing + chaffy + chafing + chagrin + chagrined + chagrining + chain + chained + chaining + chains + chair + chaired + chairing + chairlady + chairlift + chairman + chairmanship + chairmen + chairperson + chairpersons + chairs + chairwoman + chairwomen + chaise + chalcedonies + chalcedony + chalcocite + chalet + chalice + chalices + chalk + chalked + chalkier + chalkiest + chalkiness + chalking + chalklike + chalkline + chalks + chalky + challengable + challenge + challenged + challenger + challengers + challenges + challenging + challie + challis + Chalmers + chamber + chambered + chamberlain + chamberlains + chambermaid + chambers + chambray + chameleon + chamfer + chammies + chammy + chamois + chamomile + champ + champagne + Champaign + champaign + champion + championed + championing + champions + championship + championships + Champlain + chance + chanced + chancel + chancelleries + chancellery + chancellor + chancellors + chancellorship + chanceries + chancery + chances + chancier + chanciest + chancing + chancre + chancrous + chancy + chandelier + chandeliers + chandler + chandleries + chandlery + Chang + change + changeability + changeable + changeableness + changeably + changed + changeless + changeling + changeover + changeovers + changer + changers + changes + changing + channel + channeled + channeling + channelled + channeller + channellers + channelling + channels + chanson + chant + chanted + chanter + chanteuse + chantey + chanteys + chanticleer + chanticleers + chanties + Chantilly + chanting + chantry + chants + chanty + Chao + chaos + chaotic + chaotically + chap + chaparral + chapeau + chapeaus + chapeaux + chapel + chapels + chaperon + chaperone + chaperoned + chaperoning + chaplain + chaplaincies + chaplaincy + chaplains + chaplainship + chaplet + Chaplin + Chapman + chapped + chaps + chapter + chapters + char + character + characteristic + characteristically + characteristics + characterizable + characterization + characterizations + characterize + characterized + characterizer + characterizers + characterizes + characterizing + characters + characterstring + charade + chararas + charcoal + charcoaled + chard + chare + chared + charge + chargeable + charged + charger + chargers + charges + charging + charier + chariest + charily + chariness + charing + chariot + charioteer + chariots + charisma + charismata + charismatic + charitable + charitableness + charitably + charities + charity + charivari + charlatan + charlatanism + charlatanry + Charlemagne + Charles + Charleston + charleston + charlesworth + Charley + Charlie + Charlotte + Charlottesville + charm + charmed + charmer + charmers + charming + charmingly + charms + Charon + charred + chars + chart + Charta + chartable + charted + charter + chartered + chartering + charters + charting + chartings + chartist + Chartres + chartreuse + chartroom + charts + charwoman + chary + Charybdis + chase + chased + chaser + chasers + chases + chasing + chasm + chasmal + chasmic + chasms + chassis + chaste + chastely + chasten + chasteness + chastise + chastised + chastisement + chastiser + chastisers + chastises + chastising + chastity + chasuble + chat + chateau + chateaus + chateaux + chatelaine + Chatham + chats + Chattanooga + chatted + chattel + chatter + chatterbox + chattered + chatterer + chattererz + chattering + chatters + chattier + chattiest + chattily + chatting + chatty + Chaucer + chauffeur + chauffeured + chauffeurs + Chauncey + Chautauqua + chauvinism + chauvinist + chauvinistic + chaw + cheap + cheapen + cheapened + cheapening + cheapens + cheaper + cheapest + cheaply + cheapness + cheapskate + cheat + cheated + cheater + cheaters + cheating + cheats + check + checkable + checkbit + checkbits + checkbook + checkbooks + checked + checker + checkerberry + checkerboard + checkerboarded + checkerboarding + checkered + checkers + checking + checklist + checkmate + checkmated + checkmating + checkoff + checkout + checkpoint + checkpointed + checkpointing + checkpoints + checkrein + checkroom + checks + checksum + checksummed + checksumming + checksums + checkup + cheddar + cheek + cheekbone + cheekier + cheekiest + cheekily + cheekiness + cheeks + cheeky + cheep + cheer + cheered + cheerer + cheerful + cheerfully + cheerfulness + cheerier + cheeriest + cheerily + cheeriness + cheering + cheerio + cheerios + cheerleader + cheerless + cheerlessly + cheerlessness + cheers + cheery + cheese + cheeseburger + cheesecake + cheesecloth + cheeses + cheesier + cheesiest + cheesiness + cheesy + cheetah + chef + chefs + chela + chelae + chelate + chemic + chemical + chemically + chemicals + chemise + chemisorb + chemisorption + chemist + chemistries + chemistry + chemists + chemotherapy + chemurgic + chemurgy + Chen + Cheney + chenille + cheque + chequer + cheques + cherish + cherished + cherishes + cherishing + Cherokee + cheroot + cherries + cherry + chert + cherub + cherubic + cherubim + cherubs + chervil + Cheryl + Chesapeake + Cheshire + chess + chest + Chester + chester + chesterfield + Chesterton + chestier + chestiest + chestnut + chestnuts + chests + chesty + chevalier + cheviot + Chevrolet + chevron + chevy + chew + chewed + chewer + chewers + chewier + chewiest + chewing + chewink + chews + chewy + Cheyenne + chi + Chiang + chianti + chiaroscuro + chiaroscuros + chic + Chicago + chicago + Chicagoan + chicaneries + chicanery + Chicano + chichi + chick + chickadee + chickadees + chicken + chickens + chickpea + chicks + chickweed + chicle + chicories + chicory + chicquer + chicquest + chide + chided + chides + chiding + chidingly + chief + chiefdom + chiefly + chiefs + chieftain + chieftaincy + chieftains + chieftainship + chiffon + chiffonier + chiffonnier + chigger + chignon + chigoe + chigoes + chilblain + child + childbed + childbirth + childhood + childish + childishly + childishness + childless + childlike + childlikeness + children + Chile + chile + chili + chilies + chill + chilled + chiller + chillers + chillier + chilliest + chilliness + chilling + chillingly + chills + chilly + chime + chimed + chimer + chimera + chimeric + chimerical + chimes + chiming + Chimique + chimney + chimneys + chimp + chimpanzee + chin + china + Chinaman + Chinamen + Chinatown + chinaware + chinch + chinchilla + chine + Chinese + chinese + chink + chinked + chinks + chinned + chinner + chinners + chinning + chino + Chinook + chinquapin + chins + chintz + chintzier + chintziest + chintzy + chip + chipboard + chipmunk + chipmunks + chipped + Chippendale + chipper + chips + chirolas + chiropodist + chiropody + chiropractic + chiropractor + chirp + chirped + chirper + chirping + chirps + chirr + chirrup + chisel + chiseled + chiseler + chiseling + chiselled + chiseller + chiselling + chisels + Chisholm + chit + chitchat + chitin + chitinous + chitlings + chitlins + chiton + chits + chitterlings + chitty + chivalric + chivalrous + chivalrously + chivalrousness + chivalry + chive + chives + chkfil + chkfile + chloral + chlorate + chlordan + chlordane + chloric + chloride + chlorinate + chlorinated + chlorinating + chlorination + chlorinator + chlorine + chlorite + chloroform + chlorophyl + chlorophyll + chloroplast + chloroplasts + chloroplatinate + chlorous + chock + chocks + chocolate + chocolates + Choctaw + choice + choicely + choiceness + choicer + choices + choicest + choir + choirmaster + choirs + choke + chokeberry + chokecherries + chokecherry + choked + chokedamp + choker + chokers + chokes + choking + choler + cholera + choleric + cholesterol + cholinesterase + chomp + Chomsky + choose + chooser + choosers + chooses + choosey + choosier + choosiest + choosing + choosy + chop + Chopin + chopped + chopper + choppers + choppier + choppiest + choppiness + chopping + choppy + chops + chopstick + chopsticks + choral + chorale + chorally + chord + chordal + chordata + chordate + chorded + chording + chords + chore + chorea + choreograph + choreographer + choreographic + choreography + chores + chorine + choring + chorionic + chorister + choristoneura + chortle + chortled + chortler + chortling + chorus + chorused + choruses + chose + chosen + chosing + Chou + chow + chowder + Chris + chrism + Christ + christen + Christendom + christened + christening + christens + Christensen + Christenson + Christian + christian + Christiana + christians + Christianson + Christie + christies + Christina + Christine + Christmas + christmas + Christoffel + Christoph + Christopher + Christy + chromate + chromatic + chromatically + chromatin + chromatogram + chromatograph + chromatography + chrome + chromed + chromic + chroming + chromium + chromosomal + chromosome + chromosphere + chromous + chronic + chronically + chronicle + chronicled + chronicler + chroniclers + chronicles + chronicling + chronograph + chronography + chronologic + chronological + chronologically + chronologies + chronologist + chronology + chronometer + chrysalid + chrysalis + chrysalises + chrysanthemum + Chrysler + chrysolite + chrysoprase + chub + chubbier + chubbiest + chubbiness + chubby + chuck + chuckhole + chuckle + chuckled + chuckler + chuckles + chuckling + chucks + chuckwalla + chuff + chug + chugged + chugging + chukka + chukkar + chukker + chum + chummed + chummier + chummiest + chummily + chumminess + chummy + chump + Chungking + chunk + chunkier + chunkiest + chunkiness + chunks + chunky + church + churches + churchgoer + churchgoing + Churchill + Churchillian + churchliness + churchly + churchman + churchmen + churchwarden + churchwoman + churchwomen + churchyard + churchyards + churl + churlish + churlishness + churn + churned + churning + churns + chute + chutes + chutnee + chutney + chutneys + chyle + chylous + chyme + chymous + CIA + cicada + cicadae + cicadas + cicatrice + cicatrices + cicatrix + cicatrization + cicatrize + cicatrizing + Cicero + Ciceronian + cider + cif + cigar + cigaret + cigarette + cigarettes + cigarillo + cigarillos + cigars + cilia + ciliary + ciliate + ciliium + cinch + cinchona + cincinatti + Cincinnati + cincture + cinctured + cincturing + cinder + Cinderella + cinders + cindery + Cindy + cinema + cinematic + cinematically + Cinerama + cineraria + cinerarium + cinerary + cinnabar + cinnamon + cinquefoil + cipher + ciphers + ciphertext + ciphertexts + circa + Circe + circle + circled + circles + circlet + circling + circuit + circuitous + circuitously + circuitry + circuits + circuity + circulant + circular + circularity + circularization + circularize + circularized + circularizing + circularly + circulate + circulated + circulates + circulating + circulation + circulator + circulatory + circumambient + circumcircle + circumcise + circumcised + circumcising + circumcision + circumference + circumferential + circumflex + circumlocution + circumlocutions + circumnavigate + circumnavigated + circumnavigates + circumnavigating + circumnavigation + circumpolar + circumscribe + circumscribed + circumscribing + circumscription + circumspect + circumspection + circumspectly + circumsphere + circumstance + circumstanced + circumstances + circumstancing + circumstantial + circumstantially + circumstantiate + circumstantiated + circumstantiating + circumvent + circumventable + circumvented + circumventing + circumvention + circumvents + circus + circuses + cirrhosis + cirrhotic + cirri + cirrocumulus + cirrostratus + cirrus + cirterion + cistern + cisterns + cit + citadel + citadels + citation + citations + cite + cited + cites + cities + citified + citing + citizen + citizenry + citizens + citizenship + citrate + citric + citrine + Citroen + citron + citronella + citrous + citrus + city + cityscape + citywide + civet + civic + civically + civics + civies + civil + civilian + civilians + civilities + civility + civilization + civilizations + civilize + civilized + civilizes + civilizing + civilly + civvies + clabber + clack + clacker + clad + cladding + cladocerans + cladophora + claim + claimable + claimant + claimants + claimed + claimer + claiming + claims + Claire + clairvoyance + clairvoyant + clairvoyantly + clam + clambake + clamber + clambered + clambering + clambers + clammed + clammier + clammiest + clamminess + clammy + clamor + clamored + clamoring + clamorous + clamors + clamour + clamp + clamped + clamping + clamps + clams + clamshell + clan + clandestine + clandestinely + clang + clanged + clanging + clangor + clangorously + clangs + clank + clannish + clannishly + clannishness + clansman + clansmen + clanswoman + clanswomen + clap + clapboard + Clapeyron + clapped + clapper + clapping + claps + claptrap + claque + Clara + Clare + Claremont + Clarence + Clarendon + claret + clarification + clarifications + clarified + clarifies + clarify + clarifying + clarinet + clarinetist + clarinettist + clarion + clarity + Clark + Clarke + clash + clashed + clashes + clashing + clasp + clasped + clasper + clasping + clasps + class + classed + classes + classic + classical + classicality + classically + classicism + classicist + classics + classier + classiest + classifiable + classification + classifications + classificatory + classified + classifier + classifiers + classifies + classify + classifying + classless + classmate + classmates + classroom + classrooms + classy + clatter + clattered + clatterer + clattering + clattery + Claude + Claudia + Claudio + Claus + clause + Clausen + clauses + Clausius + claustrophobia + claustrophobic + clavichord + clavicle + clavier + claw + clawed + clawing + claws + clay + clayey + clayier + clayiest + clayish + claymore + clays + Clayton + clean + cleaned + cleaner + cleaners + cleanest + cleaning + cleanlier + cleanliest + cleanliness + cleanly + cleanness + cleans + cleanse + cleansed + cleanser + cleansers + cleanses + cleansing + cleanup + cleanups + clear + clearance + clearances + cleared + clearer + clearest + clearheaded + clearing + clearinghouse + clearings + clearly + clearness + clears + clearsighted + clearsightedness + Clearwater + cleat + cleavage + cleavages + cleave + cleaved + cleaver + cleavers + cleaves + cleaving + clef + cleft + clefts + clematis + clemencies + clemency + clement + clemently + clements + Clemson + clench + clenched + clencher + clenches + clerestories + clerestory + clergies + clergy + clergyman + clergymen + cleric + clerical + clericalism + clericalist + clerically + clerk + clerked + clerking + clerks + clethrionomys + Cleveland + cleveland + clever + cleverer + cleverest + cleverly + cleverness + clevis + clew + cli + cliche + cliches + click + clicked + clicker + clicking + clicks + client + clientele + clients + cliff + cliffhang + cliffhanger + Clifford + cliffs + Clifton + climacteric + climactic + climate + climates + climatic + climatically + climatological + climatologist + climatology + climax + climaxed + climaxes + climb + climbed + climber + climbers + climbing + climbs + clime + climes + clinch + clinched + clincher + clinches + cline + cling + clinging + clings + clingstone + clinic + clinical + clinically + clinician + clinicians + clinics + clink + clinked + clinker + clinometer + Clint + Clinton + Clio + clip + clipboard + clipped + clipper + clippers + clipping + clippings + clips + clique + cliques + cliquish + cliquishly + cliquishness + clitoris + Clive + cloaca + cloacae + cloacal + cloacas + cloak + cloaked + cloakroom + cloaks + clobber + clobbered + clobbering + clobbers + cloche + clock + clocked + clocker + clockers + clocking + clockings + clocks + clockwatcher + clockwise + clockwork + clod + cloddish + cloddishness + clodhopper + clods + clog + clogged + clogging + clogs + cloister + cloistered + cloisters + cloistral + clomp + clone + cloned + clones + clonic + cloning + close + closed + closefisted + closefitting + closehauled + closelipped + closely + closemouthed + closeness + closenesses + closer + closers + closes + closest + closet + closeted + closets + closeup + closeups + closing + closkey + closky + closure + closures + clot + cloth + clothbound + clothe + clothed + clothes + clothesbrush + clotheshorse + clothesline + clothesman + clothesmen + clothespin + clothespress + clothier + clothiers + clothing + Clotho + cloths + clotted + clotting + cloture + cloud + cloudburst + clouded + cloudier + cloudiest + cloudiness + clouding + cloudless + clouds + cloudy + clout + clove + cloven + clover + cloverleaf + cloverleaves + cloves + clown + clowning + clownish + clowns + cloy + cloyingly + club + clubbed + clubbing + clubfoot + clubfooted + clubhouse + clubroom + clubs + cluck + clucked + clucking + clucks + clue + clued + clues + cluing + Cluj + clump + clumped + clumping + clumps + clumsier + clumsiest + clumsily + clumsiness + clumsy + clung + clunk + clunker + clupeid + cluster + clustered + clustering + clusterings + clusters + clutch + clutched + clutches + clutching + clutter + cluttered + cluttering + clutters + Clyde + Clytemnestra + cmd + CO + coach + coached + coacher + coaches + coaching + coachman + coachmen + coachs + coachwork + coadaptations + coadapted + coadapting + coadjutor + coagulable + coagulant + coagulate + coagulated + coagulating + coagulation + coagulative + coagulator + coal + coaler + coalesce + coalesced + coalescence + coalescent + coalesces + coalescing + coalition + coals + coaming + coarse + coarsely + coarsen + coarsened + coarseness + coarser + coarsest + coast + coastal + coasted + coaster + coasters + coasting + coastline + coastlines + coasts + coat + coated + Coates + coathangers + coati + coating + coatings + coatis + coats + coattail + coauthor + coax + coaxal + coaxed + coaxer + coaxes + coaxial + coaxing + cob + cobalt + Cobb + cobble + cobbled + cobbler + cobblers + cobblestone + cobbling + Cobol + cobol + cobra + cobweb + cobwebs + coca + cocain + cocaine + cocci + coccidiosis + coccus + coccygeal + coccyges + coccyx + cochineal + cochlea + cochleleae + cochleleas + Cochran + Cochrane + cock + cockade + cockamamie + cockatoo + cockatoos + cockatrice + cockboat + cockcrow + cocked + cockerel + cockeye + cockeyed + cockfight + cockfighting + cockier + cockiest + cockily + cockiness + cocking + cockle + cocklebur + cockled + cockleshell + cockling + cockney + cockneys + cockpit + cockroach + cockroaches + cocks + cockscomb + cocksure + cockswain + cocktail + cocktails + cocky + coco + cocoa + cocoanut + coconut + coconuts + cocoon + cocoons + cocos + cod + coda + Coddington + coddle + coddled + coddling + code + codebreak + codebreaker + coded + codein + codeine + codeposit + coder + coders + codes + codetermine + codeword + codewords + codex + codfish + codger + codices + codicil + codification + codifications + codified + codifier + codifiers + codifies + codify + codifying + coding + codings + codling + codlings + codomain + codominant + codon + codpiece + Cody + coed + coeditor + coeducation + coeducational + coefficient + coefficients + coelenterate + coequal + coequality + coequally + coerce + coerceable + coerced + coercend + coercends + coerces + coercible + coercing + coercion + coercions + coercive + coeval + coevally + coevolution + coevolutionary + coevolve + coevolved + coexist + coexisted + coexistence + coexistent + coexisting + coexists + coextend + coextension + coextensive + cofactor + coffee + coffeecake + coffeecup + coffeehouse + coffeepot + coffees + coffer + coffers + Coffey + coffin + coffins + Coffman + cog + cogency + cogent + cogently + cogitate + cogitated + cogitates + cogitating + cogitation + cogitative + cogitator + cognac + cognate + cognition + cognitive + cognitively + cognitives + cognizable + cognizance + cognizant + cognomen + cogs + cogwheel + cohabit + cohabitate + cohabitation + cohabitations + coheir + coheiress + Cohen + cohere + cohered + coherence + coherency + coherent + coherently + coheres + cohering + cohesion + cohesions + cohesive + cohesively + cohesiveness + Cohn + coho + cohomology + cohort + cohorts + cohos + cohosh + coif + coifed + coiffed + coiffeur + coiffeuse + coiffing + coiffure + coiffured + coiffuring + coil + coiled + coiling + coils + coin + coinage + coincide + coincided + coincidence + coincidences + coincident + coincidental + coincidentally + coincidents + coincides + coinciding + coined + coiner + coining + coins + coital + coition + coitus + coke + coked + cokes + coking + col + cola + colander + colatitude + Colby + cold + coldblooded + colder + coldest + coldly + coldness + colds + Cole + Coleman + coleoptera + coleopterous + Coleridge + coleslaw + Colette + coleus + colewort + Colgate + colic + colicky + coliform + coliseum + colitis + collaborate + collaborated + collaborates + collaborating + collaboration + collaborationist + collaborations + collaborative + collaborator + collaborators + collage + collagen + collapsable + collapse + collapsed + collapses + collapsible + collapsing + collar + collarbone + collard + collared + collaring + collars + collate + collated + collateral + collaterally + collates + collating + collation + collator + colleague + colleagues + collect + collectable + collected + collectedly + collectedness + collectible + collecting + collection + collections + collective + collectively + collectives + collectivism + collectivist + collectivistic + collector + collectors + collects + colleen + college + colleges + collegial + collegiality + collegian + collegiate + collet + collide + collided + collides + colliding + collie + Collier + collier + collieries + colliers + colliery + collies + collimate + collimated + collimating + collimator + collimators + collinear + Collins + collision + collisions + collocate + collocated + collocating + collocation + collodion + colloid + colloidal + Colloq + colloquia + colloquial + colloquialism + colloquially + colloquies + colloquiquia + colloquiquiums + colloquium + colloquy + collude + collusion + collusive + Cologne + cologne + Colombia + Colombo + colon + colonel + colonelcies + colonelcy + colonels + colonial + colonialism + colonialist + colonially + colonials + colonic + colonies + colonist + colonists + colonization + colonize + colonized + colonizer + colonizers + colonizes + colonizing + colonnade + colons + colony + colophon + color + colorable + Colorado + colorado + colorant + colorate + coloration + coloratura + colorblind + colorblindness + colorcast + colorcasted + colorcasting + colored + colorer + colorers + colorfast + colorfastness + colorful + colorfully + colorfulness + colorimeter + coloring + colorings + colorless + colorlessly + colorlessness + colors + coloslossi + coloslossuses + colossal + colossally + Colosseum + colossi + colossus + colour + colouration + coloured + colourful + colouring + colours + colt + colter + coltish + colts + coltsfoot + Columbia + columbia + columbine + Columbus + columbus + column + columnar + columnate + columnated + columnates + columnating + columnation + columned + columnist + columnize + columnized + columnizes + columnizing + columns + colza + com + coma + comade + comae + comake + comaker + comaking + Comanche + comas + comatose + comb + combat + combatant + combatants + combated + combating + combative + combatively + combativeness + combats + combatted + combatting + combed + comber + combers + combinate + combination + combinational + combinations + combinator + combinatorial + combinatorially + combinatoric + combinatorics + combinators + combine + combined + combiner + combines + combing + combings + combining + combo + combos + combs + combustibility + combustible + combustibly + combustion + combustive + come + comeback + comedian + comedians + comedic + comedienne + comedies + comedown + comedy + comelier + comeliest + comeliness + comely + comer + comers + comes + comestible + comet + cometary + cometh + comets + comeuppance + comfier + comfiest + comfit + comfort + comfortabilities + comfortability + comfortable + comfortably + comforted + comforter + comforters + comforting + comfortingly + comfortless + comforts + comfy + comic + comical + comicality + comically + comics + Cominform + coming + comings + comities + comity + comma + command + commandant + commandants + commanded + commandeer + commander + commanders + commanding + commandingly + commandment + commandments + commando + commandoes + commandos + commands + commas + commemorate + commemorated + commemorates + commemorating + commemoration + commemorative + commence + commenced + commencement + commencements + commencer + commences + commencing + commend + commendable + commendably + commendation + commendations + commendatory + commended + commending + commends + commensal + commensals + commensurable + commensurate + commensurately + comment + commentaries + commentary + commentate + commentated + commentating + commentator + commentators + commented + commenting + comments + commerce + commercial + commercialism + commercialization + commercialize + commercialized + commercializing + commercially + commercialness + commercials + commingle + commingled + commingling + commiserate + commiserated + commiserating + commiseration + commissar + commissariat + commissaries + commissary + commission + commissioned + commissioner + commissioners + commissioning + commissions + commit + commitment + commitments + commits + committable + committal + committed + committee + committeeman + committeemen + committees + committeewoman + committeewomen + committing + commode + commodious + commodiously + commodities + commodity + commodore + commodores + common + commonalities + commonality + commonalties + commonalty + commoner + commoners + commonest + commonly + commonness + commonplace + commonplaceness + commonplaces + commons + commonsense + commonweal + commonwealth + commonwealths + commotion + communal + communally + commune + communed + communes + communicability + communicable + communicant + communicants + communicate + communicated + communicates + communicating + communication + communications + communicative + communicatively + communicator + communicators + communing + communion + communique + communism + communist + communistic + communistically + communists + communities + community + communization + communize + communized + communizing + commutate + commutated + commutating + commutation + commutative + commutativity + commutator + commute + commuted + commuter + commuters + commutes + commuting + compact + compacted + compacter + compactest + compactify + compacting + compaction + compactly + compactness + compactor + compactors + compacts + Compagnie + companies + companion + companionable + companionably + companionate + companions + companionship + companionway + company + comparability + comparable + comparably + comparative + comparatively + comparatives + comparator + comparators + compare + compared + compares + comparing + comparison + comparisons + compartment + compartmental + compartmentalize + compartmentalized + compartmentalizes + compartmentalizing + compartmented + compartments + compass + compassable + compasses + compassion + compassionate + compassionately + compatibilities + compatibility + compatible + compatibles + compatibly + compatriot + compeer + compel + compellable + compelled + compeller + compelling + compellingly + compels + compendia + compendious + compendiously + compendium + compendiums + compensable + compensate + compensated + compensates + compensating + compensation + compensations + compensator + compensatory + compete + competed + competence + competency + competent + competently + competes + competing + competition + competitions + competitive + competitively + competitiveness + competitor + competitors + compilation + compilations + compile + compileable + compiled + compiler + compilers + compiles + compiling + complacence + complacency + complacent + complacently + complain + complainant + complained + complainer + complainers + complaining + complainingly + complains + complaint + complaints + complaisance + complaisant + complaisantly + complected + complement + complemental + complementally + complementarity + complementary + complementation + complemented + complementer + complementers + complementing + complements + complete + completed + completely + completeness + completer + completes + completing + completion + completions + complex + complexes + complexion + complexioned + complexities + complexity + complexly + complexness + compliance + compliant + compliantly + complicate + complicated + complicatedly + complicates + complicating + complication + complications + complicator + complicators + complicities + complicity + complied + complier + complies + compliment + complimentarity + complimentary + complimented + complimenter + complimenters + complimenting + compliments + compline + comply + complying + component + componentry + components + componentwise + comport + comportment + compose + composed + composedly + composedness + composer + composers + composes + composing + compositae + composite + compositely + composites + composition + compositional + compositions + compositor + compost + composure + compote + compound + compounded + compounding + compounds + comprehend + comprehended + comprehending + comprehends + comprehensibility + comprehensible + comprehensibly + comprehension + comprehensive + comprehensively + comprehensiveness + compress + compressed + compresses + compressibility + compressible + compressing + compression + compressions + compressive + compressor + comprisal + comprise + comprised + comprises + comprising + compromise + compromised + compromiser + compromisers + compromises + compromising + compromisingly + Compton + comptroller + comptrollers + comptrollership + compulsion + compulsions + compulsive + compulsively + compulsiveness + compulsorily + compulsory + compunction + compunctious + computability + computable + computation + computational + computationally + computations + compute + computed + computer + computerization + computerize + computerized + computerizes + computerizing + computers + computes + computing + comrade + comradely + comrades + comradeship + con + Conakry + Conant + concatenate + concatenated + concatenates + concatenating + concatenation + concatenations + concave + concavely + concavities + concavity + conceal + concealed + concealer + concealers + concealing + concealment + conceals + concede + conceded + concedes + conceding + conceit + conceited + conceitedly + conceits + conceivability + conceivable + conceivably + conceive + conceived + conceiver + conceives + conceiving + concentrate + concentrated + concentrates + concentrating + concentration + concentrations + concentrator + concentrators + concentric + concentrically + concept + conception + conceptions + conceptive + concepts + conceptual + conceptualization + conceptualizations + conceptualize + conceptualized + conceptualizes + conceptualizing + conceptually + concern + concerned + concernedly + concerning + concerns + concert + concerted + concertedly + concerti + concertina + concertize + concertized + concertizing + concertmaster + concerto + concertos + concerts + concession + concessionaire + concessioner + concessions + concessive + conch + conches + conchs + concierge + conciliar + conciliate + conciliated + conciliates + conciliating + conciliation + conciliative + conciliator + conciliatory + concise + concisely + conciseness + concision + conclave + conclude + concluded + concludes + concluding + conclusion + conclusions + conclusive + conclusively + conclusiveness + concoct + concoction + concomitance + concomitancy + concomitant + concomitantly + concommitant + concommitantly + concord + concordance + concordances + concordant + concordat + concords + concourse + concrete + concreted + concretely + concreteness + concretes + concreting + concretion + concubine + concupiscence + concupiscent + concur + concurred + concurrence + concurrencies + concurrency + concurrent + concurrently + concurring + concurs + concussion + concussive + condemn + condemnable + condemnate + condemnation + condemnations + condemnatory + condemned + condemner + condemners + condemning + condemns + condensable + condensate + condensation + condensations + condense + condensed + condenser + condenses + condensible + condensing + condescend + condescended + condescending + condescends + condescension + condescensions + condign + condiment + condition + conditional + conditionally + conditionals + conditioned + conditioner + conditioners + conditioning + conditions + condole + condoled + condolement + condolence + condolences + condoler + condoling + condom + condominiia + condominiiums + condominium + condonable + condonation + condone + condoned + condoner + condones + condoning + condor + condors + conduce + conduced + conducing + conducive + conduct + conductance + conducted + conducting + conduction + conductive + conductivity + conductor + conductors + conducts + conduit + cone + coned + coneflower + cones + Conestoga + coney + coneys + confab + confabulate + confect + confection + confectionary + confectioner + confectioneries + confectionery + confections + confederacies + confederacy + confederate + confederated + confederates + confederating + confederation + confederations + confer + conferee + conference + conferences + conferencing + conferment + conferrable + conferral + conferred + conferrer + conferrers + conferring + confers + confess + confessed + confesses + confessing + confession + confessional + confessions + confessor + confessors + confetti + confidant + confidante + confidants + confide + confided + confidence + confidences + confident + confidential + confidentiality + confidentially + confidently + confider + confides + confiding + confidingly + configurable + configuration + configurations + configure + configured + configures + configuring + confine + confined + confinement + confinements + confiner + confines + confining + confirm + confirmable + confirmation + confirmations + confirmatory + confirmed + confirming + confirms + confiscable + confiscate + confiscated + confiscates + confiscating + confiscation + confiscations + confiscatory + conflagrate + conflagration + conflict + conflicted + conflicting + conflicts + confluence + confluent + confocal + conforbably + conform + conformability + conformable + conformably + conformal + conformance + conformation + conformed + conforming + conformist + conformities + conformity + conforms + confound + confounded + confoundedly + confounding + confounds + confraternities + confraternity + confrere + confront + confrontation + confrontations + confronted + confronter + confronters + confronting + confronts + Confucian + Confucius + confuse + confused + confusedly + confuser + confusers + confuses + confusing + confusingly + confusion + confusions + confutation + confute + confuted + confuting + congeal + congealable + congealment + congener + congenial + congeniality + congenially + congenital + congenitally + conger + congest + congested + congestion + congestive + conglomerate + conglomerated + conglomerating + conglomeration + Congo + Congolese + congratulate + congratulated + congratulates + congratulating + congratulation + congratulations + congratulator + congratulatory + congregate + congregated + congregates + congregating + congregation + congregational + congregationalism + congregations + congregative + congress + congresses + congressional + congressionally + congressman + congressmen + congresswoman + congresswomen + congruence + congruency + congruent + congruently + congruities + congruity + congruous + congruously + conic + conical + conically + conies + conifer + coniferous + conifers + coning + conjectural + conjecturally + conjecture + conjectured + conjectures + conjecturing + conjegates + conjoin + conjoined + conjoining + conjoins + conjoint + conjointly + conjugacy + conjugal + conjugally + conjugate + conjugated + conjugating + conjugation + conjugations + conjugative + conjunct + conjuncted + conjunction + conjunctions + conjunctiva + conjunctivae + conjunctivas + conjunctive + conjunctively + conjunctivitis + conjuncts + conjuncture + conjuration + conjure + conjured + conjurer + conjures + conjuring + conjuror + conk + Conklin + Conley + conn + Connally + connect + connected + connectedness + connecter + connecters + connectibility + connectibly + Connecticut + connecticut + connecting + connection + connectionless + connections + connective + connectives + connectivity + connector + connectors + connects + conned + Conner + connexion + Connie + conning + connivance + connivances + connive + connived + conniver + connivers + connives + conniving + connoisseur + connoisseurs + Connors + connotation + connotations + connotative + connote + connoted + connotes + connoting + connubial + conquer + conquerable + conquered + conquerer + conquerers + conquering + conqueror + conquerors + conquers + conquest + conquests + conquistador + conquistadores + conquistadors + Conrad + Conrail + cons + consanguine + consanguineous + consanguinity + conscience + conscienceless + consciences + conscientious + conscientiously + conscientiousness + conscionable + conscious + consciously + consciousness + conscript + conscripted + conscripting + conscription + conscriptions + conscripts + consecrate + consecrated + consecrating + consecration + consecrator + consecutive + consecutively + consensus + consent + consented + consenter + consenters + consenting + consents + consequence + consequences + consequent + consequential + consequentialities + consequentiality + consequentially + consequently + consequents + conservable + conservation + conservationist + conservationists + conservations + conservatism + conservative + conservatively + conservatives + conservator + conservatories + conservatory + conserve + conserved + conserver + conservers + conserves + conserving + consider + considerable + considerably + considerate + considerately + consideration + considerations + considered + considering + considers + consign + consignable + consigned + consignee + consigner + consigning + consignment + consignor + consigns + consist + consisted + consistence + consistencies + consistency + consistent + consistently + consisting + consistories + consistory + consists + consolable + consolation + consolations + consolatory + console + consoled + consoler + consolers + consoles + consolidate + consolidated + consolidates + consolidating + consolidation + consolidator + consoling + consolingly + consonance + consonant + consonantal + consonantly + consonants + consort + consorted + consorting + consortitia + consortium + consorts + conspecific + conspecifics + conspectus + conspicuous + conspicuously + conspiracies + conspiracy + conspirator + conspiratorial + conspirators + conspire + conspired + conspires + conspiring + const + constable + constables + constabularies + constabulary + constancy + constant + Constantine + Constantinople + constantly + constants + constellate + constellation + constellations + consternate + consternation + constipate + constipated + constipating + constipation + constituencies + constituency + constituent + constituents + constitute + constituted + constitutes + constituting + constitution + constitutional + constitutionality + constitutionally + constitutions + constitutive + constrain + constrained + constrainedly + constraining + constrains + constraint + constraints + constrict + constricted + constricting + constriction + constrictive + constrictor + constricts + construable + construct + constructable + constructed + constructer + constructibility + constructible + constructing + construction + constructional + constructions + constructive + constructively + constructiveness + constructor + constructors + constructs + construe + construed + construes + construing + constuctor + consul + consular + consulate + consulates + consuls + consulship + consult + consultant + consultants + consultation + consultations + consultative + consultatory + consulted + consulter + consulting + consults + consumable + consumables + consume + consumed + consumer + consumerism + consumers + consumes + consuming + consummate + consummated + consummately + consummating + consummation + consummator + consumption + consumptions + consumptive + consumptively + contact + contacted + contacting + contacts + contagion + contagious + contagiously + contagiousness + contain + containable + contained + container + containerization + containerize + containerized + containerizing + containers + containing + containment + containments + contains + contaminant + contaminate + contaminated + contaminates + contaminating + contamination + contaminations + contaminator + contchar + contemn + contemner + contemnor + contemplate + contemplated + contemplates + contemplating + contemplation + contemplations + contemplative + contemporaneous + contemporaneously + contemporaries + contemporariness + contemporary + contempt + contemptible + contemptibly + contemptuous + contemptuously + contend + contended + contender + contenders + contending + contends + content + contented + contentedly + contenting + contention + contentions + contentious + contently + contentment + contents + conterminous + contest + contestable + contestant + contested + contester + contesters + contesting + contests + context + contexts + contextual + contextually + contiguities + contiguity + contiguous + contiguously + continence + continent + continental + continentally + continently + continents + contingence + contingencies + contingency + contingent + contingents + continua + continual + continually + continuance + continuances + continuant + continuation + continuations + continue + continued + continues + continuing + continuities + continuity + continuo + continuous + continuously + continuua + continuum + contort + contorta + contorted + contorting + contortion + contortionist + contortions + contorts + contour + contoured + contouring + contours + contraband + contrabass + contraception + contraceptive + contraceptives + contract + contracted + contractible + contractile + contracting + contraction + contractions + contractor + contractors + contracts + contractual + contractually + contradict + contradictable + contradicted + contradicter + contradicting + contradiction + contradictions + contradictor + contradictory + contradicts + contradistinct + contradistinction + contradistinctions + contradistinctive + contradistinguish + contralateral + contralti + contralto + contraltos + contrapositive + contrapositives + contraption + contraptions + contrapuntal + contrapuntally + contraries + contrariety + contrarily + contrariness + contrariwise + contrary + contrast + contrasted + contraster + contrasters + contrasting + contrastingly + contrastive + contrasts + contratulations + contravariant + contravene + contravened + contravening + contravention + contretemps + contribute + contributed + contributes + contributing + contribution + contributions + contributor + contributorily + contributors + contributory + contrite + contritely + contriteness + contrition + contrivance + contrivances + contrive + contrived + contriver + contrives + contriving + control + controllability + controllable + controllably + controlled + controller + controllers + controllership + controlling + controls + controversial + controversially + controversies + controversy + controvert + controvertible + contumacies + contumacious + contumacy + contumelies + contumelious + contumely + contuse + contused + contusing + contusion + conundrum + conundrums + Convair + convalesce + convalesced + convalescence + convalescent + convalescing + convect + convection + convectional + convective + convene + convened + convenes + convenience + conveniences + convenient + conveniently + convening + convent + conventicle + convention + conventional + conventionalism + conventionalities + conventionality + conventionalization + conventionalize + conventionalized + conventionalizing + conventionally + conventions + convents + converge + converged + convergence + convergences + convergent + converges + converging + conversant + conversantly + conversation + conversational + conversationalist + conversationally + conversations + converse + conversed + conversely + converses + conversing + conversion + conversions + convert + convertable + converted + converter + converters + convertibility + convertible + convertibly + converting + convertor + converts + convex + convexities + convexity + convexly + convey + conveyable + conveyance + conveyances + conveyed + conveyer + conveyers + conveying + conveyor + conveys + convict + convicted + convicting + conviction + convictions + convicts + convince + convinced + convincer + convincers + convinces + convincing + convincingly + convivial + conviviality + convocate + convocation + convocational + convoke + convoked + convoking + convolute + convoluted + convolution + convolve + convoy + convoyed + convoying + convoys + convulse + convulsed + convulsing + convulsion + convulsions + convulsive + convulsively + Conway + cony + coo + cooing + cooingly + cook + cookbook + Cooke + cooked + cooker + cookery + cookie + cookies + cooking + cookout + cooks + cooky + cool + coolant + cooled + cooler + coolers + coolest + Cooley + coolheaded + Coolidge + coolie + coolies + cooling + coolly + coolness + cools + coon + coons + coop + cooped + cooper + cooperage + cooperate + cooperated + cooperates + cooperating + cooperation + cooperations + cooperative + cooperatively + cooperativeness + cooperatives + cooperator + cooperators + coopers + coops + coordinate + coordinated + coordinates + coordinating + coordination + coordinations + coordinator + coordinators + Coors + coot + cootie + cop + copartner + copartnership + cope + coped + copeia + Copeland + Copenhagen + copenhagen + copepod + copepods + Copernican + Copernicus + copes + copied + copier + copiers + copies + copilot + coping + copings + copious + copiously + copiousness + coplanar + copolymer + copped + copper + copperas + Copperfield + copperhead + copperplate + coppers + coppery + coppice + copping + copra + coprinus + coprocessor + coproduct + cops + copse + copter + copula + copulas + copulate + copulated + copulating + copulation + copulations + copulative + copy + copybook + copying + copyist + copyright + copyrightable + copyrighted + copyrights + copywriter + coquet + coquetries + coquetry + coquette + coquetted + coquetting + coquettish + coquettishly + coquina + coral + coralberry + coralline + corals + corbel + corbeled + corbeling + corbelled + corbelling + Corbett + Corcoran + cord + cordage + cordate + corded + corder + cordial + cordialities + cordiality + cordially + cordillera + cordite + cordless + cordon + cordovan + cords + corduroy + core + cored + corer + corers + cores + corespondent + Corey + coriander + coring + Corinth + Corinthian + Coriolanus + cork + corked + corker + corkers + corkier + corkiest + corking + corks + corkscrew + corky + corm + cormorant + corn + cornbread + corncob + cornea + corneal + corned + Cornelia + Cornelius + Cornell + cornell + corner + cornered + cornering + corners + cornerstone + cornerstones + cornet + cornetist + cornettist + cornfield + cornfields + cornflakes + cornflower + cornice + cornier + corniest + corniness + corning + cornish + cornix + cornmeal + corns + cornstarch + cornucopia + Cornwall + corny + corolla + corollaries + corollary + corona + Coronado + coronae + coronal + coronaries + coronary + coronas + coronate + coronation + coroner + coroners + coronet + coronets + coroutine + coroutines + Corp + corpora + corporacies + corporacy + corporal + corporality + corporally + corporals + corporate + corporately + corporation + corporations + corporeal + corporeality + corporeally + corps + corpse + corpses + corpsman + corpsmen + corpulence + corpulency + corpulent + corpus + corpuscle + corpuscular + corral + corralled + corralling + correct + correctable + corrected + correcting + correction + correctional + corrections + corrective + correctively + correctives + correctly + correctness + corrector + corrects + correlate + correlated + correlates + correlating + correlation + correlations + correlative + correlatively + correllated + correllation + correllations + correspond + corresponded + correspondence + correspondences + correspondent + correspondents + corresponding + correspondingly + corresponds + corridor + corridors + corrigenda + corrigendum + corrigible + corroborate + corroborated + corroborates + corroborating + corroboration + corroborations + corroborative + corroborator + corroboratory + corroboree + corrode + corroded + corrodible + corroding + corrosion + corrosive + corrugate + corrugated + corrugating + corrugation + corrupt + corrupted + corrupter + corruptible + corrupting + corruption + corruptions + corruptive + corruptness + corruptor + corrupts + corsage + corsair + corselet + corselette + corset + corslet + cortege + cortex + cortical + cortices + cortisone + Cortland + corundum + coruscate + coruscated + coruscating + coruscation + Corvallis + corvette + Corvus + corymb + coryza + cos + cosec + cosecant + coset + Cosgrove + cosh + cosier + cosiest + cosign + cosignatories + cosignatory + cosigner + cosine + cosines + cosmetic + cosmetically + cosmetics + cosmic + cosmically + cosmogonies + cosmogony + cosmology + cosmonaut + cosmopolitan + cosmopolite + cosmos + cosponsor + cosponsorship + Cossack + cost + Costa + costa + costed + Costello + costing + costlier + costliest + costliness + costly + costs + costume + costumed + costumer + costumes + costuming + cosy + cot + cotangent + cote + coterie + cotillion + cotillon + cotman + cotoneaster + cots + cotta + cottage + cottager + cottages + cottar + cotter + cotton + cottonmouth + cottons + cottonseed + cottontail + cottonwood + cottony + Cottrell + cotty + cotyledon + cotyledons + couch + couchant + couched + couches + couching + cougar + cough + coughed + coughing + coughs + could + couldn + couldn't + couldst + coulee + coulomb + Coulter + coulthard + council + councillor + councillors + councilman + councilmanic + councilmen + councilor + councils + councilwoman + councilwomen + counsel + counseled + counseling + counselled + counselling + counsellor + counsellors + counselor + counselors + counsels + count + countable + countably + countdown + counted + countenance + countenanced + countenancing + counter + counteract + counteracted + counteracting + counteraction + counteractive + counterargument + counterattack + counterbalance + counterbalanced + counterbalancing + counterclaim + counterclockwise + countered + counterespionage + counterexample + counterexamples + counterfeit + counterfeited + counterfeiter + counterfeiting + counterfeits + counterflow + countering + counterintuitive + counterman + countermand + countermarch + countermeasure + countermeasures + countermen + countermove + countermoved + countermoving + counteroffensive + counterpane + counterpart + counterparts + counterplot + counterplotted + counterplotting + counterpoint + counterpointing + counterpoise + counterpoised + counterpoising + counterproductive + counterproposal + counterrevolution + counterrevolutionary + counterrevolutionist + counters + countershaft + countersign + countersignature + countersink + countersinking + countersunk + countertenor + countervail + counterweigh + counterweight + countess + counties + counting + countinghouse + countless + countries + countrified + countrify + country + countryfied + countryman + countrymen + countryside + countrywide + countrywoman + countrywomen + counts + county + countywide + coup + coupe + couple + coupled + coupler + couplers + couples + couplet + coupling + couplings + coupon + coupons + coups + courage + courageous + courageously + courier + couriers + course + coursed + courser + courses + coursing + court + courted + courteous + courteously + courter + courters + courtesan + courtesies + courtesy + courtezan + courthouse + courthouses + courtier + courtiers + courting + courtlier + courtliest + courtly + Courtney + courtroom + courtrooms + courts + courtship + courtyard + courtyards + couscous + cousin + cousinly + cousins + couturier + covalent + covariable + covariables + covariance + covariant + covariate + covariates + covary + cove + coven + covenant + covenanter + covenantor + covenants + Coventry + cover + coverable + coverage + coverall + covered + covering + coverings + coverlet + coverlets + coverlid + covers + covert + covertly + coves + covet + coveted + coveting + covetous + covetously + covetousness + covets + covey + coveys + cow + Cowan + coward + cowardice + cowardliness + cowardly + cowbell + cowbird + cowboy + cowboys + cowcatcher + cowed + cower + cowered + cowerer + cowerers + cowering + coweringly + cowers + cowhand + cowherd + cowhide + cowing + cowl + cowlick + cowling + cowls + cowman + cowmen + coworker + cowpea + cowpoke + cowpony + cowpox + cowpunch + cowpuncher + cowrie + cowries + cowry + cows + cowshed + cowslip + cowslips + cox + coxcomb + coxes + coxswain + coy + coyly + coyness + coyote + coyotes + coypu + cozen + cozier + cozies + coziest + cozily + coziness + cozy + CPA + cpu + cpus + cputime + crab + crabapple + crabbed + crabbedness + crabber + crabbier + crabbiest + crabbily + crabbiness + crabby + crabs + crack + crackbrained + cracked + cracker + crackerjack + crackers + cracking + crackle + crackled + crackles + crackling + crackpot + cracks + crackup + cradle + cradled + cradles + cradling + craft + crafted + crafter + craftier + craftiest + craftily + craftiness + crafting + craftmanship + crafts + craftsman + craftsmanship + craftsmen + craftspeople + craftsperson + crafty + crag + cragged + craggier + craggiest + cragginess + craggy + crags + Craig + cram + Cramer + crammed + crammer + cramming + cramp + cramped + crampon + cramps + crams + cranberries + cranberry + Crandall + crane + craned + cranes + Cranford + crania + cranial + craning + craninia + craniniums + craniology + craniometry + cranium + crank + crankcase + cranked + crankier + crankiest + crankily + crankiness + cranking + cranks + crankshaft + cranky + crannied + crannies + cranny + Cranston + crap + crape + crapehanger + crappie + crappier + crappiest + crappy + craps + crapshooting + crash + crashed + crasher + crashers + crashes + crashing + crashproof + crass + crassitude + crassly + crassness + crate + crated + crater + craters + crates + crating + cravat + cravats + crave + craved + craven + cravenly + cravenness + craver + craves + craving + craw + crawfish + Crawford + crawl + crawled + crawler + crawlers + crawling + crawls + crawlspace + cray + crayfish + crayon + crayonist + craze + crazed + crazes + crazier + craziest + crazily + craziness + crazing + crazy + crc + cre + cread + creak + creaked + creakier + creakiest + creakily + creakiness + creaking + creaks + creaky + cream + creamed + creamer + creameries + creamers + creamery + creamier + creamiest + creaminess + creaming + creams + creamy + crease + creased + creases + creasing + create + created + creates + creating + creation + creations + creative + creatively + creativeness + creativity + creator + creators + creature + creatures + creche + credence + credent + credential + credenza + credibility + credible + credibleness + credibly + credit + creditability + creditable + creditably + credited + crediting + creditor + creditors + credits + credo + credos + credulity + credulous + credulously + credulousness + creed + creedal + creeds + creek + creeks + creekside + creel + creep + creeper + creepers + creepier + creepiest + creeping + creeps + creepy + cremate + cremated + cremates + cremating + cremation + cremations + crematorial + crematories + crematoriria + crematoririums + crematorium + crematory + creme + crenate + crenelate + crenelation + crenellate + crenellated + crenellating + crenellation + Creole + Creon + creosote + creosoted + creosoting + crepe + crepitant + crepitate + crepitated + crepitating + crepitation + creply + crept + crepuscular + crescendo + crescendos + crescent + crescents + cress + crest + crested + crestfallen + crests + Crestview + Cretaceous + Cretan + Crete + cretin + cretinism + cretinous + cretonne + crevasse + crevassed + crevassing + crevice + creviced + crevices + crew + crewcut + crewed + crewel + crewelwork + crewing + crewman + crewmen + crews + crib + cribbage + cribbed + cribber + cribs + cricetid + crick + cricket + cricketer + crickets + cried + crier + criers + cries + crime + Crimea + crimes + criminal + criminalities + criminality + criminally + criminals + criminological + criminologist + criminology + crimp + crimpier + crimpiest + crimpiness + crimpy + crimson + crimsoning + cringe + cringed + cringer + cringes + cringing + crinkle + crinkled + crinklier + crinkliest + crinkling + crinkly + crinoid + crinoline + cripple + crippled + crippler + cripples + crippling + crises + crisis + crisp + crispier + crispiest + Crispin + crispiness + crisply + crispness + crispy + criss + crisscross + critchfield + criteria + criteriia + criteriions + criterion + critic + critical + criticality + critically + criticalness + criticise + criticised + criticises + criticising + criticism + criticisms + criticize + criticized + criticizer + criticizes + criticizing + critics + criticsm + critique + critiques + critiquing + critter + crittur + croak + croaked + croaker + croaking + croaks + croaky + Croatia + crochet + crocheted + crocheter + crocheting + crochets + croci + crock + crockery + Crockett + crocks + crocodile + crocodilian + crocus + crocuses + croft + croissant + Croix + Cromwell + Cromwellian + crone + cronies + crony + crook + crooked + crookedly + crookedness + crooking + crooks + croon + crooner + crop + cropped + cropper + croppers + cropping + crops + croquet + croquette + Crosby + crosier + cross + crossable + crossarm + crossbar + crossbarred + crossbarring + crossbars + crossbeam + crossbill + crossbones + crossbow + crossbred + crossbreds + crossbreed + crossbreeding + crosscut + crosscutting + crossed + crosser + crossers + crosses + crosshairs + crosshatch + crossing + crossings + crossley + crosslink + crossly + crossness + crossover + crossovers + crosspatch + crosspiece + crosspoint + crosspoints + crossroad + crosstalk + crosstrees + crosswalk + crossway + crossways + crosswise + crossword + crosswords + crosswort + crotch + crotchet + crotchetiness + crotchety + crouch + crouched + crouching + croup + croupier + croupy + crouton + crow + crowbait + crowbar + crowberry + crowd + crowded + crowder + crowding + crowds + crowed + crowfoot + crowfoots + crowing + Crowley + crown + crowned + crowner + crowning + crowns + crows + croydon + crozier + CRT + crt + crts + cruces + crucial + crucially + crucible + crucified + crucifier + crucifies + crucifix + crucifixion + cruciform + crucify + crucifyfied + crucifyfying + crucifying + crud + cruddy + crude + crudely + crudeness + cruder + crudest + crudity + cruel + crueler + cruelest + cruelly + cruelness + cruelties + cruelty + cruet + Cruickshank + cruise + cruised + cruiser + cruisers + cruises + cruising + cruller + crumb + crumbier + crumbiest + crumble + crumbled + crumbles + crumblier + crumbliest + crumbling + crumbly + crumbs + crumbum + crumby + crummier + crummiest + crumminess + crummy + crump + crumpet + crumple + crumpled + crumples + crumpling + crumply + crunch + crunched + crunches + crunchier + crunchiest + crunching + crunchy + crupper + crusade + crusaded + crusader + crusaders + crusades + crusading + cruse + crush + crushable + crushed + crusher + crushers + crushes + crushing + crushingly + Crusoe + crust + crustacea + crustacean + crustaceans + crustaceous + crustier + crustiest + crustily + crustiness + crusts + crusty + crutch + crutches + crux + cruxes + Cruz + cry + crybabies + crybaby + crying + cryogenic + cryogenics + cryostat + cryostats + cryosurgery + crypt + cryptanalysis + cryptanalyst + cryptanalytic + cryptic + cryptical + cryptically + cryptogam + cryptogamic + cryptogamous + cryptogram + cryptograph + cryptographer + cryptographic + cryptographically + cryptography + cryptologist + cryptology + crystal + crystalize + crystalline + crystallite + crystallizable + crystallization + crystallize + crystallized + crystallizes + crystallizing + crystallographer + crystallography + crystalloid + crystalloidal + crystals + csect + csects + csi + csmp + csnet + csw + CT + cub + Cuba + cubby + cubbyhole + cube + cubed + cubes + cubic + cubical + cubically + cubicle + cubiform + cubing + cubism + cubist + cubistic + cubit + cuboid + cuboids + cubs + cuckold + cuckoldry + cuckoo + cuckoos + cucumber + cucumbers + cud + cuddle + cuddled + cuddlesome + cuddlier + cuddliest + cuddling + cuddly + cudgel + cudgelled + cudgelling + cudgels + cue + cued + cueing + cues + cuff + cufflink + cuffs + cuinfo + cuing + cuirass + cuisine + Culbertson + culex + culinary + cull + culled + cullender + culler + culling + culls + culm + culminate + culminated + culminates + culminating + culmination + culotte + culpa + culpability + culpable + culpably + culprit + culprits + cult + cultist + cultivable + cultivate + cultivated + cultivates + cultivating + cultivation + cultivations + cultivative + cultivator + cultivators + cults + cultural + culturally + culture + cultured + cultures + culturing + Culver + culvert + cumber + Cumberland + cumbersome + cumbrous + cumin + cummerbund + cummin + Cummings + Cummins + cumulate + cumulative + cumulatively + cumulativeness + cumuli + cumulous + cumulus + Cunard + cunea + cuneiform + cunning + Cunningham + cunningly + CUNY + cup + cupbearer + cupboard + cupboards + cupcake + cupful + cupfulfuls + Cupid + cupidity + cuplike + cupola + cupolaed + cupped + cupping + cupreous + cupric + cupronickel + cuprous + cups + cur + curability + curable + curably + curacies + curacy + curare + curari + curate + curative + curator + curatorial + curb + curbing + curbs + curbside + curbstone + curd + curdle + curdled + curdling + curdy + cure + cured + curer + cures + curettage + curfew + curfews + curia + curiae + curial + curie + curing + curio + curios + curiosities + curiosity + curious + curiouser + curiousest + curiously + curiousness + curium + curl + curled + curler + curlers + curlew + curlicue + curlier + curliest + curling + curls + curly + curmudgeon + Curran + currant + currants + currencies + currency + current + currently + currentness + currents + curricula + curricular + curriculum + curriculums + curried + currier + curries + curry + currycomb + currying + curs + curse + cursed + cursedly + curser + curses + cursing + cursive + cursor + cursorily + cursoriness + cursors + cursory + curst + curt + curtail + curtailed + curtailing + curtailment + curtails + curtain + curtained + curtains + curtate + Curtis + curtly + curtness + curtsey + curtsied + curtsies + curtsy + curtsying + curvaceous + curvature + curve + curved + curves + curvet + curveted + curveting + curvetted + curvetting + curvier + curviest + curvilineal + curvilinear + curving + curvy + cushier + cushiest + Cushing + cushion + cushioned + cushioning + cushions + Cushman + cushy + cusp + cuspid + cuspidate + cuspidated + cuspidor + cusps + cuss + cussed + cussedly + custard + Custer + custodial + custodian + custodians + custodianship + custodies + custody + custom + customarily + customary + customer + customers + customhouse + customizable + customization + customizations + customize + customized + customizer + customizers + customizes + customizing + customs + customshouse + cut + cutaneous + cutaway + cutback + cutbacks + cute + cutely + cuteness + cuter + cutest + cuticle + cutlas + cutlass + cutler + cutlery + cutlet + cutoff + cutout + cutover + cuts + cutset + cutter + cutters + cutthroat + cutting + cuttingly + cuttings + cuttlebone + cuttlefish + cutworm + cwrite + Cyanamid + cyanate + cyanic + cyanide + cyanogen + cyanosis + cyanotic + cybernate + cybernated + cybernating + cybernation + cybernetic + cybernetics + cycad + Cyclades + cyclamate + cyclamen + cyclamens + cycle + cycled + cycles + cyclic + cyclical + cyclically + cycling + cyclist + cyclohexadienyl + cyclohexane + cycloid + cycloidal + cycloids + cyclometer + cyclone + cyclones + cyclonic + cyclonically + cyclopaedia + cyclopaedic + cyclopaedist + cyclopean + cyclopedia + cyclopedic + cyclopedist + cyclopentane + Cyclops + cyclorama + cyclotomic + cyclotron + cyclotrons + cygnet + Cygnus + cylinder + cylinders + cylindric + cylindrical + cylindrically + cymbal + cymbalist + cymbals + cynic + cynical + cynically + cynicism + cynosure + Cynthia + cypher + cypress + Cyprian + cyprinoid + Cypriot + Cyprus + Cyril + Cyrillic + Cyrus + cyst + cysteine + cystic + cysts + cytochemistry + cytological + cytologically + cytology + cytolysis + cytoplasm + cytoplasmic + cytoplast + cytosine + CZ + czar + czarina + czarism + czarist + Czech + Czechoslovakia + czechoslovakia + Czerniak + d + d'art + d'etat + d'oeuvre + d's + dab + dabbed + dabber + dabble + dabbled + dabbler + dabbles + dabbling + dabchick + Dacca + dace + daces + dacha + dachshund + dacoit + dacoity + dactyl + dactylic + dactylogram + dactylography + dactylology + dactyloscopy + dad + Dada + dada + daddies + daddy + Dade + dado + dadoes + dads + daedal + Daedalus + daemon + daemonic + daemons + daff + daffier + daffiest + daffiness + daffodil + daffodils + daffy + daft + dagga + dagger + daggle + daglock + daguerreotype + daguerreotyped + daguerreotyping + dahabeah + dahabeeyah + dahabiah + Dahl + dahlia + dahlsten + dahms + Dahomey + Dailey + dailies + daily + Daimler + daintier + dainties + daintiest + daintily + daintiness + dainty + daiquiri + dairies + dairy + dairying + Dairylea + dairymaid + dairyman + dairymen + dais + daises + daisies + daisy + Dakar + Dakota + dakota + dale + daledh + dales + dalesman + daleth + Daley + Dalhousie + daliance + Dallas + dallas + dalles + dalliance + dallied + dally + dallying + dalmatian + dalmatic + Dalton + Daly + Dalzell + dam + damage + damageable + damaged + damager + damagers + damages + damaging + daman + damar + damascene + damascened + damascening + Damascus + damask + dame + dammar + dammed + dammer + damming + damn + damnable + damnably + damnation + damnatory + damned + damnify + damning + damns + damoiselle + Damon + damosel + damozel + damp + dampen + dampener + dampens + damper + damping + dampish + damply + dampness + dams + damsel + damselfly + damsels + damson + Dan + Dana + Danbury + dance + danced + dancer + dancers + dances + dancing + dandelion + dandelions + dander + dandier + dandies + dandiest + dandified + dandify + dandifying + dandle + dandled + dandling + dandruff + dandy + dandyish + Dane + dang + danger + dangerous + dangerously + dangerousness + dangers + dangle + dangled + dangles + dangling + Daniel + Danielson + Danish + danish + dank + dankly + dankness + Danny + danseusse + Dante + Danube + Danubian + Danzig + dap + Daphne + daphnia + dapper + dapperly + dapple + dappled + dappling + dapson + Dar + dare + dared + daredevil + darer + darers + dares + daresay + daring + daringly + Darius + dark + darken + darkened + darkening + darkens + darker + darkest + darkish + darkle + darkling + darkly + darkness + darkroom + darksome + Darlene + darling + darlings + darn + darned + darnel + darner + darning + darns + DARPA + darpa + Darrell + Darry + darshan + dart + darted + darter + darters + darting + dartle + Dartmouth + dartmouth + darts + Darwin + Darwinian + dash + dashboard + dashed + dasheen + dasher + dashers + dashes + dashiki + dashing + dashingly + dassie + dastard + dastardliness + dastardly + dasymeter + dasyure + data + database + databases + datacell + datafile + datagram + datagrams + datakit + datapac + datapunch + datary + dataset + datasetname + datasets + datatype + datatypes + date + dated + dateless + dateline + datelined + datelining + dater + daterman + dates + dating + dative + Datsun + datsw + datum + datura + daub + dauber + daubery + Daugherty + daughter + daughterly + daughters + daunt + daunted + dauntless + dauntlessly + dauphin + dauphine + Dave + davenport + David + Davidson + Davies + Davis + Davison + davit + Davy + daw + dawdle + dawdled + dawdler + dawdling + dawn + dawned + dawning + dawns + Dawson + day + daybed + daybook + daybreak + daydream + daydreamer + daydreaming + daydreams + dayflower + dayfly + daylight + daylights + daylong + days + daysman + dayspring + daystar + daytime + Dayton + Daytona + daywork + daze + dazed + dazing + dazzle + dazzled + dazzler + dazzles + dazzling + dazzlingly + DC + dca + dcb + dcbname + ddname + De + deacon + deaconess + deacons + deactivate + deactivated + deactivates + deactivating + deactivation + dead + deadbeat + deaden + deadening + deadeye + deadfall + deadhead + deadlier + deadliest + deadlight + deadline + deadlines + deadliness + deadlock + deadlocked + deadlocking + deadlocks + deadly + deadness + deadpan + deadwood + deaf + deafen + deafening + deafeningly + deafer + deafest + deafly + deafness + deal + dealate + dealer + dealers + dealership + dealfish + dealing + dealings + deallocate + deallocated + deallocates + deallocating + deallocation + deallocations + deals + dealt + deaminate + deaminize + dean + Deane + deanery + Deanna + deans + deanship + dear + Dearborn + dearer + dearest + dearie + dearly + dearness + dearth + dearths + death + deathbed + deathblow + deathful + deathless + deathlessly + deathlessness + deathlike + deathly + deathrate + deathrates + deaths + deathsman + deathtrap + deathward + deathwatch + deb + debacle + debar + debark + debarkation + debarment + debarred + debarring + debase + debased + debasement + debaser + debasing + debatable + debate + debated + debater + debaters + debates + debating + debauch + debauchee + debaucher + debauchery + Debbie + Debby + debenture + debilitate + debilitated + debilitates + debilitating + debilitation + debilities + debility + debit + debited + deblock + deblocked + deblocking + debonair + debonaire + debonairly + Deborah + debouch + debouchment + Debra + debridement + debrief + debris + debt + debtor + debtors + debts + debug + debugged + debugger + debuggers + debugging + debugs + debunk + Debussy + debut + debutant + debutante + Dec + dec + decade + decadence + decadent + decadently + decades + decagon + decagram + decagramme + decahedra + decahedral + decahedron + decahedrons + decal + decalcify + decalcomania + decalescence + decaliter + decalitre + decalomania + decameter + decametre + decamp + decanal + decane + decant + decanter + decapitate + decapitated + decapitating + decapitation + decapod + decasyllabic + decasyllable + decathlon + Decatur + decay + decayed + decaying + decays + Decca + decease + deceased + deceases + deceasing + decedent + deceit + deceitful + deceitfully + deceitfulness + deceivable + deceive + deceived + deceiver + deceivers + deceives + deceiving + deceivingly + decelerate + decelerated + decelerates + decelerating + deceleration + December + december + decencies + decency + decennial + decent + decently + decentralization + decentralize + decentralized + decentralizing + deception + deceptions + deceptive + deceptively + deceptiveness + decertify + decibel + decibels + decidability + decidable + decide + decided + decidedly + decides + deciding + deciduous + decigram + decigramme + decile + deciliter + decilitre + decimal + decimally + decimals + decimate + decimated + decimates + decimating + decimation + decimator + decimeter + decimetre + decimetres + decipher + decipherable + deciphered + decipherer + deciphering + deciphers + decision + decisions + decisive + decisively + decisiveness + deck + decked + deckhand + decking + deckings + decks + declaim + declaimer + declamation + declamatory + declarable + declaration + declarations + declarative + declaratively + declaratives + declarator + declarators + declaratory + declare + declared + declarer + declarers + declares + declaring + declassified + declassify + declassifying + declension + declinable + declination + declinations + decline + declined + decliner + decliners + declines + declining + declivities + declivity + decnet + decoct + decoction + decode + decoded + decoder + decoders + decodes + decoding + decodings + decollated + decolletage + decollimate + decolonization + decolonize + decolonized + decolonizing + decompile + decomposability + decomposable + decompose + decomposed + decomposes + decomposing + decomposition + decompositions + decompress + decompressed + decompression + decongestant + decontaminate + decontaminated + decontaminating + decontamination + decontrol + decontrolled + decontrolling + deconvolution + deconvolve + decor + decorate + decorated + decorates + decorating + decoration + decorations + decorative + decoratively + decorator + decorators + decorous + decorously + decorticate + decorum + decouple + decoupled + decouples + decoupling + decoy + decoys + decrease + decreased + decreases + decreasing + decreasingly + decree + decreed + decreeing + decrees + decrement + decremented + decrementing + decrements + decrepit + decrepitude + decrescendo + decrescendos + decried + decry + decrying + decrypt + decrypted + decrypting + decryption + decrypts + decumbent + decwriter + dedicate + dedicated + dedicates + dedicating + dedication + dedicator + dedicatory + deduce + deduced + deducer + deduces + deducible + deducing + deduct + deducted + deductible + deducting + deduction + deductions + deductive + deducts + Dee + deed + deeded + deeding + deeds + deem + deemed + deeming + deemphasize + deemphasized + deemphasizes + deemphasizing + deems + deep + deepen + deepened + deepening + deepens + deeper + deepest + deeply + deepness + deeps + deer + Deere + deers + deerskin + deerstalker + deface + defaced + defacement + defacer + defacing + defalcate + defalcated + defalcating + defalcation + defalcator + defamation + defamatory + defame + defamed + defamer + defaming + default + defaulted + defaulter + defaulting + defaults + defeat + defeated + defeating + defeatism + defeatist + defeats + defecate + defecated + defecating + defecation + defect + defected + defecting + defection + defections + defective + defectively + defectiveness + defector + defects + defence + defences + defencive + defend + defendant + defendants + defended + defender + defenders + defending + defends + defenestrate + defenestrated + defenestrates + defenestrating + defenestration + defense + defenseless + defenselessly + defenselessness + defenses + defensible + defensibly + defensive + defensively + defensiveness + defer + deference + deferent + deferential + deferentially + deferment + deferments + deferrable + deferral + deferred + deferrer + deferrers + deferring + defers + defiance + defiant + defiantly + deficiencies + deficiency + deficient + deficiently + deficit + deficits + defied + defies + defile + defiled + defilement + defiler + defiling + definable + define + defined + definer + defines + defining + definite + definitely + definiteness + definition + definitional + definitions + definitive + definitively + deflate + deflated + deflater + deflating + deflation + deflationary + deflect + deflected + deflection + deflective + deflector + deflower + defocus + defocusses + defoliant + defoliate + defoliated + defoliating + defoliators + deforest + deforestation + deform + deformation + deformations + deformed + deformities + deformity + defraud + defraudation + defray + defrayal + defrayment + defrost + defrosted + defroster + deft + deftly + deftness + defunct + defy + defying + degas + degassing + degeneracy + degenerate + degenerated + degenerates + degenerating + degeneration + degenerative + degradable + degradation + degradations + degrade + degraded + degrader + degrades + degrading + degrease + degree + degrees + degum + degumming + dehiscence + dehiscent + dehumanization + dehumanize + dehumanized + dehumanizing + dehumidified + dehumidifier + dehumidify + dehumidifying + dehydrate + dehydrated + dehydrating + dehydration + dehydrator + deification + deified + deify + deifying + deign + deigned + deigning + deigns + deionized + deism + deist + deities + deity + deja + deject + dejected + dejectedly + dejectedness + dejection + Del + Delaney + Delano + Delaware + delaware + delay + delayed + delaying + delays + delectable + delectably + delectate + delectation + delectible + delegable + delegate + delegated + delegates + delegating + delegation + delegations + delete + deleted + deleter + deleterious + deletes + deleting + deletion + deletions + Delft + delftware + Delhi + delhi + deli + Delia + deliberate + deliberated + deliberately + deliberateness + deliberates + deliberating + deliberation + deliberations + deliberative + deliberator + deliberators + delicacies + delicacy + delicate + delicately + delicateness + delicatessen + delicious + deliciously + deliciousness + delicti + delight + delighted + delightedly + delightful + delightfully + delightfulness + delighting + delights + Delilah + delim + delimit + delimitation + delimited + delimiter + delimiters + delimiting + delimits + delineament + delineate + delineated + delineates + delineating + delineation + delineator + delinquencies + delinquency + delinquent + delinquently + deliquesce + deliquesced + deliquescence + deliquescent + deliquescing + deliria + delirious + deliriously + delirium + deliriums + deliver + deliverable + deliverables + deliverance + delivered + deliverer + deliverers + deliveries + delivering + delivers + delivery + dell + Della + dells + Delmarva + delouse + deloused + delousing + Delphi + Delphic + delphine + delphinium + Delphinus + delta + deltas + deltoid + delude + deluded + deludes + deluding + deluge + deluged + deluges + deluging + delusion + delusions + delusive + delusory + deluxe + delve + delved + delver + delves + delving + demagnetize + demagnetized + demagnetizing + demagnify + demagog + demagogic + demagogue + demagoguery + demagogy + demand + demanded + demander + demanding + demandingly + demands + demarcate + demarcation + demark + demarkation + demean + demeanor + demeanour + demented + dementedly + dementia + demerit + demesne + demigod + demijohn + demilitarization + demilitarize + demilitarized + demilitarizing + demimonde + demiparadise + demiscible + demise + demised + demising + demit + demitasse + demitted + demitting + demo + demobilization + demobilize + demobilized + demobilizing + democracies + democracy + democrat + democratic + democratically + democratize + democratized + democratizing + democrats + demodulate + demodulation + demodulator + demographer + demographers + demographic + demography + demolish + demolished + demolishes + demolishment + demolition + demon + demonetize + demonetized + demonetizing + demoniac + demoniacal + demonic + demonology + demons + demonstrable + demonstrably + demonstrate + demonstrated + demonstrates + demonstrating + demonstration + demonstrations + demonstrative + demonstratively + demonstrativeness + demonstrator + demonstrators + demoralization + demoralize + demoralized + demoralizes + demoralizing + demote + demoted + demotic + demoting + demotion + demountable + Dempsey + demulcent + demultiplex + demultiplexed + demultiplexer + demultiplexers + demultiplexing + demur + demure + demurely + demureness + demurrage + demurral + demurred + demurrer + demurring + demystify + demythologize + den + denarinarii + denarius + denature + denatured + denaturing + dendrite + dendritic + dendroctonus + Deneb + Denebola + deniable + denial + denials + denied + denier + denies + denigrate + denigrated + denigrates + denigrating + denigration + denigrator + denim + denizen + Denmark + denmark + Dennis + Denny + denominate + denominated + denominating + denomination + denominational + denominations + denominator + denominators + denotable + denotation + denotational + denotationally + denotations + denotative + denote + denoted + denotes + denoting + denouement + denounce + denounced + denouncement + denouncer + denounces + denouncing + dens + dense + densely + denseness + denser + densest + densities + densitometer + density + dent + dental + dentally + dentate + dentation + dented + dentifrice + dentin + dentine + denting + dentist + dentistry + dentists + dentition + Denton + dents + denture + denudation + denude + denuded + denuding + denumerable + denunciate + denunciation + Denver + denver + deny + denyer + denying + deodorant + deodorize + deodorized + deodorizer + deodorizing + deoxyribonucleic + deoxyribose + depart + departed + departing + department + departmental + departmentalization + departmentalize + departmentalized + departmentalizing + departmentally + departments + departs + departure + departures + depend + dependability + dependable + dependably + dependant + dependants + depended + dependence + dependencies + dependency + dependent + dependently + dependents + depending + depends + depersonalization + depersonalize + depersonalized + depersonalizing + dephased + dephasing + depict + depicted + depicting + depiction + depictor + depicts + depilatories + depilatory + deplane + deplaned + deplaning + depletable + deplete + depleteable + depleted + depletes + depleting + depletion + depletions + deplorable + deplorably + deplore + deplored + deplores + deploring + deploy + deployed + deploying + deployment + deployments + deploys + depolarization + depolarize + depolarized + depolarizes + depolarizing + deponent + depopulate + depopulated + depopulating + depopulation + deport + deportation + deportee + deportment + depose + deposed + deposes + deposing + deposit + depositaries + depositary + deposited + depositing + deposition + depositions + depositor + depositories + depositors + depository + deposits + depot + depots + deprave + depraved + depraving + depravities + depravity + deprecate + deprecated + deprecating + deprecatingly + deprecation + deprecative + deprecatory + depreciable + depreciate + depreciated + depreciates + depreciating + depreciation + depredation + depress + depressant + depressed + depresses + depressible + depressing + depressingly + depression + depressions + depressive + depressor + deprivation + deprivations + deprive + deprived + deprives + depriving + deprocedured + deproceduring + dept + depth + depths + deputation + depute + deputed + deputies + deputing + deputize + deputized + deputizing + deputy + dequeue + dequeued + dequeues + dequeuing + derail + derailed + derailing + derailleur + derailment + derails + derange + deranged + derangement + deranging + derate + derby + Derbyshire + dereference + dereferenced + dereferences + dereferencing + deregulate + deregulated + deregulation + Derek + derelict + dereliction + deride + derided + deriding + derision + derisive + derisively + derisory + derivable + derivate + derivation + derivations + derivative + derivatives + derive + derived + derives + deriving + derma + dermal + dermatitis + dermatologist + dermatology + dermic + dermis + derogate + derogated + derogating + derogation + derogative + derogatory + derrick + derriere + derringer + dervish + Des + desalinate + desalinated + desalinating + desalination + desalinization + descant + Descartes + descend + descendant + descendants + descended + descendent + descendents + descender + descenders + descending + descends + descent + descents + describable + describe + described + describer + describes + describing + descried + description + descriptions + descriptive + descriptively + descriptiveness + descriptives + descriptor + descriptors + descry + descrying + desecrate + desecrated + desecrater + desecrating + desecration + desecrator + desegregate + desegregated + desegregating + desegregation + desensitize + desensitized + desensitizing + desert + deserted + deserter + deserters + deserting + desertion + desertions + deserts + deserve + deserved + deservedly + deserves + deserving + deservingly + deservings + deshabille + desiccate + desiccated + desiccating + desiccation + desiderata + desideratum + design + designate + designated + designates + designating + designation + designations + designator + designators + designed + designedly + designer + designers + designing + designs + desirability + desirable + desirably + desire + desireable + desired + desires + desiring + desirous + desist + desk + desks + Desmond + desolate + desolated + desolately + desolater + desolating + desolation + desolations + desorption + despair + despaired + despairing + despairingly + despairs + despatch + despatched + desperado + desperadoes + desperados + desperate + desperately + desperation + despicable + despicably + despise + despised + despises + despising + despite + despoil + despoiler + despoilment + despoliation + despond + despondence + despondency + despondent + despot + despotic + despotically + despotism + despots + dessert + desserts + dessicate + destabilize + destabilized + destabilizing + destained + destinate + destination + destinations + destine + destined + destinies + destining + destiny + destitute + destitution + destroy + destroyed + destroyer + destroyers + destroying + destroys + destruct + destructibility + destructible + destruction + destructions + destructive + destructively + destructiveness + destructor + destry + destuff + destuffing + destuffs + desuetude + desultorily + desultoriness + desultory + desynchronize + detach + detachable + detached + detacher + detaches + detaching + detachment + detachments + detachs + detail + detailed + detailing + details + detain + detained + detainer + detaining + detainment + detains + detect + detectable + detectably + detected + detectible + detecting + detection + detections + detective + detectives + detector + detectors + detects + detent + detente + detention + deter + detergent + deteriorate + deteriorated + deteriorates + deteriorating + deterioration + determinable + determinacy + determinant + determinants + determinate + determinately + determination + determinations + determinative + determine + determined + determiner + determiners + determines + determining + determinism + determinist + deterministic + deterministically + deterred + deterrence + deterrent + deterring + detest + detestable + detestably + detestation + detested + dethrone + dethroned + dethroning + detonable + detonate + detonated + detonating + detonation + detonator + detour + detoxify + detoxifying + detract + detracted + detraction + detractor + detractors + detracts + detriment + detrimental + detrital + detritus + Detroit + detroit + deuce + deuced + deucedly + deuniting + deus + deuterate + deuterium + deuteron + devaluate + devaluated + devaluating + devaluation + devalue + devalued + devaluing + devastate + devastated + devastates + devastating + devastatingly + devastation + devchar + develop + developable + developed + developer + developers + developing + development + developmental + developments + develops + deviance + deviancy + deviant + deviants + deviate + deviated + deviates + deviating + deviation + deviations + deviator + device + devices + devide + devil + deviled + devilfish + deviling + devilish + devilishly + devilishness + devilled + devilling + devilment + devilries + devilry + devils + deviltries + deviltry + devious + deviously + deviousness + devisal + devise + devised + devisee + deviser + devises + devising + devisings + devitalization + devitalize + devitalized + devitalizing + devoid + devolve + devolved + devolving + Devon + Devonshire + devote + devoted + devotedly + devotee + devotees + devotes + devoting + devotion + devotional + devotions + devour + devoured + devourer + devours + devout + devoutly + devoutness + dew + dewar + dewberries + dewberry + dewclaw + dewdrop + dewdrops + Dewey + dewier + dewiest + Dewitt + dewlap + dewy + dexter + dexterity + dexterous + dexterously + dextrin + dextrose + dextrous + dey + dfault + Dhabi + dharma + diabase + diabetes + diabetic + diabolic + diabolical + diabolically + diachronic + diaconal + diaconate + diacritic + diacritical + diadem + diadic + diagnosable + diagnose + diagnosed + diagnoses + diagnosing + diagnosis + diagnostic + diagnostician + diagnostics + diagonal + diagonally + diagonals + diagram + diagrammable + diagrammatic + diagrammatically + diagrammed + diagrammer + diagrammers + diagramming + diagrams + dial + dialect + dialectal + dialectic + dialectical + dialectician + dialects + dialed + dialer + dialers + dialing + dialog + dialogs + dialogue + dialogues + dials + dialup + dialyses + dialysis + dialyze + dialyzed + dialyzer + dialyzing + diamagnetic + diamagnetism + diameter + diameters + diametric + diametrical + diametrically + diamond + diamondback + diamonds + Diana + Diane + Dianne + diapason + diapause + diaper + diapers + diaphanous + diaphragm + diaphragms + diaries + diarist + diarrhea + diarrhoea + diary + diastase + diastole + diastolic + diathermic + diathermy + diathesis + diatom + diatomaceous + diatomic + diatoms + diatonic + diatribe + diatribes + dibasic + dibble + dice + diced + dichloride + dichloromethane + dichondra + dichotomies + dichotomize + dichotomous + dichotomy + dichromatic + dicing + dick + dickcissel + dickens + dicker + Dickerson + dickey + dickeys + dickies + Dickinson + Dickson + dicky + dicotyledon + dicotyledonous + dicrostonyx + dict + dicta + dictate + dictated + dictates + dictating + dictation + dictations + dictator + dictatorial + dictators + dictatorship + diction + dictionaries + dictionary + dictum + dictums + did + didactic + didactical + didactics + diddle + diddled + diddler + diddling + didn + didn't + Dido + didoes + didos + didst + didymium + die + Diebold + died + Diego + diego + diehard + dieing + dieldrin + dielectric + dielectrics + diem + diereses + dieresis + dies + diesel + diesinker + diesinking + diet + dietary + dieter + dieters + dietetic + dietetics + diethylstilbestrol + dietician + dieties + dietitian + dietitians + Dietrich + diets + diety + Dietz + diff + diffeomorphic + diffeomorphism + differ + differed + differen + difference + differenced + differences + differencing + different + differentiable + differential + differentially + differentials + differentiate + differentiated + differentiates + differentiating + differentiation + differentiations + differentiators + differently + differer + differers + differing + differs + difficult + difficulties + difficultly + difficulty + diffidence + diffident + diffidently + diffract + diffracted + diffraction + diffractive + diffractometer + diffuse + diffused + diffusely + diffuseness + diffuser + diffusers + diffuses + diffusible + diffusing + diffusion + diffusions + diffusive + difluoride + dig + digest + digested + digestible + digesting + digestion + digestive + digests + digged + digger + diggers + digging + diggings + digit + digital + digitalis + digitally + digitate + digitization + digitize + digitized + digitizer + digitizes + digitizing + digits + dignified + dignifiedly + dignify + dignifying + dignitaries + dignitary + dignities + dignity + digram + digraph + digress + digressed + digresses + digressing + digression + digressions + digressive + digs + dihedral + dike + diked + dikes + diking + dilapidate + dilapidated + dilapidation + dilatation + dilate + dilated + dilates + dilating + dilation + dilator + dilatoriness + dilatory + dilemma + dilemmas + dilettante + dilettantes + dilettanti + dilettantish + dilettantism + diligence + diligent + diligently + dill + dillies + Dillon + dilly + dillydallied + dillydally + dillydallying + dilogarithm + diluent + dilute + diluted + dilutes + diluting + dilution + diluvial + diluvian + dim + dime + dimension + dimensional + dimensionality + dimensionally + dimensioned + dimensioning + dimensionless + dimensions + dimes + dimethyl + diminish + diminished + diminishes + diminishing + diminuendo + diminution + diminutive + dimities + dimity + dimly + dimmed + dimmer + dimmers + dimmest + dimming + dimness + dimple + dimpled + dimpling + dimply + dims + dimwit + dimwitted + din + Dinah + dine + dined + diner + diners + dines + dinette + ding + dinghies + dinghy + dingier + dingiest + dinginess + dingle + dingo + dingoes + dingus + dingy + dining + dinitrophenylhydrazine + dinkey + dinkeys + dinkier + dinkies + dinkiest + dinky + dinned + dinner + dinners + dinnertime + dinnerware + dinning + dinosaur + dint + diocesan + diocese + diode + diodes + dioecious + Dionysian + Dionysus + Diophantine + diophantine + diopter + diorama + diorite + dioxide + dioxides + dip + diphasic + diphtheria + diphthong + diploid + diploidy + diploma + diplomacies + diplomacy + diplomas + diplomat + diplomatic + diplomatically + diplomats + dipole + dipoles + dipped + dipper + dippers + dipping + dippings + dips + dipsomania + dipsomaniac + dipterous + Dirac + dire + direcly + direct + directed + directing + direction + directional + directionality + directionally + directions + directive + directives + directly + directness + director + directorate + directories + directors + directorship + directory + directrices + directrix + directs + direful + direr + direst + dirge + dirges + Dirichlet + dirigible + dirk + dirndl + dirt + dirtied + dirtier + dirtiest + dirtily + dirtiness + dirts + dirty + dirtying + Dis + disabilities + disability + disable + disabled + disablement + disabler + disablers + disables + disabling + disabuse + disabused + disabusing + disaccharide + disadvantage + disadvantaged + disadvantageous + disadvantages + disadvantaging + disaffect + disaffection + disaggregate + disaggregated + disaggregation + disagree + disagreeable + disagreeableness + disagreeably + disagreed + disagreeing + disagreement + disagreements + disagrees + disagreing + disallow + disallowed + disallowing + disallows + disambiguate + disambiguated + disambiguates + disambiguating + disambiguation + disambiguations + disappear + disappearance + disappearances + disappeared + disappearing + disappears + disappoint + disappointed + disappointing + disappointment + disappointments + disappoints + disapprobation + disapproval + disapprove + disapproved + disapproves + disapproving + disapprovingly + disarm + disarmament + disarmed + disarming + disarms + disarrange + disarranged + disarrangement + disarranging + disarray + disassemble + disassembled + disassembles + disassembling + disassembly + disassociable + disassociate + disassociated + disassociating + disaster + disasters + disastrous + disastrously + disavow + disavowal + disband + disbanded + disbanding + disbandment + disbands + disbar + disbarment + disbarred + disbarring + disbelief + disbelieve + disbelieved + disbelieves + disbelieving + disburden + disburse + disbursed + disbursement + disbursements + disburser + disburses + disbursing + disc + discard + discarded + discarding + discards + discern + discernable + discerned + discernibility + discernible + discernibly + discerning + discerningly + discernment + discerns + discharge + dischargeable + discharged + discharger + discharges + discharging + disci + disciple + disciples + discipleship + disciplinarian + disciplinary + discipline + disciplined + discipliner + disciplines + disciplining + disclaim + disclaimed + disclaimer + disclaimers + disclaims + disclose + disclosed + discloses + disclosing + disclosure + disclosures + discoid + discolor + discoloration + discolored + discoloured + discomfit + discomfiture + discomfort + discommode + discommoded + discommoding + discompose + discomposed + discomposing + discomposure + disconcert + disconcerting + disconcertingly + disconnect + disconnected + disconnectedly + disconnecting + disconnection + disconnects + disconsolate + discontent + discontented + discontentedly + discontentment + discontinuance + discontinuation + discontinue + discontinued + discontinues + discontinuing + discontinuities + discontinuity + discontinuous + discontinuously + discord + discordance + discordancy + discordant + discordantly + discount + discountable + discounted + discountenance + discountenanced + discountenancing + discounting + discounts + discourage + discouraged + discouragement + discourages + discouraging + discouragingly + discourse + discoursed + discourses + discoursing + discourteous + discourteously + discourtesies + discourtesy + discover + discoverable + discovered + discoverer + discoverers + discoveries + discovering + discovers + discovery + discredit + discreditable + discreditably + discredited + discreet + discreetly + discreetness + discrepancies + discrepancy + discrepant + discrepantly + discrepencies + discrete + discretely + discreteness + discretion + discretionary + discriminable + discriminant + discriminate + discriminated + discriminates + discriminating + discrimination + discriminative + discriminatory + discs + discursive + discursively + discursiveness + discus + discuses + discuss + discussant + discussed + discusses + discussible + discussing + discussion + discussions + disdain + disdainful + disdaining + disdains + disease + diseased + diseases + diseasing + disembark + disembarkation + disembodied + disembodiment + disembody + disembodying + disembowel + disemboweled + disemboweling + disembowelled + disembowelling + disembowelment + disenchant + disenchantment + disencumber + disenfranchise + disengage + disengaged + disengagement + disengages + disengaging + disentangle + disentangled + disentanglement + disentangling + disestablish + disestablishment + disesteem + disfavor + disfiguration + disfigure + disfigured + disfigurement + disfigures + disfiguring + disfranchise + disfranchised + disfranchisement + disfranchising + disfunctions + disgorge + disgorging + disgrace + disgraced + disgraceful + disgracefully + disgraces + disgracing + disgruntle + disgruntled + disgruntling + disguise + disguised + disguises + disguising + disgust + disgusted + disgustedly + disgustful + disgusting + disgustingly + disgusts + dish + dishabille + disharmony + dishcloth + dishearten + disheartening + disheartenment + dished + dishes + dishevel + disheveled + disheveling + dishevelled + dishevelling + dishevelment + dishing + dishonest + dishonesties + dishonestly + dishonesty + dishonor + dishonorable + dishonorably + dishonored + dishonoring + dishonors + dishpan + dishwasher + dishwashers + dishwashing + dishwater + disillusion + disillusioned + disillusioning + disillusionment + disillusionments + disinclination + disincline + disinclined + disinclining + disinfect + disinfectant + disinfection + disingenuous + disinherit + disinheritance + disintegrate + disintegrated + disintegrating + disintegration + disintegrative + disintegrator + disinter + disinterested + disinterestedly + disinterestedness + disinterment + disinterred + disinterring + disjoin + disjoint + disjointed + disjointedly + disjointly + disjointness + disjunct + disjunction + disjunctions + disjunctive + disjunctively + disjuncts + disk + diskette + diskettes + diskless + disks + dislikable + dislike + dislikeable + disliked + dislikes + disliking + dislocate + dislocated + dislocates + dislocating + dislocation + dislocations + dislodge + dislodged + dislodging + dislodgment + disloyal + disloyally + disloyalties + disloyalty + dismal + dismally + dismantle + dismantled + dismantlement + dismantling + dismay + dismayed + dismaying + dismayingly + dismember + dismembered + dismemberment + dismembers + dismiss + dismissal + dismissals + dismissed + dismisser + dismissers + dismisses + dismissing + dismount + dismounted + dismounting + dismounts + Disney + Disneyland + disobedience + disobedient + disobediently + disobey + disobeyed + disobeying + disobeys + disoblige + disobliged + disobliging + disorder + disordered + disorderliness + disorderly + disorders + disorganization + disorganize + disorganized + disorganizing + disorient + disorientate + disorientated + disorientating + disorientation + disown + disowned + disowning + disowns + disparage + disparaged + disparagement + disparaging + disparate + disparities + disparity + dispassion + dispassionate + dispassionately + dispatch + dispatched + dispatcher + dispatchers + dispatches + dispatching + dispel + dispell + dispelled + dispelling + dispells + dispels + dispensable + dispensaries + dispensary + dispensate + dispensation + dispensational + dispensatories + dispensatory + dispense + dispensed + dispenser + dispensers + dispenses + dispensing + dispersal + dispersals + disperse + dispersed + disperser + dispersers + disperses + dispersible + dispersing + dispersion + dispersions + dispersive + dispirit + dispirited + dispiritedly + displace + displaced + displacement + displacements + displaces + displacing + display + displayable + displayed + displayer + displaying + displays + displease + displeased + displeases + displeasing + displeasure + disport + disposable + disposal + disposals + dispose + disposed + disposer + disposes + disposing + disposition + dispositional + dispositions + dispossess + dispossession + dispossessor + dispraise + dispraised + dispraising + disproof + disproportion + disproportional + disproportionally + disproportionate + disproportionately + disprovable + disprove + disproved + disproves + disproving + disputable + disputant + disputation + disputatious + disputatiously + dispute + disputed + disputer + disputers + disputes + disputing + disqualification + disqualified + disqualifies + disqualify + disqualifying + disquiet + disquieting + disquietude + disquisition + disregard + disregarded + disregardful + disregarding + disregards + disrepair + disreputable + disreputably + disrepute + disrespect + disrespectful + disrespectfully + disrobe + disrobed + disrober + disrobing + disrupt + disrupted + disrupting + disruption + disruptions + disruptive + disrupts + dissatisfaction + dissatisfactions + dissatisfied + dissatisfies + dissatisfy + dissatisfying + dissatisfyingly + dissect + dissected + dissecting + dissection + dissector + dissects + dissemblance + dissemble + dissembled + dissembler + dissembling + disseminate + disseminated + disseminates + disseminating + dissemination + disseminator + dissension + dissensions + dissent + dissented + dissenter + dissenters + dissentient + dissenting + dissents + dissertation + dissertations + disservice + dissever + dissidence + dissident + dissidents + dissimilar + dissimilarities + dissimilarity + dissimilarly + dissimilitude + dissimulate + dissimulated + dissimulating + dissimulation + dissimulator + dissipate + dissipated + dissipater + dissipates + dissipating + dissipation + dissipator + dissociate + dissociated + dissociates + dissociating + dissociation + dissolubility + dissoluble + dissolute + dissolutely + dissoluteness + dissolution + dissolutions + dissolvable + dissolve + dissolved + dissolver + dissolves + dissolving + dissonance + dissonant + dissonantly + dissuade + dissuaded + dissuading + dissuasion + dissuasive + distaff + distal + distally + distance + distanced + distances + distancing + distant + distantly + distaste + distasteful + distastefully + distastefulness + distastes + distemper + distend + distensible + distension + distention + distich + distil + distill + distillate + distillation + distillations + distilled + distiller + distilleries + distillers + distillery + distilling + distills + distinct + distinction + distinctions + distinctive + distinctively + distinctiveness + distinctly + distinctness + distinguish + distinguishable + distinguishably + distinguished + distinguishes + distinguishing + distort + distorted + distorter + distorting + distortion + distortions + distorts + distract + distracted + distracting + distraction + distractions + distracts + distrait + distraught + distress + distressed + distresses + distressful + distressing + distributable + distribute + distributed + distributes + distributing + distribution + distributional + distributions + distributive + distributively + distributivity + distributor + distributors + district + districts + distritbute + distritbuted + distritbutes + distritbuting + distrust + distrusted + distrustful + disturb + disturbance + disturbances + disturbed + disturber + disturbing + disturbingly + disturbs + disulfide + disunion + disunite + disunited + disuniting + disunity + disuse + disyllable + ditch + ditches + dither + dithyramb + dithyrambic + ditties + ditto + dittoed + dittoing + dittos + ditty + diuretic + diurnal + diurnally + diva + divalent + divan + divans + divas + dive + divebomb + dived + diver + diverge + diverged + divergence + divergences + divergent + diverges + diverging + divers + diverse + diversely + diverseness + diversification + diversified + diversifies + diversify + diversifying + diversion + diversionary + diversions + diversities + diversity + divert + diverted + diverting + diverts + dives + divest + divested + divesting + divestiture + divests + divide + divided + dividend + dividends + divider + dividers + divides + dividing + divination + divine + divined + divinely + diviner + diving + divining + divinities + divinity + divisibility + divisible + division + divisional + divisions + divisive + divisor + divisors + divorce + divorced + divorcee + divorcement + divorces + divorcing + divot + divulge + divulged + divulgence + divulger + divulges + divulging + divvied + divvy + divvying + Dixie + dixieland + Dixon + dizzied + dizzier + dizziest + dizzily + dizziness + dizzy + dizzying + Djakarta + DNA + Dnieper + do + doable + Dobbin + Dobbs + doberman + dobson + dobzhansky + docile + docilely + docility + dock + dockage + docked + docket + docks + dockside + dockyard + doctor + doctoral + doctorate + doctorates + doctored + doctoring + doctors + doctrinaire + doctrinal + doctrine + doctrines + document + documental + documentaries + documentary + documentation + documentations + documented + documenter + documenters + documenting + documentor + documents + DOD + Dodd + dodder + doddering + dodecahedra + dodecahedral + dodecahedron + dodge + dodged + dodger + dodgers + dodging + dodo + dodoes + dodos + Dodson + doe + doer + doers + does + doeskin + doesn + doesn't + doff + dog + dogbane + dogberry + dogcart + Doge + dogfight + dogfish + dogged + doggedly + doggedness + doggerel + doggie + doggier + doggies + doggiest + dogging + doggone + doggoned + doggoning + doggy + doghouse + dogie + dogies + dogleg + dogma + dogmas + dogmata + dogmatic + dogmatical + dogmatically + dogmatism + dogmatist + dogmatize + dogmatized + dogmatizing + dogs + dogtooth + dogtrot + dogwatch + dogwood + dogy + Doherty + doilies + doily + doing + doings + Dolan + dolce + doldrum + doldrums + dole + doled + doleful + dolefully + dolefulness + doles + doling + doll + dollar + dollars + dollies + dollop + dolls + dolly + dolmen + dolomite + dolomitic + dolor + Dolores + dolorous + dolorously + dolphin + dolphins + dolt + doltish + dolts + domain + domains + dome + domed + Domenico + domes + Domesday + domestic + domestically + domesticate + domesticated + domesticates + domesticating + domestication + domesticities + domesticity + domicile + domiciled + domiciling + dominance + dominant + dominantly + dominate + dominated + dominates + dominating + domination + dominations + domineer + domineering + doming + Domingo + Dominic + Dominican + Dominick + dominie + dominion + Dominique + domino + dominoes + dominos + don + don't + Donahue + Donald + Donaldson + donate + donated + donates + donating + donation + donations + donator + done + Doneck + donjon + donkey + donkeys + Donna + donned + Donnelly + Donner + donnybrook + donor + donors + Donovan + dons + doodad + doodle + doodlebug + doodled + doodler + doodling + Dooley + Doolittle + doom + doomed + dooming + dooms + doomsday + door + doorbell + doorkeep + doorkeeper + doorknob + doorman + doormat + doormen + doornail + doors + doorstep + doorsteps + doorway + doorways + dooryard + dopant + dopants + dope + doped + doper + dopers + dopes + dopey + dopier + dopiest + dopiness + doping + Doppler + dopy + Dora + Dorado + Dorcas + Dorchester + Doreen + Doria + Doric + dories + Doris + dorm + dormancy + dormant + dormer + dormice + dormitories + dormitory + dormouse + Dorothea + Dorothy + dorsal + dorsally + Dorset + Dortmund + dory + dos + dosage + dose + dosed + doses + dosimeter + dosing + dossier + dossiers + dost + Dostoevsky + dot + dotage + dotard + dote + doted + dotes + doth + doting + dotingly + dots + dotted + dottier + dottiest + dotting + dotty + double + doubled + Doubleday + doubleheader + doubleprecision + doubler + doublers + doubles + doublet + doubleton + doublets + doubleword + doublewords + doubling + doubloon + doubly + doubt + doubtable + doubted + doubter + doubters + doubtful + doubtfully + doubtfulness + doubting + doubtingly + doubtless + doubtlessly + doubts + douce + douche + douched + douching + Doug + dough + doughboy + Dougherty + doughier + doughiest + doughiness + doughnut + doughnuts + doughtier + doughtiest + doughtily + doughtiness + doughty + doughy + dougl + Douglas + Douglass + dour + dourly + dourness + douse + doused + dousing + dove + dovecot + dovecote + dovekie + dover + doves + dovetail + Dow + dowager + dowdier + dowdiest + dowdily + dowdiness + dowdy + dowel + doweled + doweling + dowelled + dowelling + dower + dowitcher + Dowling + down + downbeat + downcast + downdraft + downed + downers + Downey + downfall + downfallen + downgrade + downgraded + downgrades + downgrading + downhearted + downhill + downier + downiest + downiness + downing + downlink + downlinks + download + downloaded + downloading + downloads + downplay + downplayed + downplaying + downplays + downpour + downrange + downright + downs + downside + downslope + downspout + downstage + downstairs + downstate + downstream + downswing + downtime + downtown + downtowns + downtrend + downtrodden + downturn + downward + downwards + downwind + downy + dowries + dowry + dowse + dowsed + dowser + dowsing + doxologies + doxology + Doyle + doze + dozed + dozen + dozens + dozenth + dozes + dozing + Dr + drab + drabber + drabbest + drabness + drachm + drachma + drachmae + drachmai + drachmas + Draco + draconian + draft + drafted + draftee + drafter + drafters + draftier + draftiest + draftily + draftiness + drafting + drafts + draftsman + draftsmanship + draftsmen + draftsperson + drafty + drag + dragged + draggier + draggiest + dragging + draggle + draggled + draggling + draggy + dragnet + dragoman + dragomans + dragomen + dragon + dragonflies + dragonfly + dragonhead + dragons + dragoon + dragooned + dragoons + drags + drain + drainage + drained + drainer + draining + drainpipe + drains + drake + dram + drama + dramas + dramatic + dramatically + dramatics + dramatist + dramatists + dramatization + dramatize + dramatized + dramatizing + dramaturgy + drank + drape + draped + draper + draperies + drapers + drapery + drapes + draping + drastic + drastically + draught + draughtier + draughtiest + draughts + draughty + draw + drawback + drawbacks + drawbridge + drawbridges + drawee + drawer + drawers + drawing + drawings + drawknife + drawknives + drawl + drawled + drawler + drawling + drawlingly + drawls + drawn + drawnly + drawnness + drawnwork + draws + drawshave + drawstring + dray + drayage + drayman + draymen + dread + dreaded + dreadful + dreadfully + dreadfulness + dreading + dreadnaught + dreadnought + dreads + dream + dreamboat + dreamed + dreamer + dreamers + dreamier + dreamiest + dreamily + dreaminess + dreaming + dreamless + dreamlike + dreams + dreamt + dreamy + drear + drearier + dreariest + drearily + dreariness + dreary + dredge + dredged + dredging + dreg + dreggier + dreggiest + dreggy + dregs + drench + drenched + drenches + drenching + dress + dressage + dressed + dresser + dressers + dresses + dressier + dressiest + dressiness + dressing + dressings + dressmake + dressmaker + dressmakers + dressmaking + dressy + drew + Drexel + Dreyfuss + drib + dribble + dribbled + dribbling + driblet + dried + drier + driers + dries + driest + drift + driftage + drifted + drifter + drifters + drifting + drifts + driftwood + drill + drilled + driller + drilling + drillmaster + drills + drily + drink + drinkable + drinker + drinkers + drinking + drinks + drip + dripped + dripping + drippings + drippy + drips + Driscoll + drive + drivel + driveled + driveling + drivelled + drivelling + driven + driver + drivers + drives + driveway + driveways + driving + drizzle + drizzled + drizzling + drizzly + droll + drolleries + drollery + drolly + dromedaries + dromedary + drone + droned + drones + droning + drool + droop + drooped + droopier + droopiest + drooping + droops + droopy + drop + drophead + droplet + dropout + dropped + dropper + droppers + dropping + droppings + drops + dropsical + dropsy + droshkies + droshky + droskies + drosky + drosophila + drosophilae + dross + drossier + drossiest + drossy + drought + droughts + drouth + drove + drover + drovers + droves + drown + drowned + drowning + drownings + drowns + drowse + drowsed + drowsier + drowsiest + drowsily + drowsiness + drowsing + drowsy + drub + drubbed + drubbing + drudge + drudged + drudgeries + drudgery + drudging + drug + drugged + drugging + druggist + druggists + drugs + drugstore + druid + druidic + druidical + drum + drumhead + drumlin + drummed + drummer + drummers + drumming + Drummond + drumread + drumreads + drums + drumstick + drunk + drunkard + drunkards + drunken + drunkenly + drunkenness + drunker + drunkly + drunks + drupaceous + drupe + drupelet + Drury + dry + dryad + Dryden + dryer + drying + dryly + dryness + drys + drywall + dsect + dsects + dsname + dsnames + dsp + dsr + dsri + dtset + du + dual + dualism + dualist + dualistic + dualities + duality + dually + Duane + dub + dubbed + dubbing + Dubhe + dubiety + dubious + dubiously + dubiousness + dubitable + Dublin + dublin + dubs + ducal + ducally + ducat + duchess + duchesses + duchies + duchy + duck + duckbill + ducked + duckier + duckiest + ducking + duckling + duckpins + ducks + duckweed + ducky + duct + ductile + ductility + ductless + ducts + ductwork + dud + dude + dudgeon + Dudley + duds + due + duel + dueled + dueler + dueling + duelist + duelled + dueller + duelling + duellist + duels + duenna + dues + duet + duets + duff + duffel + duffer + duffle + Duffy + dug + Dugan + dugong + dugout + dui + duke + dukedom + dukes + dulcet + dulcimer + dull + dullard + dulled + duller + dullest + dulling + dullness + dulls + dully + dulse + Duluth + duly + dum + Duma + dumb + dumbbell + dumbbells + dumber + dumbest + dumbfound + dumbly + dumbness + dumbwaiter + dumdum + dumfound + dummies + dummy + dump + dumped + dumper + dumpfile + dumpier + dumpiest + dumpily + dumpiness + dumping + dumpling + dumps + Dumpty + dumpy + dun + Dunbar + Duncan + dunce + dunces + dunderhead + dune + Dunedin + dunes + dung + dungaree + dungeon + dungeons + dunghill + dungier + dungiest + dungy + Dunham + dunk + Dunkirk + Dunlap + dunlin + Dunlop + Dunn + dunnage + dunned + dunning + duo + duodecimal + duodecimo + duodecimomos + duodedena + duodedenums + duodenal + duodenum + duopolist + duopoly + duos + dupe + duped + duping + duple + duplex + duplicable + duplicate + duplicated + duplicates + duplicating + duplication + duplications + duplicator + duplicators + duplicities + duplicity + DuPont + Duquesne + durabilities + durability + durable + durably + durance + Durango + duration + durations + Durer + duress + Durham + during + Durkee + Durkin + Durrell + durst + durum + Durward + Dusenberg + Dusenbury + dusk + duskier + duskiest + duskily + duskiness + dusky + Dusseldorf + dust + dustbin + dusted + duster + dusters + dustier + dustiest + dustily + dustiness + dusting + dustless + dustpan + dusts + dusty + Dutch + dutch + dutchess + Dutchman + Dutchmen + duteous + duteously + duteousness + dutiable + duties + dutiful + dutifully + dutifulness + Dutton + duty + duvetyn + duvetyne + dwarf + dwarfed + dwarfish + dwarfs + dwarves + dwell + dwelled + dweller + dwellers + dwelling + dwellings + dwells + dwelt + Dwight + dwindle + dwindled + dwindles + dwindling + Dwyer + dyad + dyadic + dybbuk + dye + dyed + dyeing + dyer + dyers + dyes + dyestuff + dying + Dyke + Dylan + dynamic + dynamically + dynamics + dynamism + dynamite + dynamited + dynamites + dynamiting + dynamo + dynamoelectric + dynamometer + dynamos + dynast + dynastic + dynasties + dynasty + dyne + dysenteric + dysentery + dyspepsia + dyspeptic + dysplasia + dysprosium + dystrophy + e + e'er + e's + e.g + each + Eagan + eager + eagerly + eagerness + eagle + eagles + eaglet + eagre + ealdorman + ear + earache + eardrop + eardrum + eared + earflap + earful + earing + earl + earlap + earldom + earlier + earliest + earliness + earls + early + earmark + earmarked + earmarking + earmarkings + earmarks + earmuffs + earn + earned + earner + earners + earnest + earnestly + earnestness + earning + earnings + earns + earphone + earplug + earring + earrings + ears + earshell + earshot + earsplitting + earstone + eartagged + earth + earthborn + earthbound + earthen + earthenware + earthier + earthiest + earthiness + earthlight + earthliness + earthling + earthly + earthman + earthmen + earthmover + earthmoving + earthnut + earthquake + earthquakes + earths + earthshaking + earthshattering + earthshine + earthstar + earthward + earthwards + earthwork + earthworm + earthworms + earthy + earwax + earwig + ease + eased + easeful + easel + easement + easements + eases + easier + easiest + easily + easiness + easing + east + eastbound + easter + easterly + eastern + easterner + easterners + easternmost + Eastland + Eastman + eastward + eastwardly + eastwards + Eastwood + easy + easygoing + eat + eatable + eaten + eater + eateries + eaters + eatery + eating + eatings + Eaton + eats + eave + eaves + eavesdrop + eavesdropped + eavesdropper + eavesdroppers + eavesdropping + eavesdrops + ebb + ebbing + ebbs + ebcasc + ebcd + ebcdic + Eben + ebon + ebonies + ebonite + ebonize + ebony + ebullience + ebulliency + ebullient + ebullition + eburnation + ecb + ecbolic + eccentric + eccentrically + eccentricities + eccentricity + eccentrics + ecchymosis + Eccles + ecclesia + ecclesiastic + ecclesiastical + ecclesiastically + ecclesiasticism + ecclesiology + eccrine + ecdysiast + ecdysis + echar + echelon + echevaria + echidna + echinate + echinococcus + echinoderm + echinoid + echinus + echnida + echo + echoed + echoes + echoic + echoing + echoism + echolalia + echolocation + echos + eclair + eclairissement + eclampsia + eclat + eclectic + eclectically + eclecticism + eclipse + eclipsed + eclipses + eclipsing + ecliptic + eclogite + eclogue + eclosion + eco + ecocidal + ecocide + Ecole + ecologic + ecological + ecologically + ecologist + ecologists + ecology + ecomomist + econometric + Econometrica + econometrics + economic + economical + economically + economics + economies + economist + economists + economize + economized + economizer + economizers + economizes + economizing + economy + ecospecies + ecosystem + ecosystems + ecotone + ecotype + ecraseur + ecru + ecstasies + ecstasy + ecstatic + ecstatically + ectoblast + ectocommensal + ectoderm + ectogeneous + ectomere + ectomorph + ectomorphic + ectoparasite + ectopia + ectopic + ectoplasm + ectoproct + ectosarc + ectype + Ecuador + ecuador + ecumenic + ecumenical + ecumenicalism + ecumenically + ecumenicism + ecumenism + ecumenist + eczema + Ed + edacious + edacity + edaphic + Eddie + eddied + eddies + eddo + eddy + eddying + edelweiss + edema + edematous + Eden + edentate + Edgar + edge + edged + edger + Edgerton + edges + edgeways + edgewise + edgier + edgiest + edgily + edginess + edging + edgy + edibility + edible + edibles + edict + edicts + edification + edifice + edifices + edified + edifier + edify + edifying + Edinburgh + Edison + edit + editchar + edited + Edith + editing + edition + editions + editor + editorial + editorialize + editorialized + editorializing + editorially + editorials + editors + editorship + edits + Edmonds + Edmondson + Edmonton + Edmund + Edna + edplot + EDT + Eduardo + educability + educable + educate + educated + educates + educating + education + educational + educationally + educations + educative + educator + educators + educe + educed + educing + Edward + Edwardian + Edwardine + Edwin + Edwina + eel + eelgrass + eellike + eels + eely + EEOC + eerie + eerier + eeriest + eerily + eeriness + eery + efface + effaceable + effaced + effacement + effacing + effect + effected + effecting + effective + effectively + effectiveness + effector + effectors + effects + effectual + effectuality + effectually + effectuate + effectuated + effectuating + effectuation + effeminacy + effeminate + effeminately + efferent + effervesce + effervesced + effervescence + effervescent + effervescing + effete + effetely + effeteness + efficacious + efficaciously + efficaciousness + efficacy + efficiencies + efficiency + efficient + efficiently + Effie + effigies + effigy + effloresce + effloresced + efflorescence + efflorescent + efflorescing + effluence + effluent + effluvia + effluvial + effluvium + effluvivia + effluviviums + efford + effort + effortless + effortlessly + effortlessness + efforts + effronteries + effrontery + effulgence + effulgent + effuse + effused + effusing + effusion + effusive + effusively + effusiveness + efl + eft + egad + egalitarian + Egan + egg + eggbeater + egged + egghead + egging + eggnog + eggplant + eggroll + eggrolls + eggs + eggshell + egis + eglantine + ego + egocentric + egoism + egoist + egoistic + egoistical + egos + egotism + egotist + egotistic + egotistical + egregious + egregiously + egress + egret + egrid + Egypt + egypt + Egyptian + eh + Ehrlich + ehrman + eider + eiderdown + eidetic + eigenfunction + eigenspace + eigenstate + eigenvalue + eigenvalues + eigenvector + eigenvectors + eight + eighteen + eighteens + eighteenth + eightfold + eighth + eighthes + eighties + eightieth + eights + eighty + Eileen + Einstein + Einsteinian + einsteinium + Eire + eisenberg + Eisenhower + Eisner + either + ejaculate + ejaculated + ejaculates + ejaculating + ejaculation + ejaculations + ejaculatory + eject + ejectable + ejected + ejecting + ejection + ejections + ejector + ejects + eke + eked + ekes + eking + ekistics + Ekstrom + Ektachrome + el + elaborate + elaborated + elaborately + elaborateness + elaborates + elaborating + elaboration + elaborations + elaborators + Elaine + elan + elapse + elapsed + elapses + elapsing + elasmobranch + elastic + elastically + elasticity + elasticize + elasticized + elasticizing + elastomer + elate + elated + elating + elation + Elba + elbow + elbowing + elbowroom + elbows + elder + elderberries + elderberry + elderly + elders + eldest + Eldon + Eleanor + Eleazar + elect + elected + electing + election + electioneer + elections + elective + electives + elector + electoral + electorate + electors + Electra + electress + electret + electric + electrical + electrically + electricalness + electrican + electricans + electrician + electricians + electricity + electrification + electrified + electrifier + electrify + electrifying + electro + electrocardiogram + electrocardiograph + electrochemistry + electrocute + electrocuted + electrocutes + electrocuting + electrocution + electrocutions + electrode + electrodes + electrodynamic + electrodynamics + electroencephalogram + electroencephalograph + electroencephalography + electrographic + electrologist + electrolysis + electrolyte + electrolytes + electrolytic + electrolyze + electrolyzed + electrolyzing + electromagnet + electromagnetic + electromagnetism + electromechanical + electrometer + electromotive + electron + electronegative + electronic + electronically + electronics + electrons + electrophoresis + electrophoretic + electrophoretically + electrophorus + electroplate + electroplated + electroplating + electropositive + electroscope + electrostatic + electrostatically + electrostatics + electrotechnical + electrotherapy + electrotype + electrotyper + elects + eleemosynary + elegance + elegant + elegantly + elegiac + elegibility + elegies + elegy + elelments + element + elemental + elementals + elementary + elements + Elena + elephant + elephantiasis + elephantine + elephants + elevate + elevated + elevates + elevating + elevation + elevator + elevators + eleven + elevens + eleventh + elf + elfin + elfish + Elgin + Eli + elicit + elicitation + elicited + eliciting + elicits + elide + elided + eliding + eligibility + eligible + eligibly + Elijah + eliminate + eliminated + eliminates + eliminating + elimination + eliminations + eliminator + eliminators + Elinor + Eliot + Elisabeth + Elisha + elision + elisions + elite + elitism + elitist + elixir + Elizabeth + Elizabethan + elk + Elkhart + elks + ell + Ella + Ellen + Elliot + Elliott + ellipse + ellipses + ellipsis + ellipsoid + ellipsoidal + ellipsoids + ellipsometer + elliptic + elliptical + elliptically + Ellis + Ellison + Ellsworth + Ellwood + elm + Elmer + elmer + Elmhurst + Elmira + elms + Elmsford + elocution + elocutionist + Eloise + elongate + elongated + elongates + elongating + elongation + elongations + elope + eloped + elopement + eloping + eloquence + eloquent + eloquently + else + Elsevier + elsewhere + Elsie + Elsinore + eltime + Elton + eluate + elucidate + elucidated + elucidates + elucidating + elucidation + elude + eluded + eluder + eludes + eluding + elusion + elusive + elusively + elusiveness + elute + elution + elver + elves + elvish + Ely + Elysee + elysian + elytra + em + emaciate + emaciated + emaciating + emaciation + emamelware + emanate + emanated + emanates + emanating + emanation + emanations + emancipate + emancipated + emancipates + emancipating + emancipation + emancipator + Emanuel + emasculate + emasculated + emasculating + emasculation + emasculator + embalm + embalmed + embalmer + embank + embankment + embarcadero + embargo + embargoed + embargoes + embargoing + embark + embarkation + embarked + embarking + embarks + embarrased + embarrass + embarrassed + embarrasses + embarrassing + embarrassingly + embarrassment + embarrassments + embassies + embassy + embattle + embattled + embattling + embed + embeddable + embedded + embedder + embedding + embeds + embellish + embellished + embellisher + embellishes + embellishing + embellishment + embellishments + ember + embezzle + embezzled + embezzlement + embezzler + embezzling + embitter + embitterment + emblazon + emblazonment + emblem + emblematic + embodied + embodies + embodiment + embodiments + embody + embodying + embolden + emboli + embolism + embolus + embosom + emboss + embossment + embouchure + embower + embrace + embraceable + embraced + embraces + embracing + embrasure + embrittle + embrocate + embrocated + embrocating + embrocation + embroider + embroidered + embroiderer + embroideries + embroiders + embroidery + embroil + embroilment + embryo + embryologic + embryological + embryologist + embryology + embryonic + embryos + emcee + emceed + emceeing + emend + emendable + emendation + emerald + emeralds + emerge + emerged + emergence + emergencies + emergency + emergent + emergers + emerges + emerging + emeriti + emeritus + Emerson + Emery + emery + emetic + emf + emhpasizing + emigrant + emigrants + emigrate + emigrated + emigrates + emigrating + emigration + Emil + Emile + Emilio + Emily + eminence + eminences + eminent + eminently + emir + emirate + emissaries + emissary + emission + emissions + emissive + emissivity + emit + emits + emittance + emitted + emitter + emitting + emlen + emma + Emmanuel + Emmett + emollient + emolument + Emory + emote + emoted + emoting + emotion + emotional + emotionalism + emotionally + emotions + emp + empanel + empaneled + empaneling + empanelled + empanelling + empathetic + empathic + empathy + emperor + emperors + emphases + emphasis + emphasize + emphasized + emphasizes + emphasizing + emphatic + emphatically + emphysema + emphysematous + empire + empires + empiric + empirical + empirically + empiricism + empiricist + empiricists + emplace + emplacement + employ + employable + employe + employed + employee + employees + employer + employers + employing + employment + employments + employs + emporiria + empoririums + emporium + empower + empowered + empowering + empowerment + empowers + empress + emptied + emptier + empties + emptiest + emptily + emptiness + empty + emptying + empurple + empurpled + empurpling + empyreal + empyrean + emu + emulate + emulated + emulates + emulating + emulation + emulations + emulative + emulator + emulators + emulous + emulously + emulousness + emulsification + emulsified + emulsify + emulsifying + emulsion + emulsive + en + enable + enabled + enabler + enablers + enables + enabling + enact + enacted + enacting + enactive + enactment + enacts + enamel + enameled + enameler + enameling + enamelist + enamelled + enameller + enamelling + enamellist + enamels + enamor + encamp + encamped + encamping + encampment + encamps + encapsulate + encapsulated + encapsulates + encapsulating + encapsulation + encapsule + encapsuled + encapsuling + encased + encasing + encaustic + encephala + encephalitis + encephalon + enchainment + enchancement + enchant + enchanted + enchanter + enchanting + enchantingly + enchantment + enchantress + enchants + enchilada + encipher + enciphered + enciphering + enciphers + encircle + encircled + encirclement + encircles + encircling + enclave + enclaves + enclose + enclosed + encloses + enclosing + enclosure + enclosures + encode + encoded + encoder + encoders + encodes + encoding + encodings + encomia + encomiast + encomimia + encomimiums + encomium + encompass + encompassed + encompasses + encompassing + encompassment + encore + encounter + encountered + encountering + encounters + encourage + encouraged + encouragement + encouragements + encourages + encouraging + encouragingly + encroach + encroached + encroaches + encroaching + encroachment + encroachments + encrust + encrustation + encrypt + encrypted + encrypting + encryption + encryptions + encrypts + encumber + encumbered + encumbering + encumbers + encumbrance + encyclopaedia + encyclopaedias + encyclopaedic + encyclopedia + encyclopedias + encyclopedic + encyst + encystment + end + endanger + endangered + endangering + endangerment + endangers + endear + endeared + endearing + endearment + endears + endeavor + endeavored + endeavoring + endeavors + endeavour + ended + endemic + ender + enders + endfile + endgame + Endicott + ending + endings + endive + endjunk + endless + endlessly + endlessness + endmost + endocarp + endocrine + endocrines + endocrinology + endoderm + endogamous + endogamy + endogenous + endomorphism + endoplasm + endoplasmic + endorse + endorsed + endorsement + endorsements + endorser + endorses + endorsing + endosperm + endothelial + endothermic + endow + endowed + endowing + endowment + endowments + endows + endpoint + endpoints + ends + endue + endued + enduing + endurable + endurably + endurance + endure + endured + endures + enduring + enduringly + endways + endwise + enema + enemas + enemies + enemy + energetic + energetically + energetics + energies + energize + energized + energizer + energizes + energizing + energy + enervate + enervated + enervating + enervation + enfant + enfeeble + enfeebled + enfeebling + enfilade + enfiladed + enfilading + enfold + enfolded + enfolder + enfolding + enfolds + enforce + enforceable + enforced + enforcement + enforcer + enforcers + enforces + enforcible + enforcing + enfranchise + enfranchised + enfranchisement + enfranchiser + enfranchising + Eng + engage + engaged + engagement + engagements + engages + engaging + engagingly + Engel + engelmann + engelmanni + engender + engendered + engendering + engenders + engine + engined + engineer + engineered + engineering + engineers + engines + engird + engl + England + england + Englander + englander + englanders + Engle + Englewood + English + english + Englishman + Englishmen + engorge + engorged + engorgement + engorges + engorging + engraft + engrained + engrave + engraved + engraver + engraves + engraving + engravings + engross + engrossed + engrosses + engrossing + engrossment + engulf + engulfed + engulfing + engulfs + enhance + enhanced + enhancement + enhancements + enhancer + enhances + enhancing + Enid + enigma + enigmas + enigmatic + enigmatical + enigmatically + enjoin + enjoinder + enjoined + enjoining + enjoins + enjoy + enjoyable + enjoyably + enjoyed + enjoying + enjoyment + enjoyments + enjoys + enkindle + enkindled + enkindling + enlace + enlaced + enlacement + enlacing + enlarge + enlargeable + enlarged + enlargement + enlargements + enlarger + enlargers + enlarges + enlarging + enlighten + enlightened + enlightener + enlightening + enlightenment + enlightenments + enlightens + enlist + enlisted + enlistee + enlisting + enlistment + enlistments + enlists + enliven + enlivened + enlivening + enlivenment + enlivens + enmities + enmity + ennoble + ennobled + ennoblement + ennobler + ennobles + ennobling + ennoblment + ennui + Enoch + enol + enormities + enormity + enormous + enormously + enormousness + Enos + enough + enow + enplane + enplaned + enplaning + enqueue + enqueued + enqueues + enquire + enquired + enquirer + enquires + enquiries + enquiring + enquiry + enrage + enraged + enragement + enrages + enraging + enrapture + enraptured + enrapturing + enrich + enriched + enriches + enriching + enrichment + enrichments + Enrico + enrol + enroll + enrolled + enrollee + enrolling + enrollment + enrollments + enrolls + enrolment + ens + ensconce + ensconced + ensconcing + ensemble + ensembles + enshrine + enshrined + enshrinement + enshrines + enshrining + ensign + ensigncy + ensigns + ensignship + ensilage + enslave + enslaved + enslavement + enslaver + enslaves + enslaving + ensnare + ensnared + ensnarement + ensnares + ensnaring + enstatite + ensue + ensued + ensues + ensuing + ensure + ensured + ensurer + ensurers + ensures + ensuring + entablature + entail + entailed + entailing + entailment + entails + entangle + entangled + entanglement + entangles + entangling + entendre + entente + enter + enterable + enteral + entered + enteric + entering + enterprise + enterprises + enterprising + enters + entertain + entertained + entertainer + entertainers + entertaining + entertainingly + entertainment + entertainments + entertains + enthalpy + enthral + enthralled + enthralling + enthrallment + enthralment + enthrals + enthronement + enthroning + enthuse + enthusiasm + enthusiasms + enthusiast + enthusiastic + enthusiastically + enthusiasts + enthusing + entice + enticed + enticement + enticements + enticer + enticers + entices + enticing + enticingly + entire + entirely + entireties + entirety + entities + entitle + entitled + entitlement + entitles + entitling + entity + entomb + entombment + entomological + entomologist + entomologists + entomology + entourage + entrails + entrainment + entrance + entranced + entrancement + entrances + entranceway + entrancing + entrancingly + entrant + entrants + entrap + entrapment + entrapped + entreat + entreated + entreaties + entreatingly + entreaty + entree + entrees + entrench + entrenched + entrenches + entrenching + entrenchment + entrepreneur + entrepreneurial + entrepreneurs + entries + entropy + entrust + entrusted + entrusting + entrustment + entrusts + entry + entwined + entwines + entwining + enumerable + enumerate + enumerated + enumerates + enumerating + enumeration + enumerative + enumerator + enumerators + enunciable + enunciate + enunciated + enunciates + enunciating + enunciation + enunciator + enuresis + enuretic + envelop + envelope + enveloped + enveloper + envelopes + enveloping + envelopment + envelops + enviable + enviably + envied + envier + envies + envious + enviously + enviousness + enviroment + environ + environing + environment + environmental + environmentalist + environmentally + environments + environs + envisage + envisaged + envisages + envisaging + envision + envisioned + envisioning + envisions + envoy + envoys + envy + envying + enwrap + enwrapped + enwrapping + enzymatic + enzyme + enzymes + enzymology + Eocene + eof + eohippus + eolithic + eon + eons + eosin + eosine + EPA + epaulet + epaulets + epaulette + epee + ephedrine + ephemeral + ephemerally + ephemerid + ephemerides + ephemeris + Ephesian + Ephesus + ephippia + Ephraim + epic + epical + epicanthus + epicarp + epicenter + epics + epicure + Epicurean + epicureanism + epicures + epicycle + epicyclic + epidemic + epidemically + epidemics + epidemiological + epidemiology + epidermal + epidermic + epidermis + epigenetic + epiglottis + epigram + epigrammatic + epigrams + epigraph + epilepsy + epileptic + epilogue + epimorphism + epinephrine + Epiphany + epiphyseal + epiphysis + episcopacies + episcopacy + episcopal + Episcopalian + episcopate + episode + episodes + episodic + episodical + episodically + epistemological + epistemology + epistle + epistles + epistolary + epistolatory + epitaph + epitaphs + epitaxial + epitaxially + epitaxy + epithelial + epithelilia + epitheliliums + epithelium + epithermal + epithermally + epithet + epithets + epitome + epitomes + epitomize + epitomized + epitomizer + epitomizes + epitomizing + epizootic + eplot + epoch + epochal + epochs + epoxies + epoxy + epsilon + Epsom + Epstein + equability + equable + equably + equal + equaled + equaling + equalities + equality + equalization + equalize + equalized + equalizer + equalizers + equalizes + equalizing + equalled + equalling + equally + equals + equanimity + equate + equated + equates + equating + equation + equations + equator + equatorial + equators + equerries + equerry + equestrian + equestrienne + equiangular + equidist + equidistance + equidistant + equidistantly + equilateral + equilibrate + equilibrated + equilibrating + equilibration + equilibria + equilibriria + equilibrium + equilibriums + equine + equinoctial + equinox + equip + equipage + equipment + equipoise + equipotent + equipotential + equipped + equipping + equips + equitable + equitably + equitation + equities + equity + equivalence + equivalenced + equivalences + equivalencing + equivalency + equivalent + equivalently + equivalents + equivocal + equivocally + equivocate + equivocated + equivocating + equivocation + equivocator + era + eradicable + eradicate + eradicated + eradicates + eradicating + eradication + eradications + eradicator + eras + erasable + erase + erased + eraser + erasers + erases + erasing + Erasmus + Erastus + erasure + Erato + Eratosthenes + erbium + ERDA + ere + erect + erected + erecting + erection + erections + erectly + erectness + erector + erectors + erects + erelong + eremite + erg + ergative + ergo + ergodic + ergonomic + ergonomically + ergot + Eric + Erich + Erickson + Ericsson + Erie + Erik + Erlenmeyer + ermine + ermines + ern + erne + Ernest + Ernestine + Ernie + Ernst + erode + eroded + erodes + erodible + eroding + Eros + erosible + erosion + erosions + erosive + erotic + erotica + erotically + eroticism + erotism + err + errand + errands + errant + errantly + errantry + errata + erratic + erratically + erratum + erred + erring + erringly + Errol + erroneous + erroneously + erroneousness + error + errordump + errors + errs + errsyn + ersatz + Erskine + erst + erstwhile + eruct + eructate + eructated + eructating + eructation + erudite + eruditely + erudition + erupt + erupted + erupting + eruption + eruptions + eruptive + erupts + Ervin + Erwin + erysipelas + erythrocyte + erythrocytes + escadrille + escalade + escaladed + escalading + escalate + escalated + escalates + escalating + escalation + escalations + escalator + escalators + escallop + escalop + escapable + escapade + escapades + escape + escaped + escapee + escapees + escapement + escaper + escapes + escaping + escapism + escapist + escarole + escarpment + escheat + Escherichia + eschew + eschewed + eschewing + eschews + escort + escorted + escorting + escorts + escritoire + escrow + escudo + escudos + esculent + escutcheon + esd + Eskimo + eskimoes + Esmark + esophagi + esophagus + esoteric + esoterically + espadrille + espalier + especial + especially + espied + espionage + esplanade + Esposito + espousal + espouse + espoused + espouser + espouses + espousing + espresso + espressos + esprit + espy + espying + esquire + esquires + essay + essayed + essayist + essays + Essen + essence + essences + essential + essentially + essentials + Essex + EST + establish + established + establishes + establishing + establishment + establishments + estate + estates + esteem + esteemed + esteeming + esteems + Estella + ester + esterase + esterases + Estes + Esther + esthete + esthetic + esthetics + estimable + estimably + estimate + estimated + estimates + estimating + estimation + estimations + estimator + Estonia + estop + estoppal + estrange + estranged + estrangement + estranging + estrogen + estrous + estrus + estuaries + estuarine + estuary + et + eta + etc + etcetera + etch + etched + etcher + etches + etching + etchings + eternal + eternally + eternalness + eternities + eternity + Ethan + ethane + ethanol + Ethel + ether + ethereal + etherealize + etherealized + etherealizing + ethereally + etherial + etherially + etherize + etherized + etherizing + ethernet + ethernets + ethers + ethic + ethical + ethicality + ethically + ethicalness + ethics + Ethiopia + ethiopia + ethnic + ethnical + ethnically + ethnography + ethnological + ethnologically + ethnologist + ethnology + ethology + ethos + ethyl + ethylene + etiologic + etiological + etiologies + etiology + etiquette + Etruscan + etude + etymological + etymologically + etymologies + etymologist + etymology + eucalypti + eucalyptus + eucalyptuses + Eucharist + euchre + euchred + euchring + Euclid + euclid + Euclidean + euclidean + eucre + Eugene + Eugenia + eugenic + eugenical + eugenically + eugenicist + eugenics + eukaryote + Euler + Eulerian + eulogies + eulogist + eulogistic + eulogistically + eulogize + eulogized + eulogizing + eulogy + Eumenides + Eunice + eunuch + eunuchs + eupepsia + eupeptic + euphemism + euphemisms + euphemist + euphemistic + euphemistically + euphonic + euphonies + euphonious + euphoniously + euphonium + euphony + euphorbia + euphoria + euphoric + Euphrates + euphuism + Eurasia + eureka + Euridyce + Euripides + Europa + Europe + europe + European + european + europeans + europhium + europium + Eurydice + eurythmics + eutectic + Euterpe + euthanasia + Eva + evacuate + evacuated + evacuates + evacuating + evacuation + evacuations + evacuee + evade + evaded + evader + evades + evading + evaluable + evaluate + evaluated + evaluates + evaluating + evaluation + evaluations + evaluative + evaluator + evaluators + evanesce + evanesced + evanescence + evanescent + evanescing + evangel + evangelic + evangelical + evangelically + evangelism + evangelist + evangelistic + evangelize + evangelized + evangelizing + Evans + Evanston + Evansville + evaporate + evaporated + evaporates + evaporating + evaporation + evaporative + evaporator + evasion + evasions + evasive + evasively + evasiveness + eve + Evelyn + even + evened + evenhanded + evenhandedly + evenhandedness + evening + evenings + evenly + evenness + evens + evensong + event + eventful + eventfully + eventfulness + eventide + events + eventual + eventualities + eventuality + eventually + eventuate + eventuated + eventuating + ever + Eveready + everest + Everett + everglade + Everglades + evergreen + Everhart + everlasting + everlastingly + evermore + eversion + evert + everted + everting + everts + every + everybody + everyday + everyman + everyone + everything + everywhere + evict + evicted + evicting + eviction + evictions + evicts + evidence + evidenced + evidences + evidencing + evident + evidential + evidently + evil + evildoer + evildoing + eviller + evilly + evils + evince + evinced + evinces + evincible + evincing + eviscerate + eviscerated + eviscerating + evisceration + evocable + evocate + evocation + evocative + evoke + evoked + evokes + evoking + evolute + evolutes + evolution + evolutionary + evolutionist + evolutions + evolve + evolved + evolves + evolving + evzone + ewe + ewer + ewes + ex + exacerbate + exacerbated + exacerbates + exacerbating + exacerbation + exacerbations + exact + exacted + exacting + exactingly + exaction + exactions + exactitude + exactly + exactness + exacts + exaggerate + exaggerated + exaggerates + exaggerating + exaggeration + exaggerations + exaggerator + exalt + exaltation + exalted + exaltedly + exalting + exalts + exam + examination + examinations + examine + examined + examinee + examiner + examiners + examines + examining + example + examples + exams + exasperate + exasperated + exasperater + exasperates + exasperating + exasperation + excavate + excavated + excavates + excavating + excavation + excavations + excavator + exceed + exceeded + exceeding + exceedingly + exceeds + excel + excelled + excellence + excellences + excellencies + excellency + excellent + excellently + excelling + excels + excelsior + except + excepted + excepting + exception + exceptionable + exceptionably + exceptional + exceptionally + exceptions + excepts + excerpt + excerpted + excerpts + excess + excesses + excessive + excessively + excessiveness + exchange + exchangeable + exchanged + exchanges + exchanging + exchequer + exchequers + excisable + excise + excised + excises + excising + excision + excitability + excitable + excitably + excitation + excitations + excitatory + excite + excited + excitedly + excitement + excitements + excites + exciting + excitingly + exciton + exclaim + exclaimed + exclaimer + exclaimers + exclaiming + exclaims + exclamation + exclamations + exclamatory + exclude + excluded + excludes + excluding + exclusion + exclusionary + exclusions + exclusive + exclusively + exclusiveness + exclusivity + excommunicate + excommunicated + excommunicates + excommunicating + excommunication + excoriate + excoriated + excoriating + excoriation + excrement + excremental + excrescence + excrescency + excrescent + excresence + excreta + excrete + excreted + excretes + excreting + excretion + excretions + excretory + excruciate + excruciating + excruciatingly + exculpate + exculpated + exculpating + exculpation + exculpatory + excursion + excursionist + excursions + excursive + excursively + excursiveness + excursus + excusable + excusably + excuse + excused + excuses + excusing + exec + execrable + execrably + execrate + execrated + execrating + execration + executable + execute + executed + executes + executing + execution + executional + executioner + executions + executive + executives + executor + executors + executrix + exegeses + exegesis + exegete + exemplar + exemplary + exemplification + exemplified + exemplifier + exemplifiers + exemplifies + exemplify + exemplifying + exempt + exempted + exempting + exemption + exemptions + exempts + exercisable + exercise + exercised + exerciser + exercisers + exercises + exercising + exert + exerted + exerting + exertion + exertions + exerts + exes + Exeter + exhalation + exhale + exhaled + exhales + exhaling + exhaust + exhaustable + exhausted + exhaustedly + exhaustible + exhausting + exhaustion + exhaustive + exhaustively + exhaustiveness + exhausts + exhibit + exhibited + exhibiter + exhibiting + exhibition + exhibitionism + exhibitionist + exhibitions + exhibitor + exhibitors + exhibits + exhilarate + exhilarated + exhilarates + exhilarating + exhilaratingly + exhilaration + exhort + exhortation + exhortations + exhorted + exhorting + exhorts + exhumation + exhume + exhumed + exhumes + exhuming + exigence + exigencies + exigency + exigent + exiguous + exile + exiled + exiles + exiling + exist + existant + existed + existence + existences + existent + existential + existentialism + existentialist + existentialists + existentially + existing + exists + exit + exited + exiting + exits + exocarp + exodus + exoduses + exoergic + exogamous + exogamy + exogenous + exonerate + exonerated + exonerates + exonerating + exoneration + exorbitance + exorbitant + exorbitantly + exorcise + exorcised + exorcising + exorcism + exorcist + exorcize + exorcized + exorcizes + exorcizing + exordia + exordium + exordiums + exoskeleton + exothermic + exotic + exotica + exotically + exoticism + exp + expand + expandable + expanded + expander + expanders + expanding + expands + expanse + expanses + expansible + expansion + expansionism + expansions + expansive + expansively + expansiveness + expatiate + expatiated + expatiating + expatiation + expatriate + expatriated + expatriates + expatriating + expatriation + expdt + expect + expectancies + expectancy + expectant + expectantly + expectation + expectations + expected + expectedly + expecting + expectingly + expectorant + expectorate + expectorated + expectorating + expectoration + expects + expedience + expediencies + expediency + expedient + expediently + expedite + expedited + expediter + expedites + expediting + expedition + expeditionary + expeditions + expeditious + expeditiously + expel + expellable + expelled + expeller + expelling + expels + expend + expendability + expendable + expended + expending + expenditure + expenditures + expends + expense + expenses + expensive + expensively + expensiveness + experience + experienced + experiences + experiencing + experiential + experientially + experiment + experimental + experimentalists + experimentally + experimentation + experimentations + experimented + experimenter + experimenters + experimenting + experiments + expert + expertise + expertly + expertness + experts + expiable + expiate + expiated + expiating + expiation + expiator + expiatory + expiration + expirations + expire + expired + expires + expiring + expiry + explain + explainable + explained + explainer + explainers + explaining + explains + explanation + explanations + explanatory + explanitory + expletive + explicable + explicate + explicated + explicates + explicating + explication + explicator + explicit + explicitly + explicitness + explode + exploded + explodes + exploding + exploit + exploitable + exploitation + exploitations + exploitative + exploited + exploiter + exploiters + exploiting + exploits + exploration + explorations + exploratory + explore + explored + explorer + explorers + explores + exploring + explosion + explosions + explosive + explosively + explosiveness + explosives + exponent + exponential + exponentially + exponentials + exponentiate + exponentiated + exponentiates + exponentiating + exponentiation + exponentiations + exponention + exponents + export + exportable + exportation + exported + exporter + exporters + exporting + exports + expose + exposed + exposer + exposers + exposes + exposing + exposit + exposition + expositions + expositive + expositor + expository + expostulate + expostulated + expostulating + expostulation + expostulator + exposure + exposures + expound + expounded + expounder + expounding + expounds + express + expressed + expresser + expresses + expressibility + expressible + expressibly + expressing + expression + expressional + expressionism + expressionist + expressionistic + expressionless + expressions + expressive + expressively + expressiveness + expressly + expressway + expropriate + expropriated + expropriates + expropriating + expropriation + expropriations + expropriator + expulsion + expulsive + expunge + expunged + expunges + expunging + expurgate + expurgated + expurgates + expurgating + expurgation + exquisite + exquisitely + exquisiteness + extant + extemporaneous + extemporaneously + extempore + extemporization + extemporize + extemporized + extemporizer + extemporizing + extend + extendable + extended + extender + extenders + extendible + extending + extends + extensibility + extensible + extension + extensional + extensions + extensive + extensively + extensiveness + extensor + extent + extentions + extents + extenuate + extenuated + extenuating + extenuation + exterior + exteriors + exterminate + exterminated + exterminates + exterminating + extermination + exterminations + exterminator + external + externalize + externally + extinct + extinction + extinctions + extinctive + extinguish + extinguished + extinguisher + extinguishers + extinguishes + extinguishing + extinguishment + extirpate + extirpated + extirpating + extirpation + extol + extoled + extoling + extoll + extolled + extoller + extolling + extols + extort + extorted + extorter + extorting + extortion + extortionate + extortioner + extortionist + extorts + extra + extracellular + extract + extracted + extracting + extraction + extractions + extractive + extractor + extractors + extracts + extracurricular + extradite + extradited + extradites + extraditing + extradition + extraditions + extralegal + extramarital + extraneous + extraneously + extraneousness + extraordinarily + extraordinariness + extraordinary + extrapolate + extrapolated + extrapolates + extrapolating + extrapolation + extrapolations + extras + extrasensory + extraterrestrial + extraterritorial + extraterritoriality + extravagance + extravagances + extravagant + extravagantly + extravaganza + extrema + extremal + extreme + extremely + extremeness + extremes + extremism + extremist + extremists + extremities + extremity + extremum + extricable + extricate + extricated + extricates + extricating + extrication + extrinsic + extrinsically + extroversion + extrovert + extroverted + extroverts + extrude + extruded + extrudes + extruding + extrusion + extrusions + extrusive + exuberance + exuberancy + exuberant + exuberantly + exudate + exude + exuded + exudes + exuding + exult + exultant + exultantly + exultation + exulted + exulting + exults + exurban + exurbanite + exurbia + Exxon + eyas + eye + eyeball + eyebright + eyebrow + eyebrows + eyed + eyeful + eyeglass + eyeglasses + eyeing + eyelash + eyeless + eyelet + eyelets + eyelid + eyelids + eyepiece + eyepieces + eyer + eyers + eyes + eyesight + eyesore + eyestrain + eyeteeth + eyetooth + eyewitness + eyewitnesses + eying + eyrie + eyries + eyry + Ezekiel + Ezra + f + f's + FAA + fabaceous + Faber + Fabian + fable + fabled + fables + fabliau + fabric + fabricant + fabricate + fabricated + fabricates + fabricating + fabrication + fabrications + fabricator + fabricators + fabrics + fabulist + fabulous + fabulously + facade + facaded + facades + face + faced + faceharden + faceless + faceoff + faceplate + facer + faces + facesaving + facet + faceted + facetiae + faceting + facetious + facetiously + facetiousness + facets + facetted + facetting + facia + facial + facies + facile + facilely + facilitate + facilitated + facilitates + facilitating + facilitation + facilitations + facilities + facility + facing + facings + facsimile + facsimiles + fact + faction + factional + factionalism + factionalist + factions + factious + factiously + factitious + factitiously + factitive + facto + factor + factorage + factored + factorial + factorials + factories + factoring + factorization + factorizations + factorize + factors + factory + factotum + facts + factual + factualism + factually + facture + faculae + faculative + faculties + faculty + fad + faddish + faddishly + faddishness + faddism + fade + faded + fadeless + fadeout + fader + faders + fades + fading + fado + fads + faeces + faerie + faeries + faery + fafaronade + Fafnir + fag + fagged + fagging + faggot + faggoting + fagot + fagoting + fags + Fahey + Fahrenheit + fahrenheit + faience + fail + failed + failing + failings + faille + fails + failsafe + failsoft + failure + failures + fain + faint + fainted + fainter + faintest + fainthearted + fainting + faintly + faintness + faints + fair + Fairchild + fairer + fairest + Fairfax + Fairfield + fairgoer + fairground + fairies + fairing + fairings + fairish + fairly + fairness + Fairport + fairs + fairway + fairy + fairyland + faith + faithful + faithfully + faithfulness + faithless + faithlessly + faithlessness + faiths + fake + faked + faker + fakes + faking + fakir + fala + falcate + falchion + falciform + falcon + falconer + falconers + falconet + falconry + falcons + falderal + faldstool + fall + falla + fallacies + fallacious + fallaciously + fallaciousness + fallacy + fallal + fallback + fallen + faller + fallibility + fallible + fallibly + falling + falloff + fallopian + fallout + fallow + falls + Falmouth + false + falseface + falsehearted + falsehood + falsehoods + falsely + falseness + falser + falsest + falsetto + falsettos + falsification + falsifications + falsified + falsifier + falsifies + falsify + falsifying + falsities + falsity + Falstaff + faltboat + falter + faltered + faltering + falteringly + falters + fame + famed + fames + familial + familiar + familiarities + familiarity + familiarization + familiarize + familiarized + familiarizes + familiarizing + familiarly + familiarness + families + familism + family + famine + famines + famish + famished + famous + famously + famulus + fan + fanatic + fanatical + fanatically + fanaticism + fanatics + fancied + fancier + fanciers + fancies + fanciest + fanciful + fancifully + fancifulness + fancily + fanciness + fancy + fancying + fancywork + fandango + fandangos + fandom + fane + fanfare + fanfares + fanfold + fang + fangled + fangs + fanjet + fanlight + fanlike + fanned + fanner + fanning + Fanny + fanon + fanout + fans + fantail + fantasia + fantasied + fantasies + fantasist + fantasize + fantasized + fantasizing + fantasm + fantast + fantastic + fantastical + fantastically + fantasticate + fantasy + fantasying + fantod + fantom + fanwise + fanwort + far + farad + Faraday + faradic + faradize + farandole + faraway + Farber + farce + farces + farceur + farcical + farcy + fardel + fare + fared + fares + farewell + farewells + farfetched + Fargo + farina + farinaceous + faring + farinose + Farkas + farkleberry + Farley + farm + farmed + farmer + farmers + farmhand + farmhouse + farmhouses + farming + Farmington + farmland + farms + farmstead + farmyard + farmyards + Farnsworth + faro + farouche + farrago + farragoes + Farrell + farrier + farrieries + farriery + farris + farrow + farseeing + farsighted + farsightedness + fart + farted + farth + farther + farthermost + farthest + farthing + farthingale + farting + farts + fasces + fascia + fasciate + fasciation + fascicle + fascicled + fasciculate + fascinate + fascinated + fascinates + fascinating + fascinatingly + fascination + fascinations + fascintatingly + fascism + fascist + fashion + fashionable + fashionably + fashioned + fashioning + fashions + fast + fasted + fasten + fastened + fastener + fasteners + fastening + fastenings + fastens + faster + fastest + fastidious + fastidiously + fastidiousness + fasting + fastness + fasts + fat + fatal + fatalism + fatalist + fatalistic + fatalistically + fatalities + fatality + fatally + fatals + fatback + fate + fated + fateful + fatefully + fatefulness + fates + fathead + fatheaded + father + fathered + fatherhood + fathering + fatherland + fatherless + fatherliness + fatherly + fathers + fathom + fathomable + fathomed + fathoming + fathomless + fathoms + fatigue + fatigued + fatigues + fatiguing + Fatima + fating + fatling + fatness + fats + fatted + fatten + fattened + fattener + fatteners + fattening + fattens + fatter + fattest + fattier + fattiest + fattiness + fatting + fatty + fatuities + fatuity + fatuous + fatuously + fatuousness + fauces + faucet + Faulkner + fault + faulted + faultfinder + faultfinding + faultier + faultiest + faultily + faultiness + faulting + faultless + faultlessly + faults + faulty + faun + fauna + faunae + faunas + Faust + Faustian + Faustus + faux + favor + favorability + favorable + favorably + favored + favorer + favoring + favorite + favorites + favoritism + favors + favour + favourable + favourably + favoured + favouring + favourite + favours + fawn + fawned + fawning + fawningly + fawns + fay + Fayette + Fayetteville + faze + fazed + fazing + FBI + FCC + fchar + fcomp + fconv + fconvert + FDA + fdname + fdnames + fdtype + fdub + fdubs + Fe + fealties + fealty + fear + feared + fearful + fearfully + fearfulness + fearing + fearless + fearlessly + fearlessness + fears + fearsome + fearsomely + fearsomeness + feasibilities + feasibility + feasible + feasibly + feast + feasted + feasting + feasts + feat + feather + featherbed + featherbedding + featherbrain + feathered + featherer + featherers + feathering + featherless + feathers + feathertop + featherweight + feathery + feats + feature + featured + featureless + features + featuring + Feb + feb + febrifuge + febrile + februaries + February + february + fecal + feces + feckless + fecund + fecundate + fecundated + fecundating + fecundation + fecundities + fecundity + fed + fedayeen + federal + federalism + federalist + federalization + federalize + federalized + federalizing + federally + federals + federate + federated + federates + federating + federation + federations + Fedora + fee + feeble + feebleminded + feebleness + feebler + feeblest + feebly + feed + feedback + feedbacks + feeded + feeder + feeders + feeding + feedings + feeds + feel + feeler + feelers + feeling + feelingly + feelings + feels + Feeney + fees + feet + feign + feigned + feigning + feigns + feint + feints + feistier + feistiest + feisty + Feldman + feldspar + Felice + Felicia + felicitate + felicitated + felicitates + felicitating + felicitation + felicities + felicitous + felicitously + felicitousness + felicity + feline + Felix + fell + felled + felling + fellow + fellows + fellowship + fellowships + fells + felon + felonies + felonious + feloniously + felons + felony + felsite + felt + felts + female + females + feminality + feminine + femininity + feminism + feminist + feminists + feminization + feminize + feminized + feminizes + feminizing + femora + femoral + fempty + femur + femurs + fen + fence + fenced + fencepost + fencer + fencers + fences + fencing + fend + fended + fender + fenders + fending + fends + fenestrate + fenestration + fennel + fennici + fens + Fenton + fenugreek + feral + Ferber + Ferdinand + Ferguson + Fermat + ferment + fermentation + fermentations + fermented + fermenting + ferments + Fermi + fermion + fermium + fern + Fernando + fernery + ferns + ferocious + ferociously + ferociousness + ferocity + Ferreira + ferreous + Ferrer + ferret + ferreted + ferreter + ferreting + ferrets + ferric + ferried + ferries + ferris + ferrite + ferroelectric + ferromagnet + ferromagnetic + ferrous + ferruginous + ferrule + ferrules + ferry + ferrying + ferryman + ferrymen + fertile + fertilely + fertility + fertilization + fertilize + fertilized + fertilizer + fertilizers + fertilizes + fertilizing + ferule + fervency + fervent + fervently + fervid + fervidly + fervor + fervors + fervour + fescue + fest + festal + festally + fester + festered + festering + festers + festival + festivals + festive + festively + festiveness + festivities + festivity + festoon + festooned + festoonery + festooning + festoons + feta + fetal + fetch + fetched + fetches + fetching + fetchingly + fete + feted + fetes + fetich + fetid + fetidly + fetidness + feting + fetish + fetishism + fetishist + fetishistic + fetlock + fetlocks + fetter + fettered + fettering + fetters + fettle + fetus + fetuses + feud + feudal + feudalism + feudalistic + feudally + feudatory + feuding + feuds + fever + fevered + feverish + feverishly + feverous + fevers + few + fewer + fewest + fewness + fey + fez + fezzes + fgrid + fiance + fiancee + fiasco + fiascoes + fiascos + fiat + fiats + fib + fibbed + fibber + fibbing + fiber + fiberboard + fiberfill + Fiberglas + fiberous + fibers + Fibonacci + fibration + fibre + fibres + fibril + fibrilated + fibrilation + fibrilations + fibrillation + fibrin + fibrinogen + fibroid + fibrosis + fibrosities + fibrosity + fibrotic + fibrous + fibrously + fibs + fibula + fibulae + fibulas + fiche + fichu + fickle + fickleness + fiction + fictional + fictionalize + fictionalized + fictionalizing + fictionally + fictions + fictitious + fictitiously + fictive + fid + fiddle + fiddled + fiddler + fiddlers + fiddles + fiddlestick + fiddlesticks + fiddling + fide + fidelities + fidelity + fidget + fidgeted + fidgeting + fidgets + fidgety + fids + fiducial + fiduciaries + fiduciary + fie + fief + fiefdom + field + fielded + fielder + fielders + fielding + fields + fieldstone + fieldwork + fieldworker + fiend + fiendish + fiendishly + fiendishness + fiends + fierce + fiercely + fierceness + fiercer + fiercest + fierier + fieriest + fieriness + fiery + fiesta + fiestas + fife + fifed + fifer + fifes + fifing + FIFO + fifo + fifteen + fifteens + fifteenth + fifth + fifthly + fifths + fifties + fiftieth + fifty + fig + figaro + fight + fighter + fighters + fighting + fights + figment + figments + figs + figural + figurate + figuration + figurational + figurative + figuratively + figure + figured + figurehead + figures + figurine + figurines + figuring + figurings + filament + filamentary + filaments + filbert + filberts + filch + filched + filcher + filches + filching + file + filea + filechar + filed + filemark + filemarks + filename + filenames + filer + files + filesave + filesniff + filestatus + filet + fileted + fileting + filial + filibuster + filibusters + filigree + filigreed + filigreeing + filing + filings + Filipino + fill + fillable + filled + filler + fillers + fillet + fillets + fillies + filling + fillings + fillip + filliped + fillips + fills + filly + film + filmdom + filmed + filmer + filmic + filmier + filmiest + filminess + filming + filmmake + films + filmstrip + filmy + filter + filterability + filterable + filtered + filtering + filters + filth + filthier + filthiest + filthiness + filthy + filtrable + filtrate + filtrated + filtrates + filtrating + filtration + fin + finagle + finagled + finagler + finagling + final + finale + finales + finalist + finalities + finality + finalization + finalize + finalized + finalizes + finalizing + finally + finals + finance + financed + finances + financial + financially + financier + financiers + financing + finch + finches + find + finder + finders + finding + findings + finds + fine + fined + finely + fineness + finer + fineries + finery + fines + finesse + finessed + finesses + finessing + finest + finger + fingerboard + fingered + fingering + fingerings + fingerling + fingerlings + fingernail + fingernails + fingerprint + fingerprints + fingers + fingertip + finial + finical + finicking + finicky + fining + finis + finises + finish + finished + finisher + finishers + finishes + finishing + finite + finitely + finiteness + fink + Finland + finland + Finley + Finn + finned + Finnegan + Finnish + finnish + finny + fins + fiord + fir + fire + firearm + firearms + firebase + fireboat + firebomb + firebrand + firebreak + firebrick + firebug + firebugs + firecracker + fired + firedamp + firedog + firefighter + firefighters + firefighting + fireflies + firefly + firehouse + firelight + fireman + firemen + fireplace + fireplaces + fireplug + firepower + fireproof + firer + firers + fires + fireside + Firestone + firestorm + firetrap + firewall + firewater + firewood + firework + fireworks + firing + firings + firkin + firkins + firm + firmament + firmaments + firmed + firmer + firmest + firming + firmly + firmness + firms + firmware + firs + first + firstborn + firsthand + firstly + firsts + firth + fiscal + fiscally + Fischbein + Fischer + fish + fished + fisher + fisheries + fisherman + fishermen + fishers + fishery + fishes + fishhook + fishier + fishiest + fishiness + fishing + fishmonger + fishpond + fishwife + fishwives + fishy + Fisk + Fiske + fissile + fission + fissionable + fissure + fissured + fissures + fissuring + fist + fisted + fistic + fisticuff + fisticuffs + fisting + fists + fistula + fistulae + fistulas + fistulous + fit + Fitch + Fitchburg + fitful + fitfully + fitfulness + fitly + fitness + fitnesses + fits + fitted + fitter + fitters + fittest + fitting + fittingly + fittings + Fitzgerald + Fitzpatrick + Fitzroy + five + fivefold + fives + fix + fixable + fixate + fixated + fixates + fixating + fixation + fixations + fixative + fixatives + fixed + fixedly + fixedness + fixer + fixers + fixes + fixing + fixings + fixities + fixity + fixture + fixtures + fixup + fixups + Fizeau + fizz + fizzed + fizzes + fizzing + fizzle + fizzled + fizzles + fizzling + fjord + fjords + FL + flab + flabbergast + flabbergasted + flabbier + flabbiest + flabbily + flabbiness + flabby + flaccid + flaccidity + flaccidly + flack + flag + flagella + flagellant + flagellate + flagellated + flagellates + flagellating + flagellation + flagellum + flagellums + flageolet + flagged + flaggelate + flaggelated + flaggelating + flaggelation + flagger + flagging + flagitious + flagitiously + flagitiousness + Flagler + flagon + flagons + flagpole + flagrance + flagrancy + flagrant + flagrantly + flags + flagship + Flagstaff + flagstone + flail + flailed + flailing + flails + flair + flairs + flak + flake + flaked + flaker + flakes + flakier + flakiest + flakiness + flaking + flaky + flam + flambe + flambeau + flambeaus + flambeaux + flamboyance + flamboyant + flamboyantly + flame + flamed + flameless + flamenco + flamencos + flameout + flamer + flamers + flames + flaming + flamingo + flamingoes + flamingos + flammability + flammable + flams + flan + Flanagan + Flanders + flange + flanged + flanges + flanging + flank + flanked + flanker + flankers + flanking + flanks + flannel + flannelet + flannelette + flannels + flans + flap + flapjack + flapjacks + flapped + flapper + flappers + flaps + flare + flared + flares + flaring + flash + flashback + flashbulb + flashcube + flashed + flasher + flashers + flashes + flashier + flashiest + flashily + flashiness + flashing + flashlight + flashlights + flashy + flask + flasks + flat + flatbed + flatboat + flatcar + flatfish + flatfoot + flatfoots + flathead + flatiron + flatland + flatly + flatness + flatnesses + flats + flatted + flatten + flattened + flattening + flattens + flatter + flattered + flatterer + flatteries + flattering + flatteringly + flatters + flattery + flattest + flatting + flattop + flatulence + flatulency + flatulent + flatulently + flatus + flatware + flatworm + flaunt + flaunted + flaunting + flauntingly + flaunts + flautist + flautists + flavor + flavored + flavorful + flavoring + flavorings + flavorless + flavors + flavour + flavoured + flavourful + flavouring + flavourless + flavours + flaw + flawed + flawing + flawless + flawlessly + flawlessness + flaws + flax + flaxen + flaxes + flaxseed + flay + flayed + flayer + flaying + flays + flea + fleabag + fleabane + fleas + fleawort + fleck + flecked + flecking + flecks + fled + fledge + fledged + fledgeling + fledging + fledgling + fledglings + flee + fleece + fleeced + fleecer + fleeces + fleecier + fleeciest + fleecily + fleeciness + fleecing + fleecy + fleeing + flees + fleet + fleetest + fleeting + fleetingly + fleetly + fleetness + fleets + Fleming + flemish + flesh + fleshed + fleshes + fleshier + fleshiest + fleshiness + fleshing + fleshly + fleshpot + fleshy + fletch + Fletcher + flew + flex + flexed + flexes + flexibilities + flexibility + flexibilty + flexible + flexibly + flexile + flexing + flexor + flexural + flexure + flibbertigibbet + flick + flicked + flicker + flickered + flickering + flickers + flicking + flicks + flied + flier + fliers + flies + flight + flighted + flightier + flightiest + flightiness + flightless + flights + flighty + flimsier + flimsiest + flimsily + flimsiness + flimsy + flinch + flinched + flinches + flinching + flinders + fling + flinging + flings + flint + flintier + flintiest + flintiness + flintlock + flints + flinty + flip + flipflop + flippancies + flippancy + flippant + flippantly + flipped + flipper + flippers + flippest + flips + flirt + flirtation + flirtatious + flirtatiously + flirted + flirting + flirts + flit + flitch + flits + flitted + flitter + flittered + flittering + flitters + flitting + flivver + Flo + fload + float + floatable + floatation + floated + floater + floaters + floating + floats + floc + flocculate + flock + flocked + flocking + flocks + floe + floes + flog + flogged + flogger + flogging + flogs + flood + flooded + floodgate + flooding + floodlight + floodlighted + floodlighting + floodlit + floods + floor + floorboard + floored + flooring + floorings + floors + floorwalker + floozie + floozies + floozy + flop + flophouse + flopped + floppier + floppies + floppiest + floppily + flopping + floppy + flops + flora + floral + Florence + Florentine + florescence + florescent + floret + florets + florican + floricultural + floriculture + florid + Florida + florida + Floridian + floridity + floridly + florin + florist + florists + floss + flossed + flosses + flossier + flossiest + flossing + flossy + flotation + flotilla + flotsam + flounce + flounced + flounces + flouncing + flounder + floundered + floundering + flounders + flour + floured + flourescent + flourish + flourished + flourishes + flourishing + flours + floury + flout + flow + flowchart + flowcharting + flowcharts + flowcontrol + flowed + flower + flowered + flowerer + flowerers + floweret + flowerets + flowerier + floweriest + floweriness + flowering + flowerpot + flowers + flowery + flowing + flown + flows + Floyd + flu + flub + flubbed + fluctuate + fluctuated + fluctuates + fluctuating + fluctuation + fluctuations + flue + fluency + fluent + fluently + flues + fluff + fluffed + fluffier + fluffiest + fluffiness + fluffing + fluffs + fluffy + fluid + fluidify + fluidity + fluidly + fluidness + fluids + fluke + fluked + flukes + flukey + flukier + flukiest + fluky + flume + flumed + flumes + flummox + flummoxed + flummoxes + flummoxing + flung + flunk + flunked + flunkey + flunkeys + flunkies + flunky + fluor + fluoresce + fluoresced + fluorescein + fluorescence + fluorescent + fluoresces + fluorescing + fluoridate + fluoridated + fluoridating + fluoridation + fluoride + fluorine + fluorite + fluorocarbon + fluoroscope + fluoroscoped + fluoroscopic + fluoroscoping + fluors + fluorspar + flurried + flurries + flurry + flurrying + flush + flushed + flushes + flushing + fluster + flustered + flustering + flusters + flute + fluted + flutes + fluting + flutist + flutter + fluttered + fluttering + flutters + fluttery + fluvial + flux + fluxed + fluxes + fluxing + fly + flyable + flycatcher + flyer + flyers + flying + flyleaf + Flynn + flypaper + flyspeck + flytrap + flyway + flyweight + flywheel + FM + FMC + fmt + fname + foal + foaled + foaling + foals + foam + foamed + foamflower + foamier + foamiest + foaming + foamless + foams + foamy + fob + fobbed + fobbing + fobs + focal + focally + foci + focus + focused + focuses + focusing + focussed + focusses + focussing + fodder + foddered + foddering + fodders + foe + foes + foetus + foetuses + fog + Fogarty + fogey + fogeys + fogged + foggier + foggiest + foggily + fogginess + fogging + foggy + foghorn + fogies + fogs + fogy + foible + foibles + foil + foiled + foiling + foils + foist + foisted + foisting + foists + fold + folded + folder + folders + folding + foldout + folds + Foley + foliaceous + foliage + foliages + foliate + foliation + folio + folios + folk + folklore + folks + folksier + folksiest + folksong + folksy + folkway + follicle + follicles + follicular + follies + follow + followed + follower + followers + followeth + following + followings + follows + folly + Fomalhaut + foment + fomentation + fomented + fomenting + foments + fomes + fond + fondant + fonder + fondle + fondled + fondles + fondling + fondly + fondness + fondu + fondue + font + Fontaine + Fontainebleau + fonts + foobar + food + foodless + foods + foodstuff + foodstuffs + fool + fooled + fooleries + foolery + foolhardier + foolhardiest + foolhardily + foolhardiness + foolhardy + fooling + foolish + foolishly + foolishness + foolproof + fools + foolscap + foot + footage + footages + football + footballs + footboard + footbridge + footbridges + footcandle + footcandles + Foote + footed + footer + footers + footfall + footfalls + footgear + foothill + foothills + foothold + footholds + footing + footings + footlights + footloose + footman + footmen + footmenfootpad + footnote + footnoted + footnotes + footnoting + footpad + footpads + footpath + footpaths + footpound + footpounds + footprint + footprints + foots + footsie + footsies + footsoldier + footsoldiers + footsore + footstep + footsteps + footstool + footstools + footsy + footwarmer + footwarmers + footwear + footwork + fop + fopperies + foppery + foppish + foppishly + fops + for + fora + forage + foraged + forager + foragers + forages + foraging + foramen + foraramens + foraramina + forasmuch + foray + forayed + foraying + forays + forbad + forbade + forbear + forbearance + forbearances + forbearing + forbearingly + forbears + Forbes + forbid + forbidden + forbidding + forbiddingly + forbids + forboding + forbore + forborn + forborne + force + forced + forcedly + forceful + forcefully + forcefulness + forcemeat + forceps + forcer + forces + forcible + forcibly + forcing + ford + fordable + fordam + forded + Fordham + fording + fords + fore + forearm + forearms + forebear + forebode + foreboded + forebodes + foreboding + forebodingly + forecast + forecasted + forecaster + forecasters + forecasting + forecastle + forecastles + forecasts + foreclose + foreclosed + forecloses + foreclosing + foreclosure + forecourt + forecourts + foredoom + forefather + forefathers + forefeet + forefinger + forefingers + forefoot + forefront + forefronts + foregather + forego + foregoes + foregoing + foregone + foreground + forehand + forehanded + forehead + foreheads + foreign + foreigner + foreigners + foreignness + foreigns + forejudge + forejudged + forejudging + forejudgment + foreknew + foreknow + foreknowing + foreknowledge + foreknown + foreleg + forelegs + forelock + forelocks + foreman + foremanship + foremast + foremasts + foremen + forementioned + foremost + forename + forenamed + forenames + forenoon + forensic + forensically + foreordain + foreordination + forepaw + forepeak + forequarter + foreran + forerun + forerunner + forerunners + forerunning + foreruns + foresaid + foresail + foresails + foresaw + foresay + foresaying + foresays + foresee + foreseeable + foreseeing + foreseen + foresees + foreshadow + foreshadowed + foreshadower + foreshadowing + foreshadows + foresheet + foresheets + foreshorten + foreshortened + foreshortening + foreshortens + foreshow + foreshowed + foreshowing + foreshown + foresight + foresighted + foresightedness + foresights + foreskin + forest + forestall + forestalled + forestalling + forestallment + forestalls + forestation + forestay + forestays + forested + forester + foresters + forestry + forests + foretaste + foretasted + foretastes + foretasting + foretell + foretelling + foretells + forethought + foretoken + foretold + foretop + forever + forevermore + forewarn + forewarned + forewarning + forewarnings + forewarns + forewent + foreword + forfeit + forfeited + forfeiting + forfeits + forfeiture + forfend + forgather + forgave + forge + forged + forger + forgeries + forgers + forgery + forges + forget + forgetable + forgetful + forgetfully + forgetfulness + forgets + forgettable + forgettably + forgetter + forgetters + forgetting + forging + forgivable + forgivably + forgive + forgiven + forgiveness + forgivenesses + forgiver + forgivers + forgives + forgiving + forgivingly + forgivingness + forgo + forgoes + forgoing + forgone + forgot + forgotten + fork + forked + forkfuls + forking + forklift + forks + forlorn + forlornly + form + formal + formaldehyde + formalism + formalisms + formalistic + formalities + formality + formalization + formalizations + formalize + formalized + formalizes + formalizing + formally + formalness + formant + formants + format + formate + formation + formations + formative + formatively + formats + formatted + formatter + formatters + formatting + formed + former + formerly + formic + Formica + formidable + formidably + forming + formless + formlessly + formlessness + Formosa + forms + formula + formulae + formulaic + formularies + formulary + formulas + formulate + formulated + formulates + formulating + formulation + formulations + formulator + formulators + formulism + fornicate + fornicated + fornicates + fornicating + fornication + fornicator + fornicatress + forsake + forsaken + forsakenly + forsakes + forsaking + forsook + forsooth + forswear + forswearing + forswears + forswore + forsworn + Forsythe + forsythia + fort + forte + fortes + Fortescue + forth + forthcome + forthcoming + forthright + forthrightly + forthrightness + forthwith + fortier + forties + fortieth + fortifiable + fortification + fortifications + fortified + fortifies + fortify + fortifying + fortifys + fortin + fortiori + fortissimo + fortitude + fortitudes + fortnight + fortnightly + fortnights + fortran + fortranh + fortress + fortresses + forts + fortuities + fortuitous + fortuitously + fortuity + fortunate + fortunately + fortune + fortuneless + fortunes + fortuneteller + fortunetelling + forty + forum + forums + forward + forwarded + forwarder + forwarding + forwardness + forwards + forwent + Foss + fossil + fossiliferous + fossilization + fossilize + fossilized + fossilizes + fossilizing + fossils + foster + fostered + fostering + fosterite + fosterling + fosterlings + fosters + fought + foul + foulard + fouled + fouler + foulest + fouling + foully + foulminded + foulmouth + foulmouthed + foulness + fouls + found + foundation + foundationless + foundations + founded + founder + foundered + foundering + founders + founding + foundling + foundlings + foundries + foundry + founds + fount + fountain + fountainhead + fountains + founts + four + fourflusher + fourfold + Fourier + fourier + fours + fourscore + foursome + foursquare + fourteen + fourteens + fourteenth + fourth + fovea + fowells + fowl + fowler + fowling + fowls + fox + foxed + foxes + foxglove + Foxhall + foxhole + foxhound + foxier + foxiest + foxily + foxiness + foxtail + foxy + foyer + FPC + fplot + fracas + fracases + fraction + fractional + fractionally + fractionate + fractionating + fractions + fractious + fractiously + fractiousness + fracture + fractured + fractures + fracturing + fragile + fragility + fragment + fragmental + fragmentary + fragmentation + fragmented + fragmenting + fragments + fragrance + fragrances + fragrancies + fragrancy + fragrant + fragrantly + frail + frailest + frailly + frailness + frailties + frailty + frambesia + frame + framed + framer + frames + framework + frameworks + framing + Fran + franc + franca + France + france + Frances + frances + franchise + franchised + franchises + franchising + francia + Francine + Francis + Franciscan + Francisco + francisco + francium + franco + Francoise + francs + frangibility + frangible + frangipani + frank + franked + Frankel + franker + frankest + Frankfort + frankforter + Frankfurt + frankfurt + frankfurter + frankfurters + frankincense + franking + franklin + frankly + frankness + franks + frantic + frantically + franticly + franticness + Franz + frappe + Fraser + frat + fraternal + fraternalism + fraternally + fraternities + fraternity + fraternization + fraternize + fraternized + fraternizes + fraternizing + fratricidal + fratricide + Frau + fraud + frauds + fraudulence + fraudulency + fraudulent + fraudulently + fraught + fraulein + frauleins + fraus + fray + frayed + fraying + frays + Frazier + frazzle + frazzled + frazzles + frazzling + frden + freak + freaked + freakier + freakiest + freaking + freakish + freakishly + freakout + freaks + freaky + freckle + freckled + freckles + freckling + freckly + Fred + Freddie + Freddy + Frederic + Frederick + Fredericksburg + Fredericton + Fredholm + Fredrickson + free + freebie + freebies + freeboard + freeboot + freebooter + freeborn + freeby + freed + Freedman + freedmen + freedom + freedoms + freefd + freehand + freehanded + freehold + freeholder + freeholders + freeing + freeings + freelance + freelanced + freelances + freelancing + freely + freeman + freemason + freemen + freeness + Freeport + freer + frees + freesp + freespac + freespace + freest + freestone + freethink + freethinker + freethinkers + freethinking + Freetown + freeway + freewheel + freewill + freezable + freeze + freezer + freezers + freezes + freezing + freight + freightage + freighted + freighter + freighters + freighting + freights + frena + French + french + Frenchman + Frenchmen + frenetic + frenetical + frenetically + frenum + frenzied + frenziedly + frenzies + frenzy + frenzying + freon + frequence + frequencies + frequency + frequent + frequented + frequenter + frequenters + frequenting + frequently + frequentness + frequents + fresco + frescoes + frescos + fresh + freshen + freshened + freshener + fresheners + freshening + freshens + fresher + freshest + freshet + freshly + freshman + freshmen + freshness + freshwater + Fresnel + Fresno + fret + fretful + fretfully + fretfulness + frets + fretted + fretwork + Freud + Freudian + Frey + Freya + friability + friable + friar + friaries + friars + friary + fricassee + fricasseed + fricasseeing + fricassees + frication + fricative + fricatives + Frick + friction + frictionless + frictions + Friday + friday + fridays + fried + friedcake + Friedman + Friedrich + friend + friendless + friendlier + friendliest + friendliness + friendly + friends + friendship + friendships + frier + fries + frieze + friezed + friezes + friezing + frigage + frigate + frigates + Frigga + fright + frighten + frightened + frightening + frighteningly + frightens + frightful + frightfully + frightfulness + frights + frigid + Frigidaire + frigidity + frigidly + frigidness + frijol + frijole + frijoles + frill + frillier + frilliest + frilling + frills + frilly + fringe + fringed + fringes + fringing + fripperies + frippery + frisk + frisked + friskier + friskiest + friskily + friskiness + frisking + frisks + frisky + fritillary + fritter + frittered + frittering + fritters + Fritz + frivolities + frivolity + frivolous + frivolously + friz + frizz + frizzed + frizzes + frizzier + frizziest + frizzing + frizzle + frizzled + frizzles + frizzlier + frizzliest + frizzling + frizzly + frizzy + fro + frock + frocked + frocking + frocks + frog + froglet + froglets + frogman + frogmen + frogs + frolic + frolicked + frolicking + frolicky + frolics + frolicsome + from + fromfile + frond + fronds + front + frontage + frontages + frontal + frontally + fronted + frontier + frontiers + frontiersman + frontiersmen + fronting + frontispiece + frontless + frontlet + fronts + frontspiece + frontspieces + frontward + frontwards + frost + frostbit + frostbite + frostbiting + frostbitten + frosted + frostier + frostiest + frostily + frostiness + frosting + frostings + frosts + frosty + froth + frothed + frothiness + frothing + froths + frothy + froufrou + froward + frowardness + frown + frowned + frowning + frowns + frowsy + frowzier + frowziest + frowzily + frowziness + frowzy + froze + frozen + frozenly + frs + fructified + fructify + fructifying + fructose + Fruehauf + frugal + frugalities + frugality + frugally + fruit + fruitcake + fruited + fruitful + fruitfully + fruitfulness + fruitier + fruitiest + fruiting + fruition + fruitless + fruitlessly + fruits + fruity + frump + frumpish + frumpy + frusta + frustrate + frustrated + frustrater + frustrates + frustrating + frustration + frustrations + frustum + frustums + fry + Frye + fryer + frying + fstore + Ft + FTC + ftncmd + ftnerr + Fuchs + Fuchsia + fuchsias + fuck + fucked + fucking + fucks + fuddle + fuddled + fuddles + fuddling + fudge + fudged + fudges + fudging + fuel + fueled + fueling + fuelled + fuelling + fuels + fugal + fugitive + fugitives + fugue + fugues + Fuji + Fujitsu + fulcra + fulcrum + fulcrums + fulfil + fulfill + fulfilled + fulfilling + fulfillment + fulfillments + fulfills + fulfilment + fulfils + fulful + fulfullment + fulgent + full + fullback + fulled + fuller + Fullerton + fullest + fulling + fullness + fullnesses + fulls + fulltime + fullword + fullwords + fully + fulminate + fulminated + fulminating + fulmination + fulminator + fulness + fulnesses + fulsome + fulsomely + fulsomeness + Fulton + fum + fumble + fumbled + fumbler + fumbles + fumbling + fume + fumed + fumes + fumier + fumiest + fumiferana + fumigant + fumigate + fumigated + fumigates + fumigating + fumigation + fumigator + fumigators + fuming + fumy + fun + function + functional + functionalities + functionality + functionally + functionals + functionaries + functionary + functioned + functioning + functionless + functions + functor + functorial + functors + fund + fundamental + fundamentalism + fundamentalist + fundamentally + fundamentals + funded + funder + funders + funding + fundraising + funds + funeral + funerals + funereal + funereally + fungal + fungi + fungible + fungicidal + fungicide + fungoid + fungous + fungus + funguses + funicular + funk + funkier + funkiest + funkiness + funky + funned + funnel + funneled + funneling + funnelled + funnelling + funnels + funnier + funnies + funniest + funnily + funniness + funning + funny + fur + furbelow + furbish + furbished + furbisher + furbishes + furbishing + furies + furious + furiouser + furiously + furiousness + furl + furled + furling + furlong + furlongs + furlough + furloughed + furloughs + furls + Furman + furnace + furnaces + furnish + furnished + furnishes + furnishing + furnishings + furniture + furnitures + furor + furors + furred + furrier + furriers + furriest + furriness + furrow + furrowed + furrowing + furrows + furry + furs + further + furtherance + furtherances + furthered + furtherer + furthering + furthermore + furthermost + furthers + furthest + furtive + furtively + furtiveness + fury + furze + fuse + fused + fusee + fuselage + fuselages + fuses + fusibility + fusible + fusiform + fusilade + fusilades + fusileer + fusilier + fusillade + fusilladed + fusillading + fusing + fusion + fusions + fuss + fussbudget + fussed + fusser + fusses + fussier + fussiest + fussily + fussiness + fussing + fusspot + fussy + fustian + fustier + fustiest + fustiness + fusty + futile + futilely + futileness + futilities + futility + future + futureless + futures + futuristic + futurities + futurity + futurologist + futurology + fuze + fuzed + fuzee + fuzing + fuzz + fuzzed + fuzzes + fuzzier + fuzziest + fuzzily + fuzzines + fuzziness + fuzzing + fuzzy + g + g's + GA + gab + gabardine + gabbed + gabber + gabbier + gabbiest + gabbing + gabble + gabbled + gabbler + gabbling + gabbro + gabby + gabelle + gaberdine + gaberlunzie + Gaberones + gabfest + gabion + gable + gabled + gabler + gables + gabling + Gabon + Gabriel + Gabrielle + gad + gadabout + gadded + gadflies + gadfly + gadget + gadgeteer + gadgetry + gadgets + gadid + gadoid + gadolinite + gadolinium + gadroon + gadwall + Gaelic + gaff + gaffe + gaffer + gag + gaga + gage + gaged + gagged + gagger + gagging + gaggle + gaging + gags + gagwriter + gahnite + gaieties + gaiety + Gail + gaillardia + gaily + gain + gained + gainer + gainers + Gaines + Gainesville + gainful + gainfully + gaining + gainly + gains + gainsaid + gainsay + gainsayer + gainsaying + gainst + gait + gaited + gaiter + gaiters + Gaithersburg + gal + gala + galabia + galabiya + galactagogue + galactic + galactometer + galactorrhea + galactose + galactosemia + galactoside + galah + galangal + galantine + Galapagos + Galatea + Galatia + galavant + galax + galaxies + galaxy + galbanum + Galbreath + gale + galea + galeate + Galen + galena + galenical + galenite + Galilee + galimatias + galinaceous + galingale + galiot + galipot + gall + Gallagher + gallant + gallantly + gallantries + gallantry + gallants + gallberry + gallbladder + galleass + galled + gallein + galleon + galleried + galleries + galleriies + gallery + gallet + galleta + galley + galleys + gallfly + galliard + galliass + galligaskins + gallimaufry + gallinacean + gallinaceous + galling + gallinule + galliot + gallipot + gallium + gallivant + galliwasp + gallnut + gallon + gallonage + gallons + galloon + gallop + gallopade + galloped + galloper + galloping + gallops + Galloway + gallows + gallowses + galls + gallstone + Gallup + gallus + Galois + galop + galore + galosh + galoshe + Galt + galvanic + galvanism + galvanization + galvanize + galvanized + galvanizing + galvanometer + Galveston + Galway + gam + gambelli + Gambia + gambit + gamble + gambled + gambler + gamblers + gambles + gambling + gambol + gamboled + gamboling + gambolled + gambolling + gambrel + game + gamecock + gamed + gamekeeper + gamely + gameness + games + gamesmanship + gamester + gamete + gametes + gamier + gamiest + gamin + gamine + gaminess + gaming + gamma + gammon + gamut + gamy + gander + gandhi + gang + ganged + Ganges + ganging + gangland + gangliglia + gangliglions + gangling + ganglion + ganglionic + gangly + gangplank + gangrene + gangrenous + gangs + gangster + gangsterism + gangsters + gangway + gannet + gannets + Gannett + ganoid + gantlet + gantries + gantry + Ganymede + GAO + gaol + gaoler + gap + gape + gaped + gapes + gaping + gapped + gapperi + gapping + gaps + gar + garage + garaged + garages + garaging + garb + garbage + garbages + garbanzo + garbanzos + garbed + garble + garbled + garbling + Garcia + garden + gardened + gardener + gardeners + gardenia + gardening + gardens + Gardner + Garfield + garfish + gargantuan + gargle + gargled + gargles + gargling + gargoyle + Garibaldi + garish + garishly + garishness + garland + garlanded + garlic + garlicky + garment + garments + garner + garnered + garnet + garnish + garnishee + garnisheed + garnisheeing + garnishment + garniture + garotte + garret + Garrett + garrison + garrisoned + Garrisonian + garrote + garroted + garroter + garroting + garrotte + garrotted + garrotting + garrulity + garrulous + garrulously + garrulousness + Garry + gars + garter + garters + Garth + Garvey + Gary + gas + Gascony + gaseous + gaseously + gases + gash + gashes + gasification + gasified + gasify + gasifying + gasket + gaslight + gasolene + gasoline + gasometer + gasp + gasped + Gaspee + gasping + gasps + gassed + gasser + gassier + gassiest + gassing + gassings + gassy + Gaston + gastric + gastritis + gastrointestinal + gastronome + gastronomic + gastronomical + gastronomy + gastropod + gate + gated + Gates + gates + gateway + gatewaying + gateways + gather + gathered + gatherer + gatherers + gathering + gatherings + gathers + gating + Gatlinburg + gator + gauche + gaucheness + gaucherie + gaucho + gauchos + gaud + gaudier + gaudiest + gaudily + gaudiness + gaudy + gauge + gaugeable + gauged + gauger + gauges + gauging + Gauguin + Gaul + gauleiter + Gaulle + gaunt + gauntlet + gauntly + gauntness + gaur + gaus + gauss + Gaussian + gauze + gauzier + gauziest + gauziness + gauzy + gave + gavel + Gavin + gavotte + gawk + gawkier + gawkiest + gawkily + gawkiness + gawky + gay + gayer + gayest + gayeties + gayety + Gaylord + gayly + gayness + gaze + gazebo + gazeboes + gazebos + gazed + gazelle + gazer + gazers + gazes + gazette + gazetted + gazetteer + gazetting + gazing + gcd + gconv + gconvert + gdinfo + GE + gear + geared + gearing + gears + gearshift + gearwheel + gecko + geckoes + geckos + gee + geed + geeing + geese + geezer + Gegenschein + gehey + Geiger + Geigy + geisha + geishas + gel + gelable + gelatin + gelatine + gelatinous + gelatins + geld + gelded + gelding + gelid + gelled + gelling + gels + gelt + gem + geminate + geminated + geminating + gemination + Gemini + Gemma + gemmed + gemming + gems + gemsbok + gemsboks + gemstone + gendarme + gender + genders + gene + genealogical + genealogies + genealogist + genealogy + genecor + genera + general + generalissimo + generalissimos + generalist + generalists + generalities + generality + generalization + generalizations + generalize + generalizeable + generalized + generalizer + generalizers + generalizes + generalizing + generally + generals + generalship + generate + generated + generater + generates + generating + generation + generations + generative + generator + generators + generic + generically + generosities + generosity + generous + generously + generousness + genes + Genesco + geneses + genesis + genet + genetic + genetical + genetically + geneticist + genetics + genetika + Geneva + geneva + Genevieve + genial + geniality + genially + genic + genie + genii + genital + genitalia + genitals + genitive + genius + geniuses + Genoa + genocidal + genocide + genotype + genotypes + genotypic + genre + genres + gent + genteel + genteelly + genteelness + gentian + gentile + gentilities + gentility + gentle + gentled + gentlefolk + gentlefolks + gentleman + gentlemanly + gentlemen + gentleness + gentler + gentlest + gentlewoman + gentlewomen + gentling + gently + gentry + genuflect + genuflection + genuflexion + genuine + genuinely + genuineness + genus + genuses + geocentric + geocentrical + geochemical + geochemistry + geochronology + geodesic + geodesy + geodetic + geoduck + geoemtry + Geoffrey + geographer + geographers + geographic + geographical + geographically + geographies + geography + geologic + geological + geologically + geologies + geologist + geologists + geology + geometer + geometric + geometrical + geometrically + geometrician + geometrid + geometries + geometry + geophysical + geophysicist + geophysics + geopolitic + geopolitics + George + Georgetown + georgette + Georgia + georgia + geosynchronous + Gerald + Geraldine + geranium + Gerard + Gerber + gerbil + Gerhard + Gerhardt + geriatric + geriatrics + germ + German + german + germane + Germanic + germanium + germans + Germantown + Germany + germany + germicidal + germicide + germinal + germinate + germinated + germinates + germinating + germination + germs + gerontology + Gerry + gerrymander + Gershwin + Gertrude + gerund + gerundial + gerundive + gestalt + Gestapo + gestate + gestated + gestating + gestation + gesticulate + gesticulated + gesticulating + gesticulation + gesticulative + gesticulator + gesture + gestured + gesturer + gestures + gesturing + get + getaway + getfd + getid + gets + getspa + getspace + getter + getters + getting + Getty + Gettysburg + gewgaw + geyser + Ghana + ghastlier + ghastliest + ghastliness + ghastly + ghat + ghaut + Ghent + gherkin + ghetto + ghettoes + ghettos + ghost + ghosted + ghostlier + ghostliest + ghostliness + ghostly + ghosts + ghostwrite + ghostwriter + ghostwriting + ghostwritten + ghostwrote + ghoul + ghoulish + ghoulishly + ghoulishness + Giacomo + giant + giantess + giants + gibber + gibberish + gibbet + gibbled + gibbon + gibbous + Gibbs + gibby + gibe + gibed + giber + gibing + giblet + Gibraltar + Gibson + giddap + giddied + giddier + giddiest + giddiness + giddy + giddying + Gideon + gie + gied + gieing + gien + giesel + Gifford + gift + gifted + gifts + gig + gigabit + gigabits + gigabyte + gigabytes + gigacycle + gigahertz + gigantic + gigavolt + gigawatt + gigging + giggle + giggled + giggles + giggling + giggly + gigolo + gigolos + Gil + gila + gilbert + Gilbertson + Gilchrist + gild + gilded + gilder + gilding + gilds + Gilead + Giles + gill + Gillespie + Gillette + Gilligan + gills + Gilmore + gilt + gimbal + gimbals + Gimbel + gimcrack + gimlet + gimmick + gimmicks + gimp + gimpy + gin + Gina + ginger + gingerbread + gingerliness + gingerly + gingersnap + gingery + gingham + ginghams + gingivitis + gingko + gingkoes + gink + ginkgo + ginkgoes + ginmill + Ginn + ginned + Gino + gins + Ginsberg + Ginsburg + ginseng + Giovanni + gip + gipsies + gipsy + giraffe + giraffes + gird + girded + girder + girders + girding + girdle + girdled + girdler + girdling + girl + girlfriend + girlfriends + girlhood + girlie + girlish + girlishly + girlishness + girls + girt + girth + gismo + gismos + gist + Giuliano + Giuseppe + give + giveaway + given + givens + giver + givers + gives + giveth + giving + gizmo + gizzard + glabrous + glace + glacial + glacially + glaciate + glaciated + glaciating + glaciation + glacier + glaciers + glacis + glad + gladden + gladder + gladdest + gladdy + glade + gladiator + gladiatorial + gladiola + gladioli + gladiolus + gladioluses + gladly + gladness + gladsome + gladsomely + Gladstone + Gladys + glair + glairy + glamor + glamorization + glamorize + glamorized + glamorizing + glamorous + glamour + glamourous + glance + glanced + glances + glancing + gland + glanders + glandes + glands + glandular + glans + glare + glared + glares + glaring + glaringly + Glasgow + glass + glassed + glasses + glassful + glassfuls + glassier + glassiest + glassily + glassine + glassiness + glassware + glasswort + glassy + Glaswegian + glaucoma + glaucous + glaze + glazed + glazer + glazes + glazing + gleam + gleamed + gleaming + gleams + glean + gleaned + gleaner + gleaning + gleanings + gleans + Gleason + glee + gleeful + gleefully + gleefulness + glees + glen + Glenda + Glendale + Glenn + glens + glib + glibber + glibbest + glibly + glibness + Glidden + glide + glided + glider + gliders + glides + gliding + glimmer + glimmered + glimmering + glimmers + glimpse + glimpsed + glimpses + glimpsing + glint + glinted + glinting + glints + glissade + glissandi + glissando + glissandos + glisten + glistened + glistening + glistens + glitch + glitches + glitter + glittered + glittering + glitters + glittery + gloaming + gloat + glob + global + globalism + globalist + globally + globe + globed + globefish + globes + globing + globular + globularity + globule + globulin + glockenspiel + glom + glomerate + glomeration + glomerular + gloom + gloomier + gloomiest + gloomily + gloominess + gloomy + glop + Gloria + Gloriana + gloried + glories + glorification + glorified + glorifier + glorifies + glorify + glorifying + glorious + gloriously + glory + glorying + gloss + glossaries + glossary + glossed + glosses + glossier + glossiest + glossiness + glossing + glossolalia + glossy + glottal + glottalize + glottis + Gloucester + glove + gloved + glover + glovers + gloves + gloving + glow + glowed + glower + glowers + glowing + glowingly + glows + glowworm + gloxinia + gloze + glozed + glozing + glucose + glucoside + glue + glued + glues + gluey + gluier + gluiest + gluing + glum + glumly + glummer + glummest + glumness + glut + glutamate + glutamic + glutamine + gluteal + gluten + glutenous + glutetei + gluteus + glutinous + glutinously + glutted + glutton + gluttonies + gluttonous + gluttonously + gluttony + glyceride + glycerin + glycerinate + glycerine + glycerol + glycine + glycogen + glycol + glyph + GM + GMT + gnarl + gnarled + gnarly + gnash + gnat + gnats + gnaw + gnawed + gnawing + gnaws + gneiss + gnome + gnomish + gnomon + gnomonic + gnostic + GNP + gnu + go + Goa + goad + goaded + goal + goaler + goalers + goalie + goalkeeper + goals + goaltender + goat + goatee + goatees + goatherd + goats + goatskin + goatsucker + gob + gobble + gobbled + gobbledygook + gobbler + gobblers + gobbles + gobbling + goblet + goblets + goblin + goblins + god + godchild + godchildren + Goddard + goddaughter + goddess + goddesses + godfather + Godfrey + godhead + godhood + godkin + godless + godlessly + godlessness + godlier + godliest + godlike + godliness + godly + godmother + godmothers + godparent + gods + godsend + godson + Godwin + godwit + goes + Goethe + Goff + gog + goggle + goggled + goggling + Gogh + gogo + going + goings + goiter + goitre + gold + Goldberg + goldbrick + goldbricker + golden + goldeneye + goldenly + goldenness + goldenrod + goldenrods + goldenseal + goldfinch + goldfish + golding + Goldman + golds + goldsmith + Goldstein + Goldstine + Goldwater + Goleta + golf + golfer + golfers + golfing + Goliath + golly + gonad + gonadal + gonads + gondola + gondolier + gone + goner + gong + gongs + gonorrhea + gonorrhoea + Gonzales + Gonzalez + goo + goober + good + goodby + goodbye + goodbyes + Goode + goodies + goodish + goodlier + goodliest + goodliness + goodly + Goodman + goodness + goodnesses + Goodrich + goods + goodwill + Goodwin + goody + Goodyear + gooey + goof + goofed + goofiness + goofs + goofy + gooier + gooiest + gook + goon + goop + goopy + goose + gooseberries + gooseberry + goosed + gooseneck + gooses + goosing + GOP + gopher + Gordian + Gordon + gore + gored + Goren + gorge + gorged + gorgeous + gorgeously + gorges + gorging + gorgon + Gorham + gorier + goriest + gorilla + gorillas + goriness + goring + Gorky + gormandize + gormandized + gormandizer + gormandizing + gorse + gorsy + Gorton + gory + gosh + goshawk + gosling + gospel + gospelers + gospels + gossamer + gossip + gossiped + gossiping + gossips + gossipy + got + Gotham + Gothic + gothic + goto + gotos + gotten + Gottfried + gouache + Goucher + Gouda + gouge + gouged + gouger + gouges + gouging + goulash + Gould + gourd + gourmand + gourmet + gout + goutier + goutiest + gouty + govern + governable + governance + governed + governess + governing + government + governmental + governmentally + governments + governor + governors + governorship + governs + gown + gowned + gowns + GPO + gpss + grab + grabbed + grabber + grabbers + grabbier + grabbiest + grabbing + grabbings + grabby + grabs + grace + graced + graceful + gracefully + gracefulness + graceless + gracelessly + gracelessness + graces + gracing + gracious + graciously + graciousness + grackle + grad + gradate + gradation + gradations + grade + graded + grader + graders + grades + gradient + gradients + grading + gradings + gradual + gradualism + gradually + gradualness + graduate + graduated + graduates + graduating + graduation + graduations + Grady + Graff + graffiti + graffito + graft + grafted + grafter + grafting + grafts + graham + grahams + grail + grain + grained + grainier + grainiest + graininess + graining + grains + grainy + gram + grammar + grammarian + grammars + grammatic + grammatical + grammatically + gramme + gramophone + grampus + grampuses + grams + granaries + granary + grand + grandam + grandaunt + grandchild + grandchildren + granddaughter + grandee + grander + grandest + grandeur + grandfather + grandfathers + grandiloquence + grandiloquent + grandiose + grandiosity + grandly + grandma + grandmother + grandmothers + grandnephew + grandness + grandniece + grandpa + grandparent + grandparents + grands + grandsire + grandson + grandsons + grandstand + granduncle + grange + granite + granitic + grannie + grannies + granny + granola + grant + granted + grantee + granter + granting + grantor + grants + granular + granularity + granulate + granulated + granulates + granulating + granulation + granule + Granville + grape + grapefruit + grapes + grapevine + graph + graphed + grapheme + graphic + graphical + graphically + graphics + graphing + graphite + graphologist + graphology + graphs + grapnel + grapple + grappled + grappling + grasp + graspable + grasped + grasping + graspingly + grasps + grass + grassed + grassers + grasses + grasshopper + grassier + grassiest + grassland + grasslands + grassy + grata + grate + grated + grateful + gratefully + gratefulness + grater + grates + gratification + gratified + gratifies + gratify + gratifying + grating + gratingly + gratings + gratis + gratitude + gratuities + gratuitous + gratuitously + gratuitousness + gratuity + grave + graved + gravel + graveled + graveling + gravelled + gravelling + gravelly + gravely + graven + graveness + graver + Graves + graves + gravest + gravestone + graveyard + gravid + gravies + graving + gravitate + gravitated + gravitates + gravitating + gravitation + gravitational + gravities + gravity + gravy + gray + graybeard + grayed + grayer + grayest + graying + grayish + grayling + graylings + grayness + Grayson + graywacke + graze + grazed + grazer + grazes + grazier + graziers + grazing + grease + greased + greasepaint + greases + greasier + greasiest + greasiness + greasing + greasy + great + greatcoat + greater + greatest + greathearted + greatly + greatness + grebe + Grecian + Greece + greece + greed + greedier + greediest + greedily + greediness + greedy + Greek + greek + greeks + green + greenback + Greenbelt + Greenberg + Greenblatt + Greenbriar + Greene + greener + greeneries + greenery + greenest + Greenfield + greengrocer + greengrocery + greenhorn + greenhouse + greenhouses + greening + greenish + Greenland + greenly + greenness + greens + Greensboro + greenskeeper + greenslade + greensward + greenware + Greenwich + greenwood + Greer + greet + greeted + greeter + greeting + greetings + greets + Greg + gregarious + gregariousness + Gregg + gregor + gregorian + Gregory + gremlin + grenade + grenades + grenadier + grenadine + Grendel + Grenoble + Gresham + Greta + Gretchen + grew + grey + greyest + greyhound + greying + greylag + grf + grid + gridded + gridding + griddle + griddlecake + gridiron + grids + grief + griefs + grievance + grievances + grieve + grieved + griever + grievers + grieves + grieving + grievingly + grievous + grievously + grievousness + griffin + Griffith + griffon + grifter + grill + grille + grilled + grilling + grillroom + grills + grillwork + grilse + grilses + grim + grimace + grimaced + grimacing + Grimaldi + grime + grimed + Grimes + grimier + grimiest + griming + grimly + Grimm + grimmer + grimmest + grimness + grimy + grin + grind + grinder + grinders + grinding + grindings + grinds + grindstone + grindstones + grinned + grinning + grins + grip + gripe + griped + griper + gripes + griping + grippe + gripped + gripper + gripping + grippingly + grips + grislier + grisliest + grisly + grist + gristle + gristly + gristmill + Griswold + grit + grits + gritted + grittier + grittiest + gritting + gritty + grizzle + grizzled + grizzlier + grizzlies + grizzliest + grizzly + groan + groaned + groaner + groaners + groaning + groans + groat + grocer + groceries + grocers + grocery + groenlandicus + grog + groggier + groggiest + groggily + groggy + groin + groins + grommet + groom + groomed + grooming + grooms + groove + grooved + grooves + groovier + grooviest + grooving + groovy + grope + groped + groper + gropes + groping + grosbeak + grosgrain + gross + grossed + grosser + grosses + grossest + Grosset + grossing + grossly + Grossman + grossness + Grosvenor + grotesque + grotesquely + grotesqueness + grotesques + Groton + grotto + grottoes + grottos + grouch + grouchier + grouchiest + grouchy + ground + grounded + grounder + grounders + groundhog + grounding + groundless + grounds + groundsel + groundskeep + groundswell + groundwork + group + grouped + grouper + groupie + grouping + groupings + groupoid + groups + grouse + groused + grouser + grousing + grout + grove + grovel + groveled + groveling + grovelled + grovelling + grovels + Grover + grover + grovers + groves + grow + grower + growers + growing + growl + growled + growler + growling + growls + grown + grownup + grownups + grows + growth + growths + grs + grub + grubbed + grubber + grubbier + grubbiest + grubbiness + grubby + grubs + grubstake + grudge + grudged + grudges + grudging + grudgingly + gruel + grueling + gruelling + gruesome + gruff + gruffly + gruffness + grumble + grumbled + grumbler + grumbles + grumbling + Grumman + grumpier + grumpiest + grumpiness + grumpy + grungier + grungiest + grungy + grunion + grunions + grunt + grunted + grunting + grunts + gruys + grx + gryphon + GSA + GU + Guam + guanaco + guanacos + guanidine + guanine + guano + guanos + guarantee + guaranteed + guaranteeing + guaranteer + guaranteers + guarantees + guaranties + guarantine + guarantor + guaranty + guard + guarded + guardedly + guardhouse + Guardia + guardian + guardians + guardianship + guarding + guards + guardsman + guardsmen + Guatemala + guatemala + guava + gubernatorial + guck + Guelph + Guenther + guerdon + guerilla + guerillas + guernsey + guerrila + guerrilla + guerrillas + guess + guessed + guesses + guessing + guesswork + guest + guests + guff + guffaw + Guggenheim + Guiana + guidable + guidance + guide + guidebook + guidebooks + guided + guideline + guidelines + guidepost + guides + guiding + guignol + guild + guilder + guilders + guildhall + guile + guileful + guileless + Guilford + guillemot + guillotine + guillotined + guillotining + guilt + guiltier + guiltiest + guiltily + guiltiness + guiltless + guiltlessly + guilty + guinea + guineas + guinfo + guise + guises + guitar + guitarist + guitars + gulch + gulches + gules + gulf + gulfs + gull + Gullah + gulled + gullet + gullibility + gullible + gullibly + gullies + gulling + gulls + gully + gulp + gulped + gulping + gulps + gum + gumbo + gumdrop + gummed + gumming + gummy + gumption + gums + gumshoe + gumwood + gun + gunboat + guncotton + Gunderson + gunfight + gunfire + gunflint + gunk + gunky + gunlock + gunman + gunmen + gunmetal + gunned + gunner + gunners + gunnery + gunning + gunny + gunnysack + gunplay + gunpoint + gunpowder + gunrunner + gunrunning + guns + gunship + gunshot + gunsling + gunsmith + Gunther + gunwale + guppies + guppy + gurgle + gurgled + gurgling + Gurkha + guru + Gus + guser + guserid + gush + gushed + gusher + gushes + gushier + gushiest + gushiness + gushing + gushy + gusset + gussie + gussied + gussy + gussying + gust + Gustafson + gustatory + Gustav + Gustave + Gustavus + gusted + gustier + gustiest + gusting + gusto + gusts + gusty + gut + Gutenberg + Guthrie + gutierrez + guts + gutsy + gutted + gutter + guttered + gutters + gutting + guttural + guy + Guyana + guyed + guyer + guyers + guying + guys + guzzle + guzzled + guzzler + guzzling + Gwen + Gwyn + gym + gymnasisia + gymnasisiums + gymnasium + gymnasiums + gymnast + gymnastic + gymnastics + gymnasts + gymnosperm + gynecologist + gynecology + gyp + gypped + gypper + gypsies + gypsite + gypsum + gypsy + gyrate + gyrated + gyrating + gyration + gyrations + gyrator + gyrfalcon + gyro + gyrocompass + gyromagnetic + gyroscope + gyroscopes + gyroscopic + gyrostabilizer + gyve + gyved + gyving + h + h's + ha + Haag + Haas + habeas + haberdasher + haberdasheries + haberdashery + habergeon + Haberman + Habib + habile + habilement + habiliment + habilitate + habit + habitable + habitant + habitat + habitation + habitations + habitats + habits + habitual + habitually + habitualness + habituate + habituated + habituates + habituating + habituation + habitude + habitue + habitus + hacienda + hack + hackamore + hackberry + hackbut + hacked + hacker + hackers + Hackett + hacking + hackle + hackmatack + hackney + hackneyed + hackneys + hacks + hacksaw + had + Hadamard + Haddad + haddock + haddocks + hade + Hades + Hadley + hadn't + Hadrian + hadron + hadst + haematoxylon + hafnium + haft + hag + hagborn + hagbut + Hagen + Hager + hagfish + haggadist + haggard + haggardly + haggis + haggish + haggle + haggled + haggler + haggling + hagiarchy + hagiocracy + hagiographer + hagiographic + hagiography + hagiolatry + hagiology + hagioscope + hagridden + Hagstrom + Hague + hah + haha + Hahn + Haifa + haik + haiku + hail + hailed + hailer + hailes + hailing + hails + hailstone + hailstorm + Haines + hair + hairball + hairbreadth + hairbrush + haircloth + haircut + haircuts + hairdo + hairdodos + hairdresser + hairdressing + hairdryer + hairdryers + haired + hairier + hairiest + hairiness + hairless + hairline + hairnet + hairpiece + hairpin + hairs + hairsbreadth + hairsplitter + hairsplitting + hairspring + hairstreak + hairworm + hairy + Haiti + Haitian + haji + hajj + hajji + hake + hakes + hakim + Hal + halachist + halakhist + halation + halberd + halberdier + halbert + halcyon + hale + haled + haleness + haler + halest + Haley + half + halfback + halfbeak + halfhearted + halfheartedly + halfpence + halfpennies + halfpenny + halftone + halftrack + halfway + halfword + halfwords + halibut + halibuts + halide + halidom + Halifax + haling + halite + halitosis + hall + hallah + hallel + halleluiah + hallelujah + Halley + halliard + hallmark + hallmarks + hallo + halloa + halloo + hallooed + hallooing + hallow + hallowed + Halloween + halls + hallucinate + hallucinated + hallucinating + hallucination + hallucinatory + hallucinogen + hallucinogenic + hallway + hallways + halma + halo + halocarbon + haloed + haloes + halogen + haloing + halos + Halpern + Halsey + Halstead + halt + halted + halter + halters + halting + haltingly + halts + halvah + halve + halved + halvers + Halverson + halves + halving + halyard + ham + Hamal + Hamburg + hamburg + hamburger + hamburgers + Hamilton + hamlet + hamlets + Hamlin + hammer + hammered + hammerhead + hammering + hammers + hammertoe + hammier + hammiest + hamming + hammock + hammocks + Hammond + hammy + hamper + hampered + hampering + hampers + Hampshire + hampshire + Hampton + hams + hamster + hamsters + hamstring + hamstringing + hamstrung + Han + Hancock + hand + handbag + handbags + handball + handbarrow + handbill + handbook + handbooks + handbrake + handbreadth + handcart + handclasp + handcuff + handcuffed + handcuffing + handcuffs + handed + Handel + handful + handfuls + handgun + handhold + handicap + handicapped + handicapper + handicapping + handicaps + handicraft + handicrafts + handicraftsman + handicraftsmen + handier + handiest + handily + handiness + handing + handiwork + handkerchief + handkerchiefs + handle + handleable + handlebar + handled + handler + handlers + handles + handline + handling + handmade + handmaid + handmaiden + handout + handouts + handpick + handpicked + handrail + hands + handsaw + handset + handsets + handshake + handshakes + handshaking + handsome + handsomely + handsomeness + handsomer + handsomest + handspike + handspring + handstand + handwaving + handwork + handwrite + handwriting + handwritten + handy + handyman + handymen + Haney + Hanford + hang + hangable + hangar + hangars + hangdog + hanged + hanger + hangers + hanging + hangman + hangmen + hangnail + hangout + hangouts + hangover + hangovers + hangs + hangups + hank + Hankel + hanker + hankering + Hanley + Hanlon + Hanna + Hannah + Hannibal + Hanoi + Hanover + Hanoverian + Hans + Hansel + Hansen + hansom + Hanson + Hanukkah + hap + haphazard + haphazardly + haphazardness + hapless + haplessly + haplessness + haploid + haploidy + haplology + haply + happed + happen + happened + happening + happenings + happens + happenstance + happier + happiest + happily + happiness + happing + happy + Hapsburg + harangue + harangued + haranguing + harass + harassed + harasses + harassing + harassment + Harbin + harbinger + harbor + harbored + harboring + harbors + harbour + Harcourt + hard + hardbake + hardboard + hardboiled + hardcopy + harden + hardened + hardener + hardening + hardens + harder + hardest + hardfisted + hardhat + hardheaded + hardheadedness + hardhearted + hardheartedly + hardheartedness + hardier + hardiest + hardihood + hardily + Hardin + hardiness + hardly + hardness + hardnose + hardpan + hardscrabble + hardship + hardships + hardtack + hardtop + hardware + hardwired + hardwood + hardworking + hardy + hare + harebrained + hareem + harelip + harem + hares + hark + harken + Harlan + Harlem + Harley + harlot + harlotry + harlots + harm + harmed + harmer + harmful + harmfully + harmfulness + harming + harmless + harmlessly + harmlessness + Harmon + harmonic + harmonica + harmonics + harmonies + harmonious + harmoniously + harmoniousness + harmonium + harmonize + harmonized + harmonizer + harmonizing + harmony + harms + harness + harnessed + harnessing + Harold + harp + harper + harpers + harping + harpist + harpoon + harpooner + harpsichord + Harpy + harridan + harried + harrier + Harriet + Harriman + Harrington + Harris + Harrisburg + Harrison + harrow + harrowed + harrowing + harrows + harry + harrying + harsh + harshen + harsher + harshest + harshly + harshness + hart + hartebeest + Hartford + Hartley + Hartman + hartshorn + Harvard + harvard + harvest + harvestable + harvested + harvester + harvesting + harvestman + harvestmen + harvests + Harvey + has + hasenpfeffer + hash + hashed + hasheesh + hasher + hashes + hashing + hashish + hasn + hasn't + hasp + haspling + haspspecs + hassle + hassled + hassles + hassling + hassock + hast + haste + hasted + hasten + hastened + hastening + hastens + hastier + hastiest + hastily + hastiness + hasting + Hastings + hastings + hasty + hat + hatch + hatched + hatcheries + hatchery + hatches + hatchet + hatchets + hatching + hatchway + hate + hated + hateful + hatefully + hatefulness + hater + hates + Hatfield + hath + Hathaway + hating + hatrack + hatred + hatreds + hats + hatted + hatter + Hatteras + hatters + Hattie + Hattiesburg + hatting + hauberk + Haugen + haughtier + haughtiest + haughtily + haughtiness + haughty + haul + haulage + hauled + hauler + hauling + hauls + haunch + haunches + haunt + haunted + haunter + haunting + hauntingly + haunts + Hausdorff + hautboy + hauteur + Havana + have + haven + haven't + havens + haversack + haves + Havilland + having + havoc + haw + Hawaii + hawaii + Hawaiian + hawaiian + hawk + hawked + hawker + hawkers + hawking + Hawkins + hawkmoth + hawks + hawksbill + Hawley + hawser + hawthorn + Hawthorne + hay + haycock + Hayden + Haydn + Hayes + hayfield + haying + hayloft + haymaker + haymow + Haynes + hayrick + hayride + hays + hayseed + haystack + haystacks + hayward + haywire + hazard + hazardous + hazardously + hazards + haze + hazed + hazel + hazelnut + hazes + hazier + haziest + hazily + haziness + hazing + hazy + hcb + hconvert + hdlc + he + he'd + he'll + head + headache + headaches + headboard + headcheese + headdress + headed + headend + headends + header + headers + headfirst + headforemost + headgear + headhunter + headhunting + headier + headiest + headiness + heading + headings + headlamp + headland + headlands + headlight + headlights + headline + headlined + headlines + headlining + headlong + headman + headmaster + headmen + headmistress + headphone + headpiece + headpin + headquarter + headquarters + headrest + headroom + heads + headset + headsman + headsmen + headstand + headstock + headstone + headstones + headstrong + headwall + headwater + headwaters + headway + headwind + headwork + heady + heal + healed + healer + healers + Healey + healing + heals + health + healthcare + healthful + healthfully + healthfulness + healthier + healthiest + healthily + healthiness + healths + healthy + Healy + heap + heaped + heaping + heaps + hear + heard + hearer + hearers + hearing + hearings + hearken + hears + hearsay + hearse + Hearst + heart + heartache + heartbeat + heartbreak + heartbreaking + heartbroken + heartburn + hearten + heartfelt + hearth + hearthstone + heartier + hearties + heartiest + heartily + heartiness + heartless + heartlessly + heartlessness + heartrending + hearts + heartsick + heartsore + heartstrings + heartwarming + heartwood + hearty + heat + heatable + heated + heatedly + heater + heaters + heath + heathen + heathenish + heathenism + heathens + heather + heathers + Heathkit + heating + heats + heatstroke + heave + heaved + heaven + heavenly + heavens + heavenward + heavenwards + heaver + heavers + heaves + heavier + heavies + heaviest + heavily + heaviness + heaving + heavy + heavyweight + Hebe + hebephrenic + Hebraic + Hebrew + hebrew + Hecate + hecatomb + heck + heckle + heckled + heckler + heckling + Heckman + hectar + hectare + hectares + hectic + hectically + hecticly + hectograph + hector + Hecuba + hedge + hedged + hedgehog + hedgehogs + hedgehop + hedgehopped + hedgehopping + hedgerow + hedges + hedging + hedonism + hedonist + hedonistic + heed + heeded + heedful + heedfully + heeding + heedless + heedlessly + heedlessness + heeds + heehaw + heel + heeled + heelers + heeling + heels + heft + heftier + heftiest + heftiness + hefty + Hegelian + hegemonies + hegemony + hegira + Heidelberg + heifer + heigh + height + heighten + heightened + heightening + heightens + heights + Heine + heinous + heinously + Heinrich + Heinz + heir + heiress + heiresses + heirloom + heirs + Heisenberg + heist + held + Helen + Helena + Helene + Helga + helical + helically + helices + helicity + helicopter + heliocentric + heliotrope + heliport + helium + helix + helixes + hell + hellbender + hellbent + hellcat + hellebore + Hellenic + hellfire + hellgrammite + hellion + hellish + hellishly + hellman + hello + helloed + helloing + hellos + hells + helm + helmet + helmets + Helmholtz + helmsman + helmsmen + Helmut + helot + help + helped + helper + helpers + helpful + helpfully + helpfulness + helping + helpless + helplessly + helplessness + helpmate + helpmeet + helps + Helsinki + helsinki + helve + helved + Helvetica + helving + hem + hemagglutinin + hematite + hematologist + hematology + Hemingway + hemipteran + hemipterous + hemisphere + hemispheres + hemispheric + hemispherical + hemline + hemlock + hemlocks + hemmed + hemmer + hemoglobin + hemolysate + hemolytic + hemophilia + hemophiliac + hemorrhage + hemorrhaged + hemorrhagic + hemorrhaging + hemorrhoid + hemorrhoidal + hemosiderin + hemostat + hemostats + hemp + hempen + Hempstead + hems + hemstitch + hemstitcher + hemstitching + hen + henbane + hence + henceforth + henceforward + henchman + henchmen + Henderson + Hendrick + Hendrickson + henequen + henhouse + Henley + henna + hennaed + hennaing + henpeck + henpecked + Henri + henries + Henrietta + henry + henrys + hens + hepatic + hepatica + hepatitis + Hepburn + heptagon + heptagonal + heptane + her + Hera + Heraclitus + herald + heralded + heraldic + heralding + heraldries + heraldry + heralds + herb + herbaceous + herbage + herbal + herbalist + herbariia + herbariiums + herbarium + Herbert + herbicidal + herbicide + herbivore + herbivores + herbivorous + herbs + Herculean + Hercules + herd + herded + herder + herding + herds + herdsman + herdsmen + here + hereabout + hereabouts + hereafter + hereby + hereditable + hereditary + heredities + heredity + Hereford + herein + hereinabove + hereinafter + hereinbelow + hereof + heres + heresies + heresy + heretic + heretical + heretically + heretics + hereto + heretofore + hereunder + hereunto + hereupon + herewith + heritabilities + heritability + heritable + heritage + heritages + Herkimer + Herman + Hermann + hermaphrodite + hermaphroditic + hermeneutic + Hermes + hermetic + hermetical + hermetically + hermit + hermitage + Hermite + hermitian + hermits + Hermosa + Hernandez + hernia + herniae + hernial + hernias + herniate + herniated + herniating + herniation + hero + Herodotus + heroes + heroic + heroical + heroically + heroics + heroin + heroine + heroines + heroism + heron + herons + herpes + herpetologist + herpetology + Herr + herring + herringbone + herrings + hers + Herschel + herself + Hershel + Hershey + hertz + Hertzog + hesitance + hesitancies + hesitancy + hesitant + hesitantly + hesitate + hesitated + hesitater + hesitates + hesitating + hesitatingly + hesitation + hesitations + Hesperus + Hess + Hesse + Hessian + Hester + heterocyclic + heterodox + heterodoxies + heterodoxy + heterodyne + heterogamous + heterogeneities + heterogeneity + heterogeneous + heterogeneously + heterogeneousness + heterogenous + heterophobia + heterosexual + heterostructure + heterozygosity + heterozygote + heterozygotes + heterozygous + Hetman + Hettie + Hetty + Heublein + heuristic + heuristically + heuristics + Heusen + Heuser + hew + hewed + hewer + Hewett + hewing + Hewitt + Hewlett + hewn + hews + hex + hexachloride + hexadd + hexadecimal + hexafluoride + hexagon + hexagonal + hexagonally + hexagons + hexameter + hexane + hexanes + hexapod + hexs + hexsub + hey + heyday + hi + Hiatt + hiatus + hiatuses + Hiawatha + hibachi + hibachis + Hibbard + hibernate + hibernated + hibernating + hibernation + Hibernia + hibiscus + hiccough + hiccup + hiccuped + hiccuping + hiccupped + hiccupping + hick + Hickey + Hickman + hickories + hickory + hid + hidalgo + hidalgos + hidden + hide + hideaway + hidebound + hideous + hideously + hideousness + hideout + hideouts + hides + hiding + hie + hied + hieing + hierarchal + hierarchial + hierarchic + hierarchical + hierarchically + hierarchies + hierarchy + hieratic + hieroglyphic + Hieronymus + hifalutin + Higgins + high + highball + highborn + highboy + highbrow + highchair + higher + highest + highfalutin + highfaluting + highhanded + highhandedly + highhandedness + highland + highlander + highlands + highlight + highlighted + highlighting + highlights + highly + highness + highnesses + highroad + hightail + highway + highwayman + highwaymen + highways + hijack + hijacked + hijacker + hijackings + hike + hiked + hiker + hikes + hiking + hila + hilarious + hilariously + hilarity + Hilbert + hilborn + Hildebrand + hill + hillbillies + hillbilly + Hillcrest + Hillel + hillier + hilliest + hilliness + hillman + hillmen + hillock + hills + hillside + hillsides + hilltop + hilltops + hilly + hilt + Hilton + hilts + hilum + him + Himalaya + himalayan + himself + hind + hindbrain + hinder + hindered + hindering + hindermost + hinders + hindmost + hindquarter + hindrance + hindrances + hindsight + Hindu + hindu + Hines + hinge + hinged + hinges + hinging + Hinman + hint + hinted + hinterland + hinting + hints + hip + hipped + hipper + hippest + hippie + hippies + hippo + Hippocrates + Hippocratic + hippodrome + hippopotami + hippopotamus + hippopotamuses + hippos + hippy + hips + hipster + Hiram + hire + hired + hireling + hirer + hirers + hires + hiring + hirings + Hiroshi + Hiroshima + Hirsch + hirsute + his + Hispanic + hiss + hissed + hisses + hissing + hist + histamine + histidine + histochemic + histochemistry + histogram + histograms + histology + historian + historians + historic + historical + historically + historicity + histories + historiography + history + histrionic + histrionics + hit + Hitachi + hitch + Hitchcock + hitched + hitches + hitchhike + hitchhiked + hitchhiker + hitchhikers + hitchhikes + hitchhiking + hitching + hither + hitherto + Hitler + hits + hitter + hitters + hitting + hive + hived + hives + hiving + ho + hoagie + hoagies + Hoagland + hoagy + hoar + hoard + hoarder + hoarding + hoarfrost + hoarier + hoariest + hoariness + hoarse + hoarsely + hoarseness + hoarser + hoarsest + hoary + hoax + hob + Hobart + Hobbes + hobbies + hobble + hobbled + hobbles + hobbling + Hobbs + hobby + hobbyhorse + hobbyist + hobbyists + hobgoblin + hobnail + hobnailed + hobnob + hobnobbed + hobnobbing + hobo + hoboes + Hoboken + hobos + hoc + hock + hockey + hockshop + hod + hodge + hodgepodge + Hodges + Hodgkin + hoe + hoecake + hoed + hoedown + hoeing + hoes + Hoff + Hoffman + hog + hogan + hogg + hogged + hogging + hoggish + hoggishly + hogs + hogshead + hogtie + hogtied + hogtieing + hogtying + hogwash + hoho + hoi + hoist + hoisted + hoisting + hoists + Hokan + hoke + hoked + hokey + hoking + hokum + Holbrook + Holcomb + hold + holden + holder + holders + holding + holdings + holdout + holdover + holds + holdup + hole + holeable + holed + holes + holey + holgate + holiday + holidays + holier + holies + holiest + holiness + holing + holistic + Holland + holland + Hollandaise + holler + Hollerith + hollies + Hollingsworth + Hollister + hollow + Holloway + hollowed + hollowing + hollowly + hollowness + hollows + hollowware + holly + hollyhock + Hollywood + Holm + Holman + Holmdel + Holmes + holmium + holocaust + Holocene + hologram + holograms + holograph + holographic + holography + Holst + Holstein + holster + holt + holy + Holyoke + holystone + Hom + homage + hombre + homburg + home + homebound + homebuilder + homebuilding + homecoming + homed + homeland + homeless + homelier + homeliest + homelike + homeliness + homely + homemade + homemake + homemaker + homemakers + homemaking + homeomorph + homeomorphic + homeomorphism + homeomorphisms + homeopath + homeopathic + homeopathy + homeowner + homer + Homeric + homers + homes + homesick + homesickness + homespun + homestead + homesteader + homesteaders + homesteads + homestretch + homeward + homewards + homework + homey + homeyness + homicidal + homicide + homier + homiest + homiletic + homiletics + homilies + homily + homing + hominy + homo + homogenate + homogeneities + homogeneity + homogeneous + homogeneously + homogeneousness + homogenize + homogenized + homogenizing + homograph + homologies + homologous + homologue + homology + homomorphic + homomorphism + homomorphisms + homonym + homophobia + homophobic + homophone + homopterous + homosexual + homosexuality + homotopy + homozygote + homozygotes + homozygous + homunculus + Honda + hondo + Honduras + honduras + hone + honed + honer + hones + honest + honestly + honesty + honey + honeybee + honeycomb + honeycombed + honeydew + honeyed + honeymoon + honeymooned + honeymooner + honeymooners + honeymooning + honeymoons + honeys + honeysuckle + Honeywell + hong + honing + honk + Honolulu + honolulu + honor + honorable + honorableness + honorably + honoraria + honoraries + honorarium + honorariums + honorary + honored + honoree + honorer + honorific + honoring + honors + honour + honoured + Honshu + hooch + hood + hooded + hoodlum + hoodoo + hoodoos + hoods + hoodwink + hoodwinked + hoodwinking + hoodwinks + hooey + hoof + hoofbeat + hoofed + hoofer + hoofmark + hoofs + hook + hooka + hookah + hooked + hooker + hookers + hooking + hooks + hookup + hookups + hookworm + hooky + hooligan + hooliganism + hoop + hooper + hoopla + hoops + hooray + hoosegow + hoosgow + Hoosier + hoot + hooted + hooter + hooting + hoots + Hoover + hooves + hop + hope + hoped + hopeful + hopefully + hopefulness + hopefuls + hopeless + hopelessly + hopelessness + hopes + hoping + Hopkins + Hopkinsian + hopped + hopper + hoppers + hopping + hopple + hops + hopsack + hopsacking + hopscotch + Horace + Horatio + horde + hordes + horehound + horizon + horizons + horizontal + horizontally + hormonal + hormone + hormones + horn + hornbeam + hornblende + Hornblower + hornbook + horned + hornet + hornets + hornier + horniest + horning + hornless + hornmouth + hornpipe + horns + horntail + hornwort + horny + horologic + horological + horologist + horology + horoscope + Horowitz + horrendous + horrendously + horrible + horribleness + horribly + horrid + horridly + horridness + horrific + horrified + horrifies + horrify + horrifying + horror + horrors + horse + horseback + horsed + horsedom + horseflesh + horseflies + horsefly + horsehair + horsehide + horselaugh + horseman + horsemanship + horsemen + horseplay + horsepower + horseradish + horses + horseshoe + horseshoer + horsetail + horsewhip + horsewhipped + horsewhipping + horsewoman + horsewomen + horsey + horsier + horsiest + horsing + horsy + hortative + hortatory + horticultural + horticulture + horticulturist + Horton + Horus + hosanna + hose + hosed + hoses + hosier + hosiery + hosing + hospice + hospitable + hospitably + hospital + hospitalities + hospitality + hospitalization + hospitalize + hospitalized + hospitalizes + hospitalizing + hospitals + host + hostage + hostages + hosted + hostel + hostelries + hostelry + hostess + hostesses + hostile + hostilely + hostilities + hostility + hosting + hostler + hosts + hot + hotbed + hotbox + hotel + hotelman + hotels + hotfoot + hothead + hotheaded + hothouse + hotline + hotly + hotness + hotrod + hotsprings + hotter + hottest + Houdaille + Houdini + hough + Houghton + hound + hounded + hounding + hounds + hour + hourglass + houri + houris + hourly + hours + house + houseboat + houseboy + housebreak + housebreaking + housebroke + housebroken + housecoat + housed + housedress + houseflies + housefly + houseful + household + householder + householders + households + housekeep + housekeeper + housekeepers + housekeeping + housemaid + housemother + houses + housetop + housetops + housewares + housewarming + housewife + housewifely + housewives + housework + housing + Houston + houston + hove + hovel + hovels + hover + hovered + hovering + hovers + how + Howard + howbeit + howdah + howdy + Howe + Howell + however + howitzer + howl + howled + howler + howling + howls + howsoever + howsomever + hoy + hoyden + hoydenish + Hoyt + Hrothgar + huaraches + hub + Hubbard + Hubbell + hubbub + hubby + Huber + Hubert + hubris + hubs + huck + huckleberries + huckleberry + huckster + huddle + huddled + huddling + Hudson + hue + hues + huff + huffaker + huffier + huffiest + huffily + Huffman + huffy + hug + huge + hugely + hugeness + hugged + hugging + Huggins + Hugh + Hughes + Hugo + huh + hula + hulk + hulking + hulky + hull + hullabaloo + hulls + hum + human + humane + humanely + humaneness + humanism + humanist + humanistic + humanitarian + humanitarianism + humanities + humanity + humanize + humanized + humanizing + humankind + humanly + humanness + humanoid + humans + humble + humbled + humbleness + humbler + humblest + humbling + humbly + Humboldt + humbug + humbugged + humbugging + humdinger + humdrum + humectant + humeral + humermeri + humerus + humid + humidification + humidified + humidifier + humidifiers + humidifies + humidify + humidifying + humidistat + humidities + humidity + humidly + humidor + humiliate + humiliated + humiliates + humiliating + humiliation + humiliations + humility + hummed + Hummel + humming + hummingbird + hummock + humor + humored + humorer + humorers + humoresque + humoring + humorist + humorous + humorously + humorousness + humors + humour + hump + humpback + humpbacked + humped + humph + Humphrey + humpty + hums + humus + Hun + hunch + hunchback + hunchbacked + hunched + hunches + hundred + hundredfold + hundreds + hundredth + hundredweight + hung + Hungarian + Hungary + hungary + hunger + hungered + hungering + hungers + hungrier + hungriest + hungrily + hungry + hunk + hunker + hunks + hunt + hunted + hunter + hunters + hunting + Huntington + Huntley + huntress + hunts + huntsman + huntsmen + Huntsville + Hurd + hurdle + hurdled + hurdler + hurdling + hurl + hurled + hurler + hurlers + hurley + hurling + Huron + hurrah + hurray + hurricane + hurricanes + hurridly + hurried + hurriedly + hurries + hurry + hurrying + Hurst + hurt + hurtful + hurtfully + hurting + hurtle + hurtled + hurtling + hurts + hurty + Hurwitz + husband + husbanded + husbanding + husbandman + husbandmen + husbandry + husbands + hush + hushed + hushes + hushing + husk + husked + husker + huskier + huskies + huskiest + huskily + huskiness + husking + husks + husky + hussar + hussies + hussy + hustings + hustle + hustled + hustler + hustles + hustling + Huston + hut + hutch + Hutchins + Hutchinson + Hutchison + huts + Huxley + Huxtable + huzzah + hyacinth + Hyades + hyaline + Hyannis + hybrid + hybridize + hybridized + hybridizing + Hyde + hydra + hydrangea + hydrant + hydrate + hydrated + hydrating + hydration + hydraulic + hydraulically + hydraulics + hydride + hydro + hydrocarbon + hydrocarbons + hydrochemistry + hydrochloric + hydrochloride + hydrodynamic + hydrodynamics + hydroelectric + hydrofluoric + hydrofoil + hydrogen + hydrogenate + hydrogenated + hydrogenating + hydrogenation + hydrogenous + hydrogens + hydrology + hydrolyses + hydrolysis + hydrometer + hydronium + hydrophilic + hydrophobia + hydrophobic + hydroplane + hydroponics + hydrosphere + hydrostatic + hydrostatically + hydrostatics + hydrotherapy + hydrothermal + hydrous + hydroxide + hydroxy + hydroxyl + hydroxylate + hydrozoan + hyena + hygiene + hygienic + hygienically + hygienist + hygrometer + hygroscope + hygroscopic + hying + hyla + hylidae + hylids + Hyman + hymen + hymenal + hymeneal + hymenopteran + hymn + hymnal + hymnbook + hymnist + hymnodist + hymnody + hymnologist + hymnology + hymns + hype + hyped + hyper + hyperacidity + hyperactive + hyperbola + hyperbolae + hyperbolas + hyperbole + hyperbolic + hyperboloid + hyperboloidal + hyperborean + hypercritical + hypermetropia + hypernotion + hypernotions + hypersensitive + hypersensitivity + hypersonic + hypertension + hypertensive + hyperthyroid + hyperthyroidism + hypertrophied + hypertrophy + hypertrophying + hyphantria + hyphen + hyphenate + hyphenated + hyphenating + hyphenation + hyphens + hyping + hypnoses + hypnosis + hypnotic + hypnotically + hypnotism + hypnotist + hypnotize + hypnotized + hypnotizing + hypo + hypoactive + hypochlorite + hypochlorous + hypochondria + hypochondriac + hypochondriacal + hypocrisies + hypocrisy + hypocrite + hypocrites + hypocritic + hypocritical + hypocritically + hypocycloid + hypodermic + hypodermically + hypodermics + hypophyseal + hypos + hypotenuse + hypothalamic + hypothalamus + hypothenuse + hypotheses + hypothesis + hypothesize + hypothesized + hypothesizer + hypothesizes + hypothesizing + hypothetic + hypothetical + hypothetically + hypothyroid + hypothyroidism + hyssop + hysterectomies + hysterectomy + hysteresis + hysteria + hysteric + hysterical + hysterically + hysteron + i + I'd + I'll + I'm + i's + I've + i.e + IA + iamb + iambi + iambic + iambus + iambuses + Ian + iare + iatric + iatrogenic + Iberia + ibex + ibexes + ibices + ibid + ibis + IBM + ibm + Ibn + Icarus + ICC + ice + iceberg + icebergs + iceblink + iceboat + icebound + icebox + icebreaker + icecap + iced + icefall + icehouse + iceland + Icelandic + iceman + icemen + ices + iceskate + iceskated + iceskating + ichneumon + ichnite + ichnography + ichnology + ichor + ichthyic + ichthyoid + ichthyolite + ichthyologist + ichthyology + ichthyophagous + ichthyornis + ichthyosaur + ichthyosis + icicle + icicled + icier + iciest + icily + iciness + icing + icings + ickier + ickiest + icky + icon + iconic + iconoclasm + iconoclast + iconoclastic + iconography + iconolatry + iconology + iconoscope + iconostasis + icons + iconv + iconvert + icosahedra + icosahedral + icosahedron + icteric + icterus + ictus + icy + ID + id + Ida + Idaho + idea + ideal + idealised + idealism + idealist + idealistic + idealistically + ideality + idealization + idealizations + idealize + idealized + idealizes + idealizing + ideally + ideals + idealy + ideas + ideate + ideation + idem + idempotency + idempotent + idenitifiers + identic + identical + identically + identifiable + identifiably + identification + identifications + identified + identifier + identifiers + identifies + identify + identifying + identities + identity + ideogram + ideographic + ideography + ideolect + ideological + ideologically + ideologies + ideologize + ideologue + ideology + ideomotor + ideoogist + ideophone + ides + idioblast + idiocies + idiocy + idiolect + idiom + idiomatic + idiomatically + idiomorphic + idiopathic + idiophone + idioplasm + idiosyncracies + idiosyncracy + idiosyncrasies + idiosyncrasy + idiosyncratic + idiot + idiotic + idiotically + idiotism + idiots + idle + idled + idleness + idler + idlers + idles + idlesse + idlest + idling + idly + idocrase + idol + idolater + idolatress + idolatries + idolatrize + idolatrous + idolatry + idolised + idolism + idolization + idolize + idolized + idolizing + idols + idyl + idyll + idyllic + idyllist + IEEE + ieee + if + iffy + ifint + Ifni + ifreal + ifree + igloo + igloos + igneous + ignescent + ignitable + ignite + ignited + igniter + ignites + ignitible + igniting + ignition + ignitor + ignoble + ignobly + ignominies + ignominious + ignominiously + ignominy + ignoramus + ignoramuses + ignorance + ignorant + ignorantly + ignore + ignored + ignorer + ignores + ignoring + Igor + iguana + ii + iiasa + iii + Ike + ikon + IL + ilea + ileum + ilex + ilia + iliac + Iliad + ilium + ilk + ill + illegal + illegalities + illegality + illegally + illegibility + illegible + illegibly + illegitimacies + illegitimacy + illegitimate + illegitimately + illiberal + illicit + illicitly + illimitable + illimitably + Illinois + illinois + illiteracy + illiterate + illiterately + illiterates + illness + illnesses + illogic + illogical + illogically + ills + illume + illuminable + illuminant + illuminate + illuminated + illuminates + illuminating + illumination + illuminations + illuminative + illumine + illumined + illumining + illusion + illusionary + illusionist + illusions + illusive + illusively + illusory + illustrate + illustrated + illustrates + illustrating + illustration + illustrations + illustrative + illustratively + illustrator + illustrators + illustrious + illustriously + illustriousness + illy + Ilona + Ilyushin + image + imaged + imagen + imageries + imagery + images + imaginable + imaginably + imaginary + imaginate + imagination + imaginations + imaginative + imaginatively + imagine + imagined + imagines + imaging + imagining + imaginings + imbalance + imbalances + imbecile + imbecilic + imbecility + imbed + imbedded + imbedding + imbibe + imbibed + imbiber + imbibing + Imbrium + imbroglio + imbroglios + imbrue + imbrued + imbruing + imbue + imbued + imbuing + imitable + imitate + imitated + imitates + imitating + imitation + imitations + imitative + imitator + immaculate + immaculately + immaculateness + immanence + immanent + immanently + immaterial + immaterially + immature + immaturity + immeasurable + immeasurably + immediacies + immediacy + immediate + immediately + immediatly + immemorial + immemorially + immense + immensely + immenseness + immensities + immensity + immerse + immersed + immerses + immersing + immersion + immigrant + immigrants + immigrate + immigrated + immigrates + immigrating + immigration + imminence + imminent + imminently + immiscibility + immiscible + immobile + immobility + immobilization + immobilize + immobilized + immobilizing + immoderate + immoderately + immodest + immodestly + immodesty + immolate + immolated + immolating + immolation + immoral + immoralities + immorality + immorally + immortal + immortality + immortalize + immortalized + immortalizing + immortally + immovability + immovable + immovably + immune + immunities + immunity + immunization + immunize + immunized + immunizing + immunoelectrophoresis + immunologist + immunology + immure + immured + immuring + immutability + immutable + immutably + imp + impact + impacted + impacting + impaction + impactor + impactors + impacts + impair + impaired + impairing + impairment + impairs + impala + impalas + impale + impaled + impalement + impaling + impalpable + impanel + impaneled + impaneling + impanelled + impanelling + impart + impartation + imparted + impartial + impartiality + impartially + imparts + impassable + impasse + impassible + impassion + impassioned + impassionedly + impassive + impassively + impassivity + impatience + impatient + impatiently + impeach + impeachable + impeached + impeachment + impeccability + impeccable + impeccably + impecunious + impedance + impedances + impede + impeded + impedes + impediment + impedimenta + impediments + impeding + impel + impelled + impeller + impelling + impend + impending + impenetrability + impenetrable + impenetrably + impenitence + impenitent + impenitently + imperate + imperative + imperatively + imperatives + imperator + imperceivable + imperceptible + imperceptibly + imperfect + imperfection + imperfections + imperfectly + imperfectness + imperforate + imperforation + imperial + imperialism + imperialist + imperialistic + imperialists + imperially + imperil + imperiled + imperiling + imperilled + imperilling + imperilment + imperious + imperiously + imperishable + imperishably + impermanence + impermanent + impermeability + impermeable + impermeably + impermissible + impersonal + impersonality + impersonally + impersonate + impersonated + impersonates + impersonating + impersonation + impersonations + impersonator + impertinence + impertinencies + impertinency + impertinent + impertinently + imperturbable + imperturbably + impervious + imperviously + imperviousness + impetigo + impetuosity + impetuous + impetuously + impetus + impetuses + impiety + impinge + impinged + impinges + impinging + impious + impiously + impish + impishly + impishness + implacability + implacable + implacably + implant + implantation + implanted + implanting + implants + implausible + implausibly + implement + implementable + implementation + implementational + implementations + implemented + implementer + implementers + implementing + implementor + implementors + implements + implicant + implicants + implicate + implicated + implicates + implicating + implication + implications + implicit + implicitly + implicitness + implied + implies + implode + imploded + imploding + implore + implored + imploring + imploringly + implosion + imply + implying + impolite + impolitely + impoliteness + impolitic + impoliticly + imponderable + import + importability + importance + important + importantly + importation + imported + importer + importers + importing + imports + importunate + importunately + importune + importuned + importunely + importuning + importunities + importunity + impose + imposed + imposes + imposing + imposingly + imposition + impositions + impossibilities + impossibility + impossible + impossibly + impost + imposter + impostor + impostors + imposture + impotence + impotency + impotent + impotently + impound + impoverish + impoverished + impoverishment + impracticable + impracticably + impractical + impracticality + impractically + imprecate + imprecated + imprecating + imprecation + imprecise + imprecisely + imprecision + impregnability + impregnable + impregnably + impregnate + impregnated + impregnating + impregnation + impresario + impresarios + imprescriptible + imprescriptibly + impress + impressed + impresser + impresses + impressible + impressing + impression + impressionable + impressionism + impressionist + impressionistic + impressionistically + impressions + impressive + impressively + impressiveness + impressment + imprimatur + imprint + imprinted + imprinting + imprints + imprison + imprisoned + imprisoning + imprisonment + imprisonments + imprisons + improbabilities + improbability + improbable + improbably + impromptu + improper + improperly + improprieties + impropriety + improvable + improve + improved + improvement + improvements + improves + improvidence + improvident + improvidently + improving + improvisate + improvisation + improvisational + improvisations + improvise + improvised + improviser + improvisers + improvises + improvising + improvisor + imprudence + imprudent + imprudently + imps + impudence + impudent + impudently + impugn + impugnation + impulse + impulses + impulsion + impulsive + impulsively + impulsiveness + impunity + impure + impurely + impurities + impurity + imputation + impute + imputed + imputing + in + inability + inaccessibility + inaccessible + inaccessibly + inaccuracies + inaccuracy + inaccurate + inaction + inactivate + inactivated + inactivating + inactivation + inactive + inactivity + inadequacies + inadequacy + inadequate + inadequately + inadequateness + inadmissibility + inadmissible + inadvertantly + inadvertence + inadvertent + inadvertently + inadvisable + inalienability + inalienable + inalienably + inalterable + inamorata + inane + inanely + inanimate + inanimately + inanities + inanity + inappeasable + inapplicable + inappreciable + inapproachable + inappropriate + inappropriately + inappropriateness + inapt + inaptitude + inarticulate + inarticulately + inarticulateness + inasmuch + inattention + inattentive + inattentively + inattentiveness + inaudible + inaugural + inaugurate + inaugurated + inaugurating + inauguration + inaugurator + inauspicious + inbits + inboard + inborn + inbound + inbred + inbreed + inbreeding + Inc + Inca + incalculable + incalculably + incandescence + incandescent + incant + incantation + incapable + incapacitate + incapacitated + incapacitating + incapacitation + incapacities + incapacity + incarcerate + incarcerated + incarcerating + incarceration + incarnadine + incarnadined + incarnadining + incarnate + incarnated + incarnating + incarnation + incarnations + incase + incased + incasing + incautious + incendiaries + incendiarism + incendiary + incense + incensed + incenses + incensing + incentive + incentives + inception + inceptor + incessant + incessantly + incest + incestuous + incestuously + inch + inched + inches + inching + inchmeal + inchoate + inchoately + inchworm + incidence + incident + incidental + incidentally + incidentals + incidents + incinerate + incinerated + incinerating + incineration + incinerator + incipience + incipient + incipiently + incise + incised + incising + incision + incisive + incisively + incisor + incite + incited + incitement + inciter + incites + inciting + inclemencies + inclemency + inclement + inclemently + inclination + inclinations + incline + inclined + inclines + inclining + inclinometer + inclose + inclosed + incloses + inclosing + inclosure + include + included + includes + including + inclusion + inclusions + inclusive + inclusively + inclusiveness + incognito + incognitos + incoherence + incoherent + incoherently + incombustible + income + incomes + incoming + incommensurable + incommensurate + incommode + incommoded + incommoding + incommunicable + incommunicado + incommutable + incomparable + incomparably + incompatibilities + incompatibility + incompatible + incompatibly + incompetence + incompetent + incompetently + incompetents + incomplete + incompletely + incompleteness + incompletion + incomprehensibility + incomprehensible + incomprehensibly + incomprehension + incompressible + incomputable + inconceivable + inconclusive + inconclusively + incondensable + incongruent + incongruity + incongruous + incongruously + inconsequential + inconsequentially + inconsiderable + inconsiderably + inconsiderate + inconsiderately + inconsiderateness + inconsideration + inconsistencies + inconsistency + inconsistent + inconsistently + inconsolable + inconsolably + inconspicuous + inconspicuously + inconspicuousness + inconstancy + inconstant + incontestable + incontinence + incontinent + incontrollable + incontrovertible + incontrovertibly + inconvenience + inconvenienced + inconveniences + inconveniencing + inconvenient + inconveniently + inconvertible + incorporable + incorporate + incorporated + incorporates + incorporating + incorporation + incorrect + incorrectly + incorrectness + incorrigibility + incorrigible + incorrigibly + incorruptibility + incorruptible + incorruptibly + increasable + increase + increased + increases + increasing + increasingly + incredibility + incredible + incredibly + incredulity + incredulous + incredulously + increment + incremental + incrementally + incrementation + incremented + incrementer + incrementing + increments + incriminate + incriminated + incriminating + incrimination + incriminatory + incrust + incrustation + incubate + incubated + incubates + incubating + incubation + incubator + incubators + incubi + incubus + incubuses + inculcate + inculcated + inculcating + inculcation + inculpable + inculpate + inculpated + inculpating + inculpation + inculpatory + incumbant + incumbencies + incumbency + incumbent + incumber + incumbrance + incunabula + incunabuulum + incur + incurable + incurred + incurrer + incurring + incurs + incursion + indebted + indebtedness + indecencies + indecency + indecent + indecently + indecipherable + indecision + indecisive + indecisively + indecisiveness + indecomposable + indeed + indefatigable + indefensible + indefinable + indefinite + indefinitely + indefiniteness + indelible + indelicacies + indelicacy + indelicate + indelicately + indemnification + indemnified + indemnify + indemnifying + indemnities + indemnity + indent + indentation + indentations + indented + indentifiers + indenting + indents + indenture + indentured + indenturing + independence + independent + independently + independents + indescribable + indescribably + indestructibility + indestructible + indeterminable + indeterminacies + indeterminacy + indeterminate + indeterminately + indetermination + index + indexable + indexed + indexer + indexers + indexes + indexing + India + india + indian + Indiana + indiana + Indianapolis + indianapolis + indians + indicant + indicants + indicate + indicated + indicates + indicating + indication + indications + indicative + indicator + indicators + indices + indict + indicter + indictment + indictments + indictor + Indies + indifference + indifferent + indifferently + indigence + indigene + indigenous + indigenously + indigenousness + indigent + indigently + indigestibility + indigestible + indigestion + indignant + indignantly + indignation + indignities + indignity + indigo + indigoes + indigos + Indira + indirect + indirected + indirecting + indirection + indirections + indirectly + indirectness + indirects + indiscernible + indiscoverable + indiscreet + indiscreetly + indiscretion + indiscrimanently + indiscriminantly + indiscriminate + indiscriminately + indiscriminateness + indispensability + indispensable + indispensably + indispose + indisposed + indisposition + indisputable + indissoluble + indistinct + indistinguishable + indite + indited + inditement + inditing + indium + individual + individualism + individualist + individualistic + individualities + individuality + individualize + individualized + individualizes + individualizing + individually + individuals + individuate + indivisibility + indivisible + Indochina + indoctrinate + indoctrinated + indoctrinates + indoctrinating + indoctrination + Indoeuropean + indolence + indolent + indolently + indomitable + Indonesia + indonesia + indonesian + indoor + indoors + indorse + indorsed + indorsing + indubitable + indubitably + induce + induced + inducement + inducements + inducer + induces + inducible + inducing + induct + inductance + inductances + inducted + inductee + inducting + induction + inductions + inductive + inductively + inductor + inductors + inducts + indue + indued + induing + indulge + indulged + indulgence + indulgences + indulgent + indulgently + indulger + indulging + indurate + indurated + indurating + induration + industrial + industrialised + industrialism + industrialist + industrialists + industrialization + industrialize + industrialized + industrializing + industrially + industrials + industries + industrious + industriously + industriousness + industry + indwell + indy + inebriate + inebriated + inebriating + inebriation + inebriety + ineducable + ineffable + ineffably + ineffective + ineffectively + ineffectiveness + ineffectual + inefficacy + inefficiencies + inefficiency + inefficient + inefficiently + inelastic + inelegant + ineligible + ineluctable + inept + ineptitude + ineptly + ineptness + inequalities + inequality + inequitable + inequity + inequivalent + ineradicable + inert + inertance + inertia + inertial + inertly + inertness + inescapable + inescapably + inessential + inestimable + inestimably + inevitabilities + inevitability + inevitable + inevitably + inexact + inexactitude + inexcusable + inexcusably + inexhaustible + inexorability + inexorable + inexorably + inexpedient + inexpensive + inexpensively + inexperience + inexperienced + inexpert + inexpertly + inexpiable + inexplainable + inexplicable + inexplicably + inexplicit + inexpressible + inexpressibly + inextinguishable + inextricable + inextricably + infallibility + infallible + infallibly + infamies + infamous + infamously + infamy + infancies + infancy + infant + infanta + infante + infanticide + infantile + infantries + infantry + infantryman + infantrymen + infants + infarct + infarction + infatuate + infatuated + infatuating + infatuation + infeasible + infect + infected + infecting + infection + infections + infectious + infectiously + infective + infects + infelicities + infelicitous + infelicity + infer + inference + inferences + inferential + inferentially + inferior + inferiority + inferiors + infernal + infernally + inferno + infernos + inferred + inferring + infers + infertile + infest + infestation + infestations + infested + infesting + infests + infidel + infidelities + infidelity + infidels + infield + infielder + infighting + infile + infiltrate + infiltrated + infiltrating + infiltration + infima + infimum + infinite + infinitely + infiniteness + infinitesimal + infinitesimally + infinities + infinitival + infinitive + infinitives + infinitude + infinitum + infinity + infirm + infirmaries + infirmary + infirmities + infirmity + infirmly + infirmness + infix + inflame + inflamed + inflaming + inflammability + inflammable + inflammably + inflammation + inflammatory + inflatable + inflate + inflated + inflater + inflates + inflating + inflation + inflationary + inflator + inflect + inflection + inflectional + inflexibility + inflexible + inflexibly + inflexion + inflict + inflicted + inflicter + inflicting + infliction + inflictor + inflicts + inflorescence + inflow + influence + influenced + influences + influencing + influent + influential + influentially + influenza + influx + info + infold + inform + informal + informality + informally + informant + informants + Informatica + information + informational + informative + informatively + informed + informer + informers + informing + informs + infra + infract + infraction + infrangible + infrared + infrastructure + infree + infrequence + infrequency + infrequent + infrequently + infringe + infringed + infringement + infringements + infringer + infringes + infringing + infuriate + infuriated + infuriates + infuriating + infuriation + infuse + infused + infuses + infusible + infusing + infusion + infusions + infusorial + infusorian + ing + ingather + ingenious + ingeniously + ingeniousness + ingenuity + ingenuous + ingenuously + ingenuousness + Ingersoll + ingest + ingestible + ingestion + ingestive + inglorious + ingloriously + ingot + ingrained + Ingram + ingrate + ingratiate + ingratiated + ingratiating + ingratiatingly + ingratiation + ingratitude + ingredient + ingredients + ingress + ingrown + inguinal + ingulf + inhabit + inhabitable + inhabitance + inhabitant + inhabitants + inhabitation + inhabited + inhabiting + inhabits + inhalant + inhalation + inhalator + inhale + inhaled + inhaler + inhales + inhaling + inharmonious + inhere + inhered + inherence + inherent + inherently + inheres + inhering + inherit + inheritable + inheritance + inheritances + inherited + inheriting + inheritor + inheritors + inheritress + inheritresses + inheritrices + inheritrix + inherits + inhibit + inhibited + inhibiter + inhibiting + inhibition + inhibitions + inhibitive + inhibitor + inhibitors + inhibitory + inhibits + inholding + inhomogeneities + inhomogeneity + inhomogeneous + inhospitable + inhuman + inhumane + inhumanity + inimical + inimically + inimitable + inimitably + iniquities + iniquitous + iniquitously + iniquity + inital + initial + initialed + initialing + initialisation + initialise + initialised + initialization + initializations + initialize + initialized + initializer + initializers + initializes + initializing + initialled + initialling + initially + initials + initiate + initiated + initiates + initiating + initiation + initiations + initiative + initiatives + initiator + initiators + initiatory + inject + injected + injecting + injection + injections + injective + injector + injects + injudicious + Injun + injunct + injunction + injunctions + injunctive + injure + injured + injures + injuries + injuring + injurious + injuriously + injuriousness + injury + injustice + injustices + ink + inkblot + inked + inker + inkers + inkier + inkiest + inkiness + inking + inkings + inkling + inklings + inks + inkstand + inkwell + inky + inlaid + inland + inlay + inlayer + inlaying + inlays + inlet + inlets + inline + Inman + inmate + inmates + inmost + inn + innards + innate + innately + inner + innermost + inning + innings + innkeeper + innocence + innocent + innocently + innocents + innocuous + innocuously + innocuousness + innovate + innovated + innovates + innovating + innovation + innovations + innovative + innovatively + innovator + inns + innuendo + innuendoes + innuendos + innumerability + innumerable + innumerably + inoculate + inoculated + inoculating + inoculation + inoculator + inoffensive + inoffensively + inoffensiveness + inoperable + inoperational + inoperative + inopportune + inordinate + inordinately + inorganic + inorganically + input + inputfile + inputs + inputting + inquest + inquietude + inquire + inquired + inquirer + inquirers + inquires + inquiries + inquiring + inquiringly + inquiry + inquisition + inquisitional + inquisitions + inquisitive + inquisitively + inquisitiveness + inquisitor + inquisitorial + inquisitorially + inroad + inroads + inrush + insane + insanely + insanities + insanity + insatiable + insatiably + inscribe + inscribed + inscriber + inscribes + inscribing + inscription + inscriptions + inscriptive + inscrutability + inscrutable + inscrutably + inseam + insect + insecta + insecticidal + insecticide + insectivore + insectivorous + insects + insecure + insecurely + insecurities + insecurity + inseminate + inseminated + inseminating + insemination + insensate + insensibility + insensible + insensibly + insensitive + insensitively + insensitivity + inseparable + insert + inserted + inserting + insertion + insertions + inserts + inset + insetting + inshore + inside + insider + insiders + insides + insidious + insidiously + insidiousness + insight + insightful + insights + insignia + insignificance + insignificant + insignificantly + insignisigne + insincere + insincerely + insincerity + insinuate + insinuated + insinuates + insinuating + insinuation + insinuations + insinuator + insipid + insipidity + insipidly + insist + insisted + insistence + insistent + insistently + insisting + insists + insnare + insnared + insnaring + insofar + insole + insolence + insolent + insolently + insoluble + insolvable + insolvency + insolvent + insomnia + insomniac + insomuch + insouciance + insouciant + insouciantly + inspect + inspected + inspecting + inspection + inspections + inspector + inspectors + inspects + inspiration + inspirational + inspirations + inspire + inspired + inspirer + inspires + inspiring + inspiringly + inspirit + instabilities + instability + instable + instal + install + installation + installations + installed + installer + installers + installing + installment + installments + installs + instance + instanced + instances + instancing + instant + instantaneous + instantaneously + instanter + instantiate + instantiated + instantiates + instantiating + instantiation + instantiations + instantly + instants + instar + instars + instate + instated + instatement + instating + instead + instep + instigate + instigated + instigates + instigating + instigation + instigator + instigators + instil + instill + instillation + instilled + instilling + instillment + instilment + instinct + instinctive + instinctively + instincts + instinctual + institute + instituted + instituter + instituters + institutes + instituting + institution + institutional + institutionalization + institutionalize + institutionalized + institutionalizes + institutionalizing + institutionally + institutions + instruct + instructed + instructing + instruction + instructional + instructions + instructive + instructively + instructor + instructors + instructorship + instructs + instrument + instrumental + instrumentalist + instrumentalists + instrumentalities + instrumentality + instrumentally + instrumentals + instrumentation + instrumented + instrumenting + instruments + insubordinate + insubordinately + insubordination + insubstantial + insufferable + insufferably + insufficient + insufficiently + insular + insularism + insularity + insularly + insulate + insulated + insulates + insulating + insulation + insulator + insulators + insulin + insult + insulted + insulting + insultingly + insults + insuperability + insuperable + insupportable + insuppressible + insurable + insurance + insure + insured + insurer + insurers + insures + insurgence + insurgent + insurgently + insurgents + insuring + insurmountable + insurrect + insurrection + insurrectionaries + insurrectionary + insurrectionist + insurrections + int + intact + intaglio + intaglios + intake + intakes + intangibility + intangible + intangibles + intangibly + integer + integers + integrable + integral + integrally + integrals + integrand + integrate + integrated + integrates + integrating + integration + integrationist + integrations + integrative + integrity + integument + intel + intellect + intellects + intellectual + intellectualism + intellectualist + intellectuality + intellectualize + intellectualized + intellectualizing + intellectually + intellectuals + intelligence + intelligences + intelligent + intelligently + intelligentsia + intelligibility + intelligible + intelligibly + intelsat + intemperance + intemperate + intemperately + intend + intendant + intended + intending + intends + intense + intensely + intensification + intensified + intensifier + intensifiers + intensifies + intensify + intensifying + intensities + intensity + intensive + intensively + intent + intention + intentional + intentionally + intentioned + intentions + intently + intentness + intents + inter + interact + interacted + interacting + interaction + interactions + interactive + interactively + interactivity + interacts + interarrival + interblock + interbred + interbreed + interbreeding + interbrood + intercalate + intercede + interceded + intercedes + interceding + intercellular + intercept + interceptable + intercepted + intercepter + intercepting + interception + interceptor + intercepts + intercession + intercessor + intercessory + interchange + interchangeability + interchangeable + interchangeably + interchanged + interchanger + interchanges + interchanging + interchangings + interchannel + intercity + intercollegiate + intercom + intercommunicate + intercommunicated + intercommunicates + intercommunicating + intercommunication + intercommunications + interconnect + interconnected + interconnecting + interconnection + interconnections + interconnects + intercontinental + intercourse + interdata + interdenominational + interdepartmental + interdependence + interdependencies + interdependency + interdependent + interdependently + interdict + interdiction + interdictory + interdisciplinary + interest + interested + interestedly + interesting + interestingly + interests + interexchange + interface + interfaced + interfacer + interfaces + interfacing + interfere + interfered + interference + interferences + interferes + interfering + interferingly + interferometer + interferometric + interferometry + interfold + interframe + interfuse + interfused + interfusing + interfusion + intergroup + interim + interior + interiorize + interiorized + interiorizes + interiorizing + interiors + interject + interjection + interjectional + interjects + interlace + interlaced + interlaces + interlacing + interlaid + interlard + interlay + interlaying + interleaf + interleave + interleaved + interleaves + interleaving + interline + interlinear + interlined + interlining + interlink + interlinked + interlinks + interlisp + interlock + interlocks + interlocus + interlocutor + interlocutory + interloper + interlude + intermachine + intermarriage + intermarried + intermarry + intermarrying + intermediaries + intermediary + intermediate + intermediates + interment + intermezzi + intermezzo + intermezzos + interminable + interminably + intermingle + intermingled + intermingles + intermingling + intermission + intermit + intermittent + intermittently + intermix + intermixed + intermixing + intermodule + intern + internal + internalization + internalize + internalized + internalizes + internalizing + internally + internals + international + internationalism + internationality + internationalization + internationalize + internationalized + internationalizing + internationally + interne + internecine + interned + internescine + internet + internetwork + internetworking + internetworks + interning + internist + internment + interns + internship + interoffice + interpenetrate + interpenetrated + interpenetrating + interpenetration + interpersonal + interplanetary + interplay + Interpol + interpolate + interpolated + interpolates + interpolating + interpolation + interpolations + interpolatory + interpose + interposed + interposes + interposing + interposition + interpret + interpretable + interpretation + interpretations + interpretative + interpreted + interpreter + interpreters + interpreting + interpretive + interpretively + interprets + interprocess + interracial + interrecord + interred + interregna + interregnum + interregnums + interrelate + interrelated + interrelates + interrelating + interrelation + interrelations + interrelationship + interrelationships + interring + interrogate + interrogated + interrogates + interrogating + interrogation + interrogations + interrogative + interrogator + interrogatory + interrupt + interruptable + interrupted + interruptible + interrupting + interruption + interruptions + interruptive + interrupts + interscholastic + intersect + intersected + intersecting + intersection + intersections + intersector + intersects + interspecies + interspecific + interspersal + intersperse + interspersed + intersperses + interspersing + interspersion + interstage + interstate + interstellar + interstice + interstices + interstitial + intertask + interterminal + intertidal + intertoll + intertree + intertwine + intertwined + intertwines + intertwining + intertwist + interurban + interval + intervals + intervene + intervened + intervenes + intervening + intervenor + intervention + interventionist + interventions + interview + interviewed + interviewee + interviewer + interviewers + interviewing + interviews + interweave + interweaving + interwove + interwoven + intestate + intestinal + intestine + intestines + inthral + inthrall + inthralled + inthralling + intially + intimacies + intimacy + intimal + intimate + intimated + intimately + intimater + intimating + intimation + intimations + intimidate + intimidated + intimidates + intimidating + intimidation + intitle + intitled + intitling + into + intolerable + intolerably + intolerance + intolerant + intolerantly + intonate + intonation + intonations + intone + intoned + intoning + intoxicant + intoxicate + intoxicated + intoxicating + intoxication + intra + intractability + intractable + intractably + intrados + intragroup + intraline + intramachine + intramural + intramuscular + intranet + intranetwork + intransigence + intransigent + intransigently + intransitive + intransitively + intraoffice + intraperitoneally + intrapersonal + intraprocess + intraprocessor + intraspecific + intrastate + intrauterine + intravenous + intravenously + intrench + intrepid + intrepidity + intrepidly + intricacies + intricacy + intricate + intricately + intrigue + intrigued + intriguer + intrigues + intriguing + intrinsic + intrinsically + introduce + introduced + introduces + introducing + introduction + introductions + introductive + introductory + introit + introject + introspect + introspection + introspections + introspective + introversion + introvert + introverted + intrude + intruded + intruder + intruders + intrudes + intruding + intrusion + intrusions + intrusive + intrust + intubate + intubated + intubates + intubation + intuitable + intuition + intuitionist + intuitions + intuitive + intuitively + inundate + inundated + inundating + inundation + inure + inured + inurement + inuring + invade + invaded + invader + invaders + invades + invading + invalid + invalidate + invalidated + invalidates + invalidating + invalidation + invalidations + invalidism + invalidities + invalidity + invalidly + invalids + invaluable + invaluably + invariable + invariably + invariance + invariant + invariantly + invariants + invasion + invasions + invasive + invective + inveigh + inveigher + inveigle + inveigled + inveiglement + inveigling + invent + invented + inventing + invention + inventions + inventive + inventively + inventiveness + inventor + inventoried + inventories + inventors + inventory + inventorying + inventress + inventresses + invents + Inverness + inverse + inversely + inverses + inversion + inversions + invert + invertebrate + invertebrates + inverted + inverter + inverters + invertible + inverting + inverts + invest + invested + investigate + investigated + investigates + investigating + investigation + investigations + investigative + investigator + investigators + investigatory + investing + investiture + investment + investments + investor + investors + invests + inveteracy + inveterate + inveterately + inviable + invidious + invidiously + invidiousness + invigorate + invigorated + invigorating + invigoration + invincibility + invincible + invincibly + inviolability + inviolable + inviolably + inviolate + invisibility + invisible + invisibly + invitation + invitational + invitations + invite + invited + invitee + invites + inviting + invocable + invocate + invocation + invocations + invoice + invoiced + invoices + invoicing + invoke + invoked + invoker + invokes + invoking + involuntarily + involuntary + involute + involution + involutorial + involve + involved + involvement + involvements + involves + involving + invulnerability + invulnerable + invulnerably + inward + inwardly + inwardness + inwards + inwrap + inwrapped + inwrapping + inwrought + Io + iocs + iodate + iodide + iodinate + iodine + iodize + iodized + iodizing + iodoform + iof + ion + ionic + ionizable + ionization + ionize + ionized + ionizing + ionosphere + ionospheric + ions + ioparameters + iortn + ios + iota + Iowa + iowa + iowt + ipecac + ipl + ips + ipsilateral + ipso + IQ + IR + Ira + Iran + iran + Iraq + iraq + irascible + irascibly + irate + irately + irateness + ire + ireful + Ireland + ireland + Irene + ires + irides + iridescence + iridescent + iridium + iris + irises + Irish + irish + Irishman + Irishmen + irk + irked + irking + irks + irksome + Irma + iron + ironclad + ironed + ironic + ironical + ironically + ironies + ironing + ironings + irons + ironside + ironstone + ironware + ironwood + ironwork + ironworker + ironworks + irony + Iroquois + irradiate + irradiated + irradiating + irradiation + irradicate + irradicated + irrational + irrationalities + irrationality + irrationally + irrationals + Irrawaddy + irreclaimable + irreclaimably + irreconcilable + irreconcilably + irrecoverable + irrecoverably + irredeemable + irredeemably + irredentism + irredentist + irreducible + irreducibly + irreflexive + irrefragable + irrefutable + irrefutably + irregardless + irregular + irregularities + irregularity + irregularly + irregulars + irrelevance + irrelevances + irrelevancies + irrelevant + irrelevantly + irreligious + irremediable + irremediably + irremissible + irremovable + irremovably + irreparable + irreplacable + irreplaceable + irrepressible + irrepressibly + irreproachable + irreproachably + irreproducibility + irreproducible + irresistible + irresistibly + irresolute + irresolutely + irresolution + irresolvable + irrespective + irrespectively + irresponsibility + irresponsible + irresponsibly + irretrievable + irretrievably + irreverence + irreverent + irreverently + irreversibility + irreversible + irreversibly + irrevocable + irrevocably + irrigable + irrigate + irrigated + irrigates + irrigating + irrigation + irritability + irritable + irritably + irritant + irritate + irritated + irritates + irritating + irritation + irritations + irrupt + irruption + irruptive + IRS + Irvin + Irvine + Irving + Irwin + is + Isaac + Isaacson + Isabel + Isabella + Isadore + Isaiah + isdn + isentropic + Isfahan + Ising + isinglass + Isis + isize + Islam + Islamabad + Islamic + island + islander + islanders + islands + isle + isles + islet + islets + isn + isn't + iso + isobar + isobaric + isochronal + isochronous + isocline + isolatable + isolate + isolated + isolates + isolating + isolation + isolationism + isolationist + isolations + Isolde + isomer + isomeric + isometric + isometrical + isomorph + isomorphic + isomorphically + isomorphism + isomorphisms + isopleth + isort + isosceles + isotherm + isotope + isotopes + isotropy + Israel + israel + Israeli + israeli + Israelite + issuance + issuant + issue + issued + issuer + issuers + issues + issuing + Istanbul + isthmi + isthmian + isthmus + isthmuses + istle + Istvan + isz + it + IT&T + it'd + it'll + Italian + italian + italians + italic + italicize + italicized + italicizing + italics + Italy + italy + itch + itches + itchier + itchiest + itchiness + itching + itchy + itel + item + itemise + itemization + itemizations + itemize + itemized + itemizes + itemizing + items + iterate + iterated + iterates + iterating + iteration + iterations + iterative + iteratively + iterator + iterators + iteroparity + iteroparous + Ithaca + itinerant + itineraries + itinerary + Ito + its + itself + ITT + iv + Ivan + Ivanhoe + Iverson + ivied + ivies + ivories + ivory + ivy + ix + Izvestia + j + j's + jab + jabbed + jabber + jabberer + jabberwocky + jabbing + jabiru + Jablonsky + jaborandi + jabot + jabs + jacamar + jacana + jacarandi + jacinth + jack + jackal + jackanapes + jackass + jackboot + jackdaw + jacket + jacketed + jackets + jackfish + jackfruit + Jackie + jacking + jackknife + jackleg + Jackman + jacknifed + jacknifing + jacknives + jackpot + jacks + jackscrew + jacksnipe + Jackson + Jacksonville + jackstay + jackstone + jackstraw + jacktar + Jacky + JACM + Jacob + Jacobean + Jacobi + Jacobian + Jacobite + Jacobsen + Jacobson + Jacobus + jaconet + Jacqueline + Jacques + jactation + jactitation + jade + jaded + jadedly + jadedness + jadeite + jading + Jaeger + jag + jagged + jaggedly + jaggedness + jaggery + jagging + jaggy + jaguar + jaguarundi + jail + jailbird + jailbreak + jailed + jailer + jailers + jailing + jailor + jails + Jaime + Jakarta + jake + jalopies + jalopy + jalousie + jam + Jamaica + jamb + jamboree + James + jameson + Jamestown + jammed + jamming + jampacked + jams + Jan + jan + Jane + Janeiro + Janet + jangle + jangled + jangler + jangling + Janice + janissary + janitor + janitorial + janitors + Janos + Jansenist + januaries + January + january + Janus + Japan + japan + Japanese + japanese + japanned + japanning + jape + japed + japing + japonica + jar + jardiniere + jarful + jargon + jarred + jarring + jarringly + jars + Jarvin + jasmin + jasmine + Jason + jasper + jaundice + jaundiced + jaundicing + jaunt + jauntier + jauntiest + jauntily + jauntiness + jaunts + jaunty + Java + javelin + javelins + jaw + jawbone + jawboned + jawboning + jawbreaker + jaws + jay + jaywalk + jaywalker + jaywalking + jazz + jazzier + jazziest + jazzily + jazzy + jcl + jealous + jealousies + jealously + jealousness + jealousy + jean + jeanne + Jeannie + jeans + Jed + jee + jeep + jeeps + jeer + jeeringly + jeers + Jeff + Jefferson + Jeffrey + Jehovah + jehu + jejuna + jejune + jejunum + jell + jellied + jellies + jelly + jellyfish + jellying + jellyroll + Jenkins + jennet + Jennie + jennies + Jennifer + Jennings + jenny + Jensen + jeopard + jeopardies + jeopardize + jeopardized + jeopardizes + jeopardizing + jeopardy + jerboa + jeremiad + Jeremiah + Jeremy + Jeres + Jericho + jerk + jerked + jerkier + jerkiest + jerkily + jerkin + jerkiness + jerking + jerkings + jerks + jerkwater + jerky + Jeroboam + Jerome + jerry + jersey + jerseys + Jerusalem + jerusalem + jess + Jesse + Jessica + Jessie + jest + jested + jester + jesting + jests + Jesuit + Jesus + jet + jetliner + jetport + jets + jetsam + jetted + jetties + jetting + jettison + jetty + Jew + jew + jewel + jeweled + jeweler + jeweling + Jewell + jewelled + jeweller + jewelling + jewelries + jewelry + jewels + Jewett + jewfish + Jewish + jews + jib + jibbed + jibbing + jibe + jibed + jibing + jiffies + jiffy + jig + jigged + jigger + jigging + jiggle + jiggled + jiggling + jigs + jigsaw + Jill + jill + jilt + Jim + Jimenez + Jimmie + jimmied + jimmies + jimmy + jimmying + jingle + jingled + jingling + jingly + jingoism + jingoist + jinn + jinni + jinns + jinricksha + jinrikisha + jinriksha + jinx + jitney + jitneys + jitter + jitterbug + jitterbugged + jitterbugging + jittery + jiujitsu + jiujutsu + jive + jived + jiving + jms + Jo + Joan + Joanna + Joanne + Joaquin + job + jobbed + jobholder + jobs + jock + jockey + jockeyed + jockeying + jockeys + jockstrap + jocose + jocoseness + jocosities + jocosity + jocular + jocularities + jocularity + jocularly + jocund + jocundities + jocundity + jocundly + jodhpurs + Joe + Joel + joey + jog + jogged + jogger + jogging + joggle + joggled + joggling + jogs + Johann + Johannes + Johannesburg + Johansen + Johanson + John + Johnny + johnnycake + Johnsen + Johnson + Johnston + Johnstown + join + joined + joiner + joiners + joining + joins + joint + jointly + joints + jointure + joist + joke + joked + joker + jokers + jokes + joking + jokingly + Joliet + Jolla + jollied + jollier + jolliest + jollily + jolliness + jollity + jolly + jollying + jolt + jolted + jolting + jolts + Jon + Jonas + Jonathan + Jones + jongleur + jonquil + Jordan + jordan + Jorge + Jorgensen + Jorgenson + Jose + Josef + Joseph + Josephine + Josephson + Josephus + josh + josher + Joshua + Josiah + joss + jostle + jostled + jostles + jostling + jot + jots + jotted + jotter + jotting + joule + jounce + jounced + jouncing + jouncy + journal + journalese + journalism + journalist + journalistic + journalists + journalize + journalized + journalizes + journalizing + journals + journey + journeyed + journeying + journeyings + journeyman + journeymen + journeys + joust + jousted + jouster + jousting + jousts + Jovanovich + Jove + jovial + joviality + jovially + Jovian + jowl + jowls + jowly + joy + Joyce + joyful + joyfully + joyfulness + joyless + joyous + joyously + joyousness + joyride + joys + joystick + Jr + Juan + Juanita + jubilance + jubilant + jubilantly + jubilate + jubilation + jubilee + Judaism + Judas + Judd + Jude + judge + judged + judgement + judgements + judges + judgeship + judging + judgment + judgmental + judgments + judicable + judical + judicatories + judicatory + judicature + judicial + judicially + judiciaries + judiciary + judicious + judiciously + judiciousness + Judith + judo + Judson + Judy + jug + jugate + jugged + juggernaut + jugging + juggle + juggled + juggler + jugglers + jugglery + juggles + juggling + Jugoslavia + jugs + jugular + juice + juiced + juicer + juices + juicier + juiciest + juicily + juiciness + juicing + juicy + jujitsu + juju + jujube + jujutsu + juke + jukebox + Jukes + julep + Jules + Julia + julian + Julie + julienne + julies + Juliet + Julio + Julius + July + july + jumble + jumbled + jumbles + jumbling + jumbo + jumbos + jump + jumped + jumper + jumpers + jumpier + jumpiest + jumpiness + jumping + jumps + jumpy + junco + juncos + junction + junctions + junctor + juncture + junctures + June + june + Juneau + jungle + jungles + junior + juniors + juniper + junk + junker + junkerdom + junkers + junket + junketeer + junkie + junkier + junkies + junkiest + junkman + junkmen + junks + junky + Juno + junta + Jupiter + Jura + Jurassic + jure + juridic + juridical + juries + jurisdiction + jurisdictional + jurisdictions + jurisprudence + jurisprudent + jurisprudential + jurist + juristic + juror + jurors + jury + juryman + jurymen + just + justice + justices + justiciable + justifiable + justifiably + justification + justifications + justified + justifier + justifiers + justifies + justify + justifying + Justine + Justinian + justle + justled + justling + justly + justness + jut + jute + Jutish + jutted + jutting + juvenile + juveniles + juxtapose + juxtaposed + juxtaposes + juxtaposing + juxtaposition + k + k's + Kabuki + Kabul + Kaddish + kaf + kaffeeklatsch + kaffir + kaffiyeh + kafir + Kafka + Kafkaesque + kaftan + kago + Kahn + kail + kailyard + kaiser + Kajar + kaka + kakapo + kakemono + kaki + kalaazar + Kalamazoo + kale + kaleidescope + kaleidoscope + kaleidoscopic + kalends + kaleyard + kalif + kaliph + kalmia + Kalmuk + kalong + kalsomine + kamala + Kamchatka + kame + kami + kamikaze + Kampala + kampong + Kane + kangaroo + kanji + Kankakee + Kansas + kansas + Kant + kantar + kaolin + kaolinite + kaon + Kaplan + kapok + kappa + kaput + Karachi + karakul + Karamazov + karat + karate + Karen + Karl + karma + Karol + karoo + kaross + Karp + karroo + karst + kart + karyatid + karyokinesis + karyolymph + karyoplasm + karyosome + karyotin + karyotype + kasha + Kaskaskia + katat + Kate + Katharine + Katherine + Kathleen + Kathy + Katie + Katmandu + Katowice + katydid + Katz + Kauffman + Kaufman + kauri + kava + Kay + kayak + kayo + kayoed + kayoing + kazatski + kazatsky + kazoo + kbps + Keaton + Keats + kebab + keck + keddah + kedge + kedged + kedging + keel + keelboat + keeled + keelhaul + keeling + keels + keelson + keen + Keenan + keener + keenest + keenly + keenness + keep + keeper + keepers + keeping + keeps + keepsake + keeshond + kef + keg + kegler + Keith + Keller + Kelley + Kellogg + kelly + keloid + kelowna + kelp + Kelsey + Kelvin + kelvin + Kemp + kemptken + ken + kenaf + Kendall + kendo + Kennan + Kennecott + kenned + Kennedy + kennel + kenneled + kenneling + kennelled + kennelling + kennels + Kenneth + Kenney + keno + kenosis + Kensington + Kent + kentledge + Kenton + Kentucky + kentucky + Kenya + kenya + Kenyon + keogenesis + kepi + kepis + Kepler + kept + keratectomy + keratin + keratinous + keratitis + keratogenous + keratoid + keratoplasty + kerb + kerchief + kerchiefs + kerf + kermes + kermis + Kermit + kern + kernel + kernels + Kernighan + kernite + kerogen + kerosene + kerosine + Kerr + kerria + kerry + kersey + kerygma + Kessler + kestrel + ketatin + ketch + ketchup + ketene + ketol + ketone + ketonemia + ketonuria + ketose + ketosis + ketosteroid + Kettering + kettle + kettledrum + kettles + ketway + kevel + Kevin + key + keyboard + keyboards + keyed + Keyes + keyhole + keying + Keynes + Keynesian + keynote + keynoted + keynoter + keynoting + keypad + keypads + keypunch + keypunched + keypunches + keypunching + keys + keystone + keystroke + keystrokes + keywd + keyword + keywords + keywrd + khadi + khaki + khalif + khan + Khartoum + khat + khedah + khedive + khi + Khmer + Khrushchev + kiang + kibble + kibbutz + kibbutzim + kibe + kibitz + kibitzer + kiblah + kibosh + kick + kickback + kickball + kicked + kicker + kickers + kickier + kickiest + kicking + kickoff + kicks + kickshaw + kickstand + kickup + kicky + kid + Kidde + kidded + kidder + kiddie + kiddies + kidding + kiddush + kiddy + kidnap + kidnaper + kidnapped + kidnapper + kidnappers + kidnapping + kidnappings + kidnaps + kidney + kidneys + kids + kidskin + Kieffer + kielbasa + kielbasas + kielbasi + kier + kiesselguhr + kiesselgur + kiesserite + Kiev + Kiewit + Kigali + Kikuyu + kilderkin + Kilgore + kill + killdeer + killed + killer + killers + killick + killing + killingly + killings + killjoy + kills + kiln + kilo + kilobar + kilobit + kilobits + kiloblock + kilobyte + kilobytes + kilocalorie + kilocycle + kilogram + kilogramme + kilograms + kilohertz + kilohm + kilojoule + kiloliter + kilolitre + kilometer + kilometers + kilometre + kilometric + kiloparsec + kilos + kiloton + kilovolt + kilowatt + kilowatts + kiloword + kilt + kilter + kilts + Kim + Kimball + kimberlite + Kimberly + kimchi + kimono + kimonos + kimura + kin + kinaesthesia + kinase + kind + kinder + kindergarten + kindergartener + kindergartner + kindest + kindhearted + kindheartedly + kindheartedness + kindle + kindled + kindles + kindless + kindlier + kindliest + kindliness + kindling + kindly + kindness + kindred + kinds + kine + kinematic + kinematical + kinematics + kinescope + kinesic + kinesics + kinesiology + kinesthesia + kinesthesis + kinetic + kinetics + kinetoplast + kinfolk + kinfolks + king + kingbird + kingbolt + kingcraft + kingcup + kingdom + kingdoms + kingfish + kingfisher + kinghorn + kinglet + kingly + kingmaker + kingpin + kings + Kingsbury + kingship + Kingsley + Kingston + kingwood + kinin + kink + kinkajou + kinkier + kinkiest + kinky + Kinney + kino + kinsfolk + Kinshasha + kinship + kinsman + kinsmen + kinswoman + kinswomen + kiosk + Kiowa + kip + Kipling + kipper + Kirby + Kirchner + Kirchoff + kirk + Kirkland + Kirkpatrick + kirn + Kirov + kirschwasser + kirtle + kishke + kismet + kiss + kissable + kissed + kisser + kissers + kisses + kissing + kist + kit + Kitakyushu + kitchen + kitchener + kitchenet + kitchenette + kitchenmaid + kitchens + kitchenware + kitching + kite + kited + kites + kith + kithe + kiting + kits + kitsch + kitschy + kittel + kitten + kittenish + kittenishness + kittens + kitties + kittiwake + kittle + kitty + kiva + kivu + Kiwanis + kiwi + kiwis + Klan + klatch + klatsch + Klaus + klaxon + kleenex + Klein + klepht + kleptomania + kleptomaniac + Kline + klipspringer + klong + kloof + kludge + kludges + klunk + Klux + klystron + km + knack + knacker + knackwurst + knaggy + knap + Knapp + knapsack + knapsacks + knapweed + knar + Knauer + knave + knaveries + knavery + knaves + knavish + knead + kneads + knee + kneecap + kneed + kneehole + kneeing + kneel + kneeled + kneeler + kneeling + kneels + kneepad + kneepiece + knees + knell + knells + knelt + knew + knick + Knickerbocker + knickers + knickknack + knife + knifed + knifes + knifing + knight + knighted + knighthood + knighting + knightly + knights + Knightsbridge + knish + knit + knits + knitted + knitter + knitwear + knives + knob + knobbed + knobbier + knobbiest + knobby + knobkerrie + knobs + knock + knockabout + knockdown + knocked + knocker + knockers + knocking + knockout + knocks + knockwurst + knoll + knolls + knop + knot + knothole + knots + Knott + knotted + knotter + knottier + knottiest + knottiness + knotting + knotty + knout + know + knowable + knower + knoweth + knowhow + knowing + knowingly + knowledgable + knowledge + knowledgeable + knowledgeably + Knowles + Knowlton + known + knowns + knows + Knox + Knoxville + knuckle + knuckleball + knucklebone + knuckled + knucklehead + knuckles + knuckling + Knudsen + Knudson + knur + knurl + knurled + knurlier + knurliest + knurly + knuth + Knutsen + Knutson + koa + koala + koan + kob + Kobayashi + kobold + Koch + Kochab + Kodachrome + kodak + Kodiak + koel + Koenig + Koenigsberg + kohl + kohlrabi + kohlrabies + koine + koinonia + kojima + kokanee + koksaghyz + koksagyz + kola + kolinski + kolinskies + kolinsky + kolkhoz + kolmogorov + kolo + kombu + Kong + Konrad + kook + kookaburra + kookie + kooky + kop + kopeck + kopek + koph + kopje + Koppers + Koran + Korea + korea + korean + koruna + kos + kosher + koto + Kovacs + Kowalewski + Kowalski + Kowloon + kowtow + kraal + kraft + krait + Krakatoa + kraken + Krakow + Kramer + krater + Krause + kraut + Krebs + krebs + kreitzman + Kremlin + kreplach + Kresge + Krieger + kriegspiel + krill + krimmer + kris + Krishna + Kristin + krona + krone + Kronecker + kroner + kronor + Krueger + Kruger + krumhorn + krummhorn + Kruse + krypton + KS + Ku + kuchen + kudo + kudos + kudu + kudzu + Kuhn + kulak + kumiss + kummel + kummerbund + kumquat + kurajong + kurbash + Kurd + Kurt + kurtosis + kuru + kutta + Kuwait + kvas + kvass + kwacha + kwashiorkor + KY + kyanite + kyanize + kyat + Kyle + kylix + kymogram + kymograph + Kyoto + kyphosis + l + l'oeil + l's + L'vov + la + laager + lab + Laban + labarum + labdanum + labefaction + label + labeled + labeler + labelers + labeling + labelled + labeller + labellers + labelling + labellum + labels + labia + labial + labialism + labialize + labially + labiate + labibia + labile + lability + labiodendal + labionasal + labiovelar + labium + labor + laboratories + laboratory + labored + laborer + laborers + laboring + laborings + laborious + laboriously + laborite + laborius + labors + labour + labourer + labourers + Labrador + labradorite + labredt + labroid + labrum + labs + laburnum + labyrinth + labyrinthine + labyrinths + lac + lace + laced + lacerate + lacerated + lacerates + lacerating + laceration + lacerations + Lacerta + laces + lacetilian + lacewing + lacework + laches + Lachesis + lachrymal + lachrymator + lachrymatory + lachrymose + lacier + laciest + lacily + laciness + lacing + laciniate + lack + lackadaisic + lackadaisical + lackadaisically + lackaday + lacked + lackey + lackeys + lacking + lackluster + lacklustre + lacks + lacolith + laconic + laconically + laconism + lacquer + lacquered + lacquers + lacrimal + lacrimation + lacrimator + lacrimatory + lacrosse + lactam + lactary + lactase + lactate + lactated + lactating + lactation + lacteal + lactescent + lactic + lactiferous + lactobacillus + lactoflavin + lactogenic + lactometer + lactone + lactoprotein + lactose + lacuna + lacunae + lacunar + lacunas + lacunose + lacustrine + lacy + lad + ladanum + ladder + laddie + lade + laded + laden + ladies + lading + ladino + ladle + ladled + ladleful + ladlefuls + ladler + ladling + ladner + ladrone + lads + lady + ladybird + ladybug + ladyfern + ladyfinger + ladyfish + ladykin + ladylike + ladylove + ladyship + laeotropic + Lafayette + lag + lagan + lager + lagers + lagerspetze + laggard + laggardly + lagged + lagger + lagging + lagnappe + lagniappe + lagomrph + lagoon + lagoons + lagopus + Lagos + Lagrange + Lagrangian + lagrangian + lags + Laguerre + Lahore + laic + laical + laicism + laicize + laid + Laidlaw + lain + lair + laird + lairs + laissez + laities + laity + lake + Lakehurst + laker + lakes + lakeside + lakh + laky + lallation + lam + lama + Lamar + Lamarck + lamaseries + lamasery + lamb + lambaste + lambasted + lambasting + lambda + lambdacism + lambdas + lambdiod + lambency + lambent + lambently + lambert + lambkill + lambkin + lamblike + lambrequin + lambs + lambskin + lame + lamed + lamedlamella + lamella + lamellae + lamellar + lamellas + lamellate + lamellibranch + lamellicorn + lamelliform + lamellirostral + lamellose + lamely + lameness + lament + lamentable + lamentably + lamentation + lamentations + lamented + lamenting + laments + lames + lamia + lamina + laminable + laminae + laminar + laminaria + laminas + laminate + laminated + laminating + lamination + laminectomy + laming + laminitis + lammed + lammergeier + lammergeyer + lamp + lampas + lampblack + lampf + lampion + lamplight + lamplighter + lampoon + lampooner + lampooning + lampoonist + lamppost + lamprey + lampreys + lamps + Lana + lanai + lanate + Lancashire + Lancaster + lance + lanced + lancelet + lanceolate + lancer + lancers + lances + lancet + lanceted + lancewood + lanciform + lancinate + lancing + land + landau + landaulet + landaulette + landed + lander + landers + landfall + landfill + landform + landgrave + landhold + landholder + landholding + landing + landings + Landis + landladies + landlady + landless + landlocked + landlord + landlordism + landlords + landlubber + landmark + landmarks + landmass + landowner + landowners + lands + landscape + landscaped + landscaper + landscapes + landscaping + landscapist + landside + landskip + landslide + landslip + landsman + landsmen + landward + landwards + lane + lanes + Lang + langauge + langbeinite + Lange + langlauf + Langley + Langmuir + langouste + langrage + langridge + language + languages + languet + languette + languid + languidly + languidness + languish + languished + languishes + languishing + languishingly + languor + languorous + languorously + langur + laniard + laniary + laniferous + lank + Lanka + lankier + lankiest + lankiness + lankness + lanky + lanner + lanneret + lanolin + lanose + Lansing + lansquenet + lantana + lantern + lanterns + lanthanide + lanthanum + lanthorn + lanugo + lanyard + Lao + Laocoon + Laos + Laotian + lap + laparotomy + lapb + lapboard + lapel + lapelled + lapels + lapful + lapfuls + lapidarian + lapidaries + lapidary + lapidate + lapidify + lapillus + lapin + Laplace + lapped + lappet + lapping + laps + lapsable + lapse + lapsed + lapses + lapsing + lapstrake + lapwing + Laramie + larboard + larcenies + larcenous + larceny + larch + lard + larder + lardon + Laredo + Lares + largando + large + largehearted + largely + largemouth + largeness + larger + largess + largesse + largest + larghetto + largish + largo + largos + lariat + larine + lark + Larkin + larks + larkspur + larrup + Larry + Lars + Larsen + Larson + larva + larvae + larval + larvas + laryngeal + larynges + laryngitis + larynx + larynxes + lasagna + lascar + lascivious + lasciviously + lase + laser + lasers + lash + lashed + lashes + lashing + lashings + lass + lasses + lassie + lassitude + lasso + lassoed + lassoer + lassoes + lassoing + lassos + last + lasted + lasting + lastjob + lastly + lasts + Laszlo + latch + latched + latches + latching + latchkey + latchstring + late + lateen + lately + latency + lateness + latent + latently + later + latera + lateral + laterally + Lateran + laterite + latest + latex + lath + latham + lathe + lathed + lather + lathery + lathing + Lathrop + laths + latifolia + Latin + latin + Latinate + latish + latitude + latitudes + latitudinal + latitudinary + latrine + latrines + Latrobe + latter + latterly + lattice + latticed + lattices + latticework + latticing + latus + Latvia + laud + laudability + laudable + laudably + laudanum + laudation + laudatory + lauded + Lauderdale + laudes + lauding + Laue + laugh + laughable + laughably + laughed + laugher + laughing + laughingly + laughingstock + Laughlin + laughs + laughter + launch + launched + launcher + launches + launching + launchings + launder + laundered + launderer + laundering + launderings + launders + laundress + laundries + laundry + laundryman + laundrymen + laura + laureate + laureateship + laurel + laurels + Lauren + Laurent + Laurentian + Laurie + Lausanne + lava + lavabo + lavalier + lavaliere + lavatories + lavatory + lave + laved + lavender + laving + lavish + lavished + lavishing + lavishly + Lavoisier + law + lawbreaker + lawbreaking + lawful + lawfully + lawfulness + lawgiver + lawgiving + lawless + lawlessness + lawmake + lawmaker + lawmaking + lawman + lawmen + lawn + lawns + Lawrence + lawrencium + laws + Lawson + lawsuit + lawsuits + lawyer + lawyers + lax + laxative + laxatives + laxity + laxly + laxness + lay + layer + layered + layering + layers + layette + laying + layman + laymen + layoff + layoffs + layout + layouts + layover + lays + Layton + layup + Lazarus + laze + lazed + lazier + laziest + lazily + laziness + lazing + lazy + lazybones + lbinit + lconvert + lcsymbol + ldinfo + lea + leach + leachate + lead + leaded + leaden + leader + leaders + leadership + leaderships + leadeth + leading + leadings + leads + leadsman + leadsmen + leaf + leafage + leafed + leafier + leafiest + leafiness + leafing + leafless + leaflet + leaflets + leaflike + leafstalk + leafy + league + leagued + leaguer + leaguers + leagues + leaguing + leak + leakage + leakages + leaked + leaking + leaks + leaky + lean + Leander + leaned + leaner + leanest + leaning + leanness + leans + leant + leap + leaped + leaper + leapfrog + leapfrogged + leapfrogging + leaping + leaps + leapt + Lear + learn + learned + learnedly + learner + learners + learning + learns + learnt + lease + leased + leasehold + leases + leash + leashes + leasing + least + leastways + leastwise + leather + leatherback + leathered + leathern + leatherneck + leathers + leatherwork + leathery + leave + leaved + leaven + leavened + leavening + Leavenworth + leaves + leaving + leavings + Lebanese + Lebanon + lebanon + lebensraum + Lebesgue + lecher + lecherous + lecherously + lechery + lecithin + lectern + lectionary + lecture + lectured + lecturer + lecturers + lectures + lecturing + led + ledge + ledger + ledgers + ledges + leds + lee + leech + leeches + Leeds + leek + leer + leerier + leeriest + leeringly + leery + lees + Leeuwenhoek + leeward + leeway + left + lefties + leftist + leftists + leftmost + leftover + leftovers + leftward + lefty + leg + legacies + legacy + legal + legalese + legalism + legalist + legalistic + legalities + legality + legalization + legalize + legalized + legalizes + legalizing + legally + legate + legatee + legation + legato + legend + legendary + Legendre + legendry + legends + leger + legerdemain + legers + legged + legging + leggings + leggy + leghorn + legibility + legible + legibly + legion + legionary + legionnaire + legions + legislate + legislated + legislates + legislating + legislation + legislative + legislatively + legislator + legislators + legislature + legislatures + legitimacy + legitimate + legitimated + legitimately + legitimating + legitimatize + legitimatized + legitimatizing + legitimize + legitimized + legitimizing + legless + legman + legmen + legroom + legs + legume + leguminous + legwork + Lehigh + Lehman + lehmer + lei + Leigh + Leighton + Leila + leis + leisure + leisureliness + leisurely + leitmotif + leitmotiv + lek + leks + Leland + lemma + lemmas + lemming + lemmings + lemmus + lemon + lemonade + lemons + lemony + Lemuel + lemur + Len + Lena + lend + lended + lender + lenders + lending + lends + length + lengthen + lengthened + lengthening + lengthens + lengthier + lengthiest + lengthily + lengthiness + lengthly + lengths + lengthways + lengthwise + lengthy + lenience + leniency + lenient + leniently + Lenin + Leningrad + leningrad + lenitive + Lennox + Lenny + Lenore + lens + lenses + lent + Lenten + lenten + lenticular + lentil + lentils + lento + Leo + Leon + Leona + Leonard + Leonardo + Leone + Leonid + leonine + leopard + leopards + Leopold + leotard + lepage + leper + lepidolite + lepidoptera + lepidopteran + lepidopterous + leprechaun + leprosy + leprous + leptons + Leroy + Lesbian + lesbianism + lesion + Leslie + Lesotho + less + lessee + lessen + lessened + lessening + lessens + lesser + lesson + lessons + lessor + lest + Lester + lester + let + letdown + lethal + lethargic + lethargically + lethargies + lethargy + Lethe + Letitia + lets + letter + lettered + letterer + letterhead + lettering + letterman + lettermen + letterpress + letters + letting + lettuce + letup + leucine + leucopus + leukaemia + leukemia + leukocyte + Lev + levee + levees + level + leveled + leveler + levelheaded + levelheadedness + leveling + levelled + leveller + levellest + levelling + levelly + levelness + levels + lever + leverage + levers + Levi + leviathan + levied + levies + Levin + Levine + levins + Levis + levitate + levitation + Leviticus + levities + Levitt + levity + levulose + levy + levying + lew + lewd + lewdly + lewdness + lewis + lewisite + lexeme + lexic + lexical + lexically + lexicographer + lexicographic + lexicographical + lexicographically + lexicography + lexicon + lexicons + Lexington + Leyden + liabilities + liability + liable + liaison + liaisons + liar + liars + liason + lib + libation + libel + libeled + libeler + libeling + libelled + libeller + libelling + libellous + libelous + liberal + liberalism + liberalities + liberality + liberalization + liberalize + liberalized + liberalizes + liberalizing + liberally + liberalness + liberals + liberate + liberated + liberates + liberating + liberation + liberationist + liberator + liberators + Liberia + libertarian + liberties + libertine + libertinism + liberty + libget + libidinal + libidinous + libidinously + libido + libinit + libr + librarian + librarians + libraries + library + librate + libretti + librettist + libretto + librettos + Libreville + Libya + libya + lice + licence + licensable + license + licensed + licensee + licenses + licensing + licensor + licentiate + licentious + licentiously + licentiousness + lichee + lichen + lichens + licit + licitly + lick + licked + licking + licks + lickspittle + licorice + lid + lidded + lidicker + lids + lie + Liechtenstein + lied + lief + liege + lien + liens + lies + lieu + lieutenancies + lieutenancy + lieutenant + lieutenants + life + lifeblood + lifeboat + lifeguard + lifeless + lifelessly + lifelessness + lifelike + lifeline + lifelong + lifer + lifesaver + lifesaving + lifeskills + lifespan + lifespans + lifestyle + lifestyles + lifetime + lifetimes + lifework + LIFO + lift + lifted + lifter + lifters + lifting + liftoff + lifts + ligament + ligand + ligature + Ligget + Liggett + light + lighted + lighten + lightener + lightens + lighter + lighters + lightest + lightface + lightheaded + lightheadedness + lighthearted + lightheartedly + lightheartedness + lighthouse + lighthouses + lighting + lightly + lightness + lightning + lightnings + lightproof + lights + lightship + lightsome + lightweight + ligneous + lignite + lignum + likability + likable + likableness + like + liked + likelier + likeliest + likelihood + likelihoods + likeliness + likely + liken + likened + likeness + likenesses + likening + likens + liker + likes + likewise + liking + Lila + lilac + lilacs + Lilian + lilies + Lillian + Lilliputian + Lilly + lilt + lily + lim + Lima + limb + limbed + limber + limbic + limbless + limbo + limbos + limbs + lime + limeade + limed + limelight + Limerick + limericks + limes + limestone + limewater + limey + limier + limiest + liminess + liming + limit + limitability + limitably + limitate + limitation + limitations + limited + limiter + limiters + limiting + limitless + limits + limn + limonene + limousine + limp + limped + limpet + limpid + limpidity + limpidly + limping + limpkin + limply + limpness + limps + limy + Lin + linage + linchpin + Lincoln + Lind + Linda + Lindberg + Lindbergh + linden + Lindholm + Lindquist + Lindsay + Lindsey + Lindstrom + line + lineage + lineal + lineally + lineament + linear + linearities + linearity + linearizable + linearize + linearized + linearizes + linearizing + linearly + lineatum + linebacker + lined + linefeed + linefeeds + lineman + linemen + linen + linens + linenumber + linenumbers + lineprinter + liner + linerange + liners + lines + linesman + linesmen + linetest + lineup + linger + lingered + lingerer + lingerie + lingering + lingers + lingo + lingoes + lingua + lingual + lingually + linguist + linguistic + linguistically + linguistics + linguists + linier + liniest + liniment + linin + lining + linings + link + linkage + linkages + linked + linkedit + linkedited + linkediting + linkeditor + linkeditted + linkeditting + linker + linkers + linking + links + linkup + linnet + linoleum + Linotype + linseed + linsey + lint + lintel + linters + linty + Linus + liny + lion + Lionel + lioness + lionesses + lionhearted + lionization + lionize + lionized + lionizing + lions + lip + lipid + lipless + lipped + lippier + lippiest + Lippincott + lippiness + lipping + lippy + lips + Lipschitz + Lipscomb + lipstick + Lipton + liquefaction + liquefied + liquefy + liquefying + liqueur + liqueurs + liquid + liquidate + liquidated + liquidating + liquidation + liquidations + liquidator + liquidity + liquidize + liquidized + liquidizing + liquidness + liquids + liquified + liquifier + liquifiers + liquifies + liquify + liquifying + liquor + liquors + lir + lira + liras + lire + lis + Lisa + Lisbon + lisbon + Lise + lisle + lisp + lisped + lisper + lisping + lispingly + lisps + Lissajous + lissom + lissome + lissomeness + lissomness + list + listed + listen + listened + listener + listeners + listening + listens + lister + listers + listing + listings + listless + listlessly + listlessness + lists + lit + litanies + litany + litchi + liter + literacy + literal + literalism + literally + literalness + literals + literary + literate + literati + literature + literatures + liters + lithe + lithely + litheness + lither + lithesome + lithest + lithic + lithium + lithograph + lithographer + lithographic + lithography + lithology + lithosphere + lithospheric + Lithuania + litigable + litigant + litigate + litigated + litigating + litigation + litigator + litigious + litmus + litre + litres + litter + litterbug + littered + littering + littermates + litters + little + littleneck + littleness + littler + littlest + Littleton + Litton + littoral + liturgic + liturgical + liturgies + liturgy + livability + livable + livably + live + liveable + lived + livelier + liveliest + livelihood + liveliness + livelong + lively + liven + livener + liveness + liver + liveried + liveries + Livermore + Liverpool + Liverpudlian + livers + liverwort + liverwurst + livery + liveryman + liverymen + lives + livestock + liveth + livid + living + Livingston + livre + Liz + lizard + lizards + Lizzie + llama + llano + llanos + Lloyd + lnr + lo + loa + load + loaded + loader + loaders + loadinfo + loading + loadings + loads + loadspecs + loadstone + loaf + loafed + loafer + loam + loamy + loan + loaned + loaner + loaning + loans + loath + loathe + loathed + loather + loathing + loathly + loathsome + loathsomeness + loaves + lob + lobar + lobate + lobately + lobbed + lobber + lobbied + lobbies + lobbing + lobby + lobbying + lobbyist + lobe + lobed + lobes + loblollies + loblolly + lobo + lobscouse + lobster + lobsters + lobular + lobule + loc + local + locale + localism + localities + locality + localizable + localization + localize + localized + localizes + localizing + locally + locals + locate + located + locates + locating + location + locations + locative + locatives + locator + locators + loch + loci + lock + lockable + Locke + locked + locker + lockers + locket + Lockhart + Lockheed + Lockian + locking + lockings + lockjaw + locknut + lockout + lockouts + locks + locksmith + lockstep + lockup + lockups + Lockwood + locn + loco + locomote + locomotion + locomotive + locomotives + locomotor + locomotory + locoweed + locus + locust + locusts + locution + locutor + lode + lodestar + lodestone + lodge + lodged + lodgement + lodgepole + lodger + lodges + lodging + lodgings + lodgment + Lodowick + Loeb + loess + loft + loftier + loftiest + loftily + loftiness + lofts + lofty + log + Logan + loganberries + loganberry + logarithm + logarithmic + logarithmically + logarithms + logbook + loge + logged + logger + loggerhead + loggers + loggia + loggias + logging + logic + logical + logicality + logically + logician + logicians + logics + logier + logiest + login + loginess + logins + logistic + logistical + logistics + logjam + logo + logoes + logoff + logout + logroll + logroller + logrolling + logs + logy + loin + loincloth + loins + Loire + Lois + loiter + loitered + loiterer + loitering + loiters + Loki + Lola + loll + loller + lollipop + lolly + lollygag + lollygagged + lollygagging + lollypop + Lomb + Lombard + Lombardy + Lome + London + london + lone + lonelier + loneliest + loneliness + lonely + loner + loners + lonesome + lonesomely + lonesomeness + long + longboat + longbow + longed + longer + longest + longevity + Longfellow + longhair + longhand + longhorn + longing + longingly + longings + longish + longitude + longitudes + longitudinal + longitudinally + longleg + longs + longshoreman + longshoremen + longstanding + longtime + longue + longworth + look + lookahead + looked + looker + lookers + looking + lookout + looks + lookup + lookups + loom + loomed + looming + Loomis + looms + loon + looney + loonier + loonies + looniest + loony + loop + loopback + loope + looped + looper + loopers + loophole + loopholes + looping + loops + loose + loosed + looseleaf + loosely + loosen + loosened + loosener + looseness + loosening + loosens + looser + looses + loosest + loosestrife + loosing + loot + looted + looter + looting + loots + lop + lope + loped + Lopez + loping + lopped + lopseed + lopsided + lopsidedly + lopsidedness + loquacious + loquaciously + loquacity + loquat + lord + lordlier + lordliest + lordliness + lordly + lordosis + lords + lordship + lore + Lorelei + Loren + Lorenz + lorgnette + Lorinda + lorn + Lorraine + lorries + lorry + los + losable + lose + loser + losers + loses + losing + loss + losses + lossier + lossiest + lossy + lost + lot + lotan + lotion + lotor + lotos + lots + Lotte + lotteries + lottery + Lottie + lotto + lotus + Lou + loud + louder + loudest + loudly + loudness + loudspeaker + loudspeakers + loudspeaking + Louis + Louisa + Louise + Louisiana + louisiana + Louisville + louisville + lounge + lounged + lounger + lounges + lounging + Lounsbury + lour + Lourdes + louse + louses + lousewort + lousier + lousiest + lousily + lousiness + lousy + lout + loutish + loutishness + louts + louver + louvered + Louvre + lovable + lovably + love + loveable + lovebird + loved + Lovelace + Loveland + loveless + lovelier + lovelies + loveliest + loveliness + lovelorn + lovely + lover + loverly + lovers + loves + lovesick + lovesickness + loving + lovingkindness + lovingly + low + lowborn + lowboy + lowbred + lowbrow + lowdown + Lowe + Lowell + lower + lowercase + lowerclassman + lowerclassmen + lowered + lowering + loweringly + lowermost + lowers + lowest + lowland + lowlander + lowlands + lowlier + lowliest + lowliness + lowly + lowness + Lowry + lows + lox + loy + loyal + loyalism + loyalist + loyally + loyalties + loyalty + lozenge + lrecl + LSI + ltr + LTV + luau + lubber + lubberliness + lubberly + lubbers + Lubbock + lube + Lubell + lubricant + lubricate + lubricated + lubricating + lubrication + lubricator + lubricious + lubricities + lubricity + Lucas + lucent + Lucerne + Lucia + Lucian + lucid + lucidity + lucidly + lucidness + Lucifer + Lucille + Lucius + luck + lucked + luckier + luckiest + luckily + luckiness + luckless + lucks + lucky + lucrative + lucratively + lucrativeness + lucre + Lucretia + Lucretius + lucubrate + lucubrated + lucubrating + lucubration + lucy + ludicrous + ludicrously + ludicrousness + Ludlow + Ludwig + luff + Lufthansa + Luftwaffe + lug + luge + luger + luggage + lugged + lugger + lugging + lugsail + lugubrious + lugubriously + Luis + luke + lukemia + lukewarm + lukewarmly + lukewarmness + lull + lullabies + lullaby + lulled + lulls + lulu + lumbago + lumbar + lumber + lumbered + lumberer + lumbering + lumberingly + lumberjack + lumberman + lumbermen + lumberyard + lumen + lumens + lumina + luminance + luminaries + luminary + luminescence + luminescent + luminosities + luminosity + luminous + luminously + luminousness + lummox + lump + lumped + lumpier + lumpiest + lumpiness + lumping + lumpish + lumpishly + lumpishness + lumps + Lumpur + lumpy + lunacies + lunacy + lunar + lunary + lunate + lunated + lunately + lunatic + lunch + lunched + luncheon + luncheonette + luncheons + luncher + lunches + lunching + lunchroom + lunchtime + Lund + Lundberg + Lundquist + lung + lunge + lunged + lunger + lungfish + lunging + lungs + lupine + Lura + lurch + lurched + lurches + lurching + lure + lured + lurer + lures + lurid + luridly + luridness + luring + lurk + lurked + lurker + lurking + lurks + Lusaka + luscious + lusciously + lusciousness + lush + lushly + lushness + lust + luster + lustful + lustfully + lustfulness + lustier + lustiest + lustily + lustiness + lustre + lustrous + lustrously + lustrousness + lusts + lusty + lutanist + lute + lutes + lutetium + Luther + Lutheran + lutist + Lutz + lux + luxe + Luxembourg + luxemburg + luxuriance + luxuriant + luxuriantly + luxuriate + luxuriated + luxuriating + luxuries + luxurious + luxuriously + luxuriousness + luxury + Luzon + lvalue + lvalues + lyceum + lycopodium + Lydia + lye + lying + Lykes + Lyle + Lyman + lymph + lymphatic + lymphocyte + lymphoid + lymphoma + lynch + Lynchburg + lynched + lyncher + lynches + lynching + Lynn + lynx + lynxes + Lyon + lyonnaise + Lyra + lyre + lyric + lyrical + lyrically + lyricist + lyrics + lysed + Lysenko + lysergic + lysine + m + m's + ma + Mabel + Mac + macaboy + macabre + macaco + macadam + macadamize + macague + macaque + macaroni + macaronic + macaroon + MacArthur + Macassar + macaw + Macbeth + MacDonald + MacDougall + mace + macebearer + maced + Macedon + Macedonia + macer + macerate + maces + MacGregor + Mach + machete + Machiavelli + machicolate + machicolation + machinate + machination + machine + machined + machinelike + machinery + machines + machining + machinist + machinists + machismo + macho + machree + macintosh + mack + MacKenzie + mackerel + Mackey + Mackinac + Mackinaw + mackintosh + mackle + macle + maclib + MacMillan + Macon + macro + macrobiotics + macrocephaly + macroclimate + macrocosm + macrocyst + macrocyte + macrodont + macroeconomics + macroevolution + macrogamete + macromere + macromolecular + macromolecule + macromolecules + macron + macronucleus + macronutrient + macrophage + macropterous + macros + macroscopic + macroscopically + macrosporangium + macrospore + macrostructure + macruran + macula + maculate + maculation + macule + mad + Madagascar + madam + Madame + madcap + madden + maddening + madder + maddest + maddish + Maddox + made + Madeira + Madeleine + Madeline + mademoiselle + madhouse + Madison + madly + madman + madmen + madness + Madonna + Madras + madras + madreline + madrepore + madreporite + Madrid + madrid + madrigal + Madsen + madstone + maduro + madwoman + madwort + Mae + Maelstrom + maenad + maestoso + maestro + maffick + mafic + magazine + magazines + Magdalene + magenta + Maggie + maggot + maggots + maggoty + magi + magic + magical + magically + magician + magicians + magisterial + magisterium + magistracy + magistral + magistrate + magistrates + magma + magna + magnanimity + magnanimous + magnate + magnesia + magnesite + magnesium + magnet + magnetic + magnetically + magnetics + magnetism + magnetisms + magnetite + magnetizable + magnetization + magnetize + magnetized + magnetizes + magnetizing + magneto + magnetoelectric + magnetohydrodynamics + magnetometer + magnetometers + magnetomotive + magneton + magnetoresistance + magnetosphere + magnetostriction + magnetron + magnets + magnific + magnification + magnificence + magnificent + magnificently + magnifico + magnified + magnifier + magnifies + magnify + magnifying + magniloquent + magnitude + magnitudes + magnolia + magnum + Magnuson + Magog + magpie + Magruder + maguey + maharaja + maharajah + maharanee + maharani + mahatma + Mahayana + Mahayanist + mahjong + mahjongg + mahlstick + mahogany + Mahoney + mahout + mahzor + maid + maiden + maidenhair + maidenhead + maidenhood + maidenly + maidens + maids + maidservant + Maier + maieutic + maigre + mail + mailable + mailbag + mailbox + mailboxes + mailcatcher + mailed + mailer + mailing + mailings + maillot + mailman + mailmen + mails + maim + maimed + maiming + maims + main + Maine + maine + mainframe + mainframes + mainland + mainline + mainly + mainmast + mains + mainsail + mainsheet + mainspring + mainstay + mainstream + maintain + maintainability + maintainable + maintained + maintainer + maintainers + maintaining + maintains + maintenance + maintenances + maintop + maintopmast + maintopsail + maisonette + maitre + maize + majestic + majesties + majesty + majolica + major + majored + majoring + majorities + majority + majors + majuscule + makable + make + makefile + maker + makeready + makers + makes + makeshift + makeup + makeups + makeweight + making + makings + Malabar + malachite + malacology + malacostracan + maladapt + maladaptation + maladapted + maladaptive + maladies + maladjust + maladjusted + maladjustive + maladminister + maladroit + malady + Malagasy + malaguena + malaise + malanders + malapert + malaprop + malapropism + malapropos + malar + malaria + malarial + malate + Malawi + Malay + Malaysia + Malcolm + malconduct + malcontent + Malden + maldistribute + Maldive + male + maledict + malediction + malefaction + malefactor + malefactors + malefic + maleficent + maleness + males + malevolence + malevolent + malfeasance + malfeasant + malformation + malformed + malfunction + malfunctioned + malfunctioning + malfunctions + Mali + malic + malice + malicious + maliciously + maliciousness + malign + malignancy + malignant + malignantly + malignity + malihini + malines + malinger + malkin + mall + mallard + malleable + mallee + mallemuck + malleolus + mallet + mallets + malleus + Mallory + mallow + malm + malmsey + malnourished + malnutrition + malocclusion + malodor + malodorous + Malone + Maloney + malposed + malposition + malpractice + Malraux + malt + Malta + maltase + malted + Maltese + maltha + malthusian + Malton + maltose + maltreat + malts + maltster + malty + malvasia + malversation + malvoisie + mama + mamba + mambo + mamma + mammal + mammalian + mammalogists + mammalogy + mammals + mammary + mammas + mammee + mammet + mammiferous + mammilla + mammillate + mammock + mammography + mammon + mammoth + mammy + man + mana + manacing + manacle + manage + manageable + manageableness + manageably + managed + management + managements + manager + managerial + managers + manages + managing + Managua + manakin + Manama + manatee + Manchester + manchester + manchet + manchineel + manciple + mandala + mandamus + mandarin + mandate + mandated + mandates + mandating + mandatory + mandible + mandolin + mandragora + mandrake + mandrel + mandril + mandrill + manducate + mane + manege + manes + maneuver + maneuvered + maneuvering + maneuvers + Manfred + manful + mangabey + manganate + manganese + mange + mangel + manger + mangers + mangle + mangled + mangler + mangles + mangling + Manhattan + manhole + manhood + mania + maniac + maniacal + maniacs + manic + maniculatus + manicure + manicured + manicures + manicuring + manifest + manifestation + manifestations + manifested + manifesting + manifestly + manifesto + manifests + manifold + manifolds + manikin + Manila + manila + manipulability + manipulable + manipulatable + manipulate + manipulated + manipulates + manipulating + manipulation + manipulations + manipulative + manipulator + manipulators + manipulatory + Manitoba + mankind + Manley + manly + Mann + manna + manned + mannequin + manner + mannered + mannerly + manners + manning + manometer + manometers + manor + manors + manpower + mans + manse + manservant + Mansfield + mansion + mansions + manslaughter + mantel + mantels + mantic + mantis + mantissa + mantissas + mantle + mantlepiece + mantles + mantrap + manual + manually + manuals + Manuel + manufacture + manufactured + manufacturer + manufacturers + manufactures + manufacturing + manumission + manumit + manumitted + manure + manuscript + manuscripts + Manville + many + manzanita + Mao + Maori + map + maple + maples + mappable + mapped + mapping + mappings + maps + mar + marathon + maraud + marble + marbles + marbling + Marc + Marceau + Marcel + Marcello + march + marched + marcher + marches + marching + Marcia + Marco + Marcus + Marcy + Mardi + mare + mares + Margaret + margarine + Margery + margin + marginal + marginalia + marginally + marginals + margins + Margo + Marguerite + maria + Marianne + Marie + Marietta + marigold + marijuana + Marilyn + marimba + Marin + marina + marinade + marinate + marine + mariner + marines + Marino + Mario + Marion + marionette + marital + maritime + marjoram + Marjorie + Marjory + mark + markable + marked + markedly + marker + markers + market + marketability + marketable + marketed + marketeer + marketeers + marketing + marketings + marketplace + marketplaces + markets + marketwise + Markham + marking + markings + Markov + Markovian + marks + marksman + marksmen + Marlboro + Marlborough + Marlene + marlin + Marlowe + marmalade + marmot + marmota + maroon + marque + marquee + marquess + Marquette + marquis + marriage + marriageable + marriages + married + marries + Marrietta + Marriott + marrow + marrowbone + marry + marrying + marrys + mars + Marseilles + marsh + Marsha + marshal + marshaled + marshaling + Marshall + marshals + marshes + marshland + marshmallow + marsupial + mart + marten + martensite + Martha + martial + Martian + martin + Martinez + martingale + martini + Martinique + Martinson + marts + Marty + martyr + martyrdom + martyrs + marvel + marveled + marvelled + marvelling + marvellous + marvelous + marvelously + marvelousness + marvels + Marvin + Marx + marxist + Mary + Maryland + maryland + mascara + masculine + masculinely + masculinity + maser + Maseru + mash + mashed + mashes + mashing + mask + maskable + masked + masker + masking + maskings + maskmv + masks + masochism + masochist + masochists + mason + Masonic + Masonite + masonry + masons + masque + masquerade + masquerader + masquerades + masquerading + mass + Massachusetts + massachusetts + massacre + massacred + massacres + massage + massages + massaging + masse + massed + masses + masseur + Massey + massif + massing + massive + mast + masted + master + mastered + masterful + masterfully + mastering + masterings + masterly + mastermind + masterpiece + masterpieces + masters + mastery + mastic + mastiff + masting + mastodon + masts + masturbate + masturbated + masturbates + masturbating + masturbation + mat + match + matchable + matchbook + matched + matcher + matchers + matches + matching + matchings + matchless + matchmake + mate + mated + Mateo + mater + material + materialism + materialist + materialize + materialized + materializes + materializing + materially + materials + materiel + maternal + maternally + maternity + mates + math + mathematic + mathematical + mathematically + mathematician + mathematicians + mathematics + Mathematik + Mathews + Mathewson + Mathias + Mathieu + Matilda + matinal + matinee + matinees + mating + matings + matins + Matisse + matriarch + matriarchal + matrices + matriculate + matriculation + matrimonial + matrimony + matrix + matroid + matron + matronly + mats + Matson + Matsumoto + matte + matted + matter + mattered + matters + Matthew + mattock + mattress + mattresses + Mattson + maturate + maturation + mature + matured + maturely + matures + maturing + maturities + maturity + maudlin + maul + Maureen + Maurice + Mauricio + Maurine + Mauritania + Mauritius + mausoleum + mauve + maverick + Mavis + maw + mawkish + Mawr + max + maxim + maxima + maximal + maximally + Maximilian + maximize + maximized + maximizer + maximizers + maximizes + maximizing + maxims + maximum + maximums + Maxine + maxwell + Maxwellian + may + Maya + mayapple + maybe + Mayer + Mayfair + Mayflower + mayhap + mayhem + Maynard + Mayo + mayonnaise + mayor + mayoral + mayors + mayst + Mazda + maze + mazes + mazurka + MBA + Mbabane + mbps + McAdams + McAllister + McBride + McCabe + McCall + McCallum + McCann + McCarthy + McCarty + McCauley + McClain + McClellan + McClure + McCluskey + McConnel + McConnell + McCormick + McCoy + McCracken + McCullough + McDaniel + McDermott + McDonald + McDonnell + McDougall + McDowell + McElroy + McFadden + McFarland + McGee + McGill + McGinnis + McGovern + McGowan + McGrath + McGraw + McGregor + McGuire + McHugh + McIntosh + McIntyre + McKay + McKee + McKenna + McKenzie + McKeon + McKesson + McKinley + McKinney + McKnight + McLaughlin + McLean + McLeod + McMahon + McMillan + McMullen + McNally + McNaughton + McNeil + McNulty + mcphail + McPherson + MD + me + mead + meadow + meadowland + meadows + meadowsweet + meager + meagerly + meagerness + meagre + meal + meals + mealtime + mealy + mean + meander + meandered + meandering + meanders + meaner + meanest + meaning + meaningful + meaningfully + meaningfulness + meaningless + meaninglessly + meaninglessness + meanings + meanly + meanness + means + meant + meantime + meanwhile + measle + measles + measurable + measurably + measure + measured + measurement + measurements + measurer + measures + measuring + meat + meats + meaty + Mecca + mechanic + mechanical + mechanically + mechanics + mechanism + mechanisms + mechanist + mechanization + mechanizations + mechanize + mechanized + mechanizes + mechanizing + mecum + medal + medallion + medallions + medals + meddle + meddled + meddler + meddles + meddling + Medea + Medford + media + medial + median + medians + mediate + mediated + mediates + mediating + mediation + mediations + medic + medical + medically + medicate + medication + Medici + medicinal + medicinally + medicine + medicines + medico + medics + medieval + mediocre + mediocrity + meditate + meditated + meditates + meditating + meditation + meditations + meditative + Mediterranean + medium + mediums + medlar + medley + Medusa + medusa + meek + meeker + meekest + meekly + meekness + meet + meeting + meetinghouse + meetings + meets + Meg + megabaud + megabit + megabits + megabyte + megabytes + megahertz + megalomania + megalomaniac + megaton + megavolt + megawatt + megaword + megawords + megohm + Meier + meiosis + Meistersinger + Mekong + Mel + melamine + melancholy + Melanesia + melange + Melanie + melanin + melanoma + Melbourne + melbourne + Melcher + meld + melded + melee + Melinda + meliorate + Melissa + Mellon + mellon + mellow + mellowed + mellowing + mellowness + mellows + melodic + melodies + melodious + melodiously + melodiousness + melodrama + melodramas + melodramatic + melody + melon + melons + Melpomene + melt + melted + melting + meltingly + melts + Melville + Melvin + member + membered + members + membership + memberships + membrane + memento + mementos + memo + memoir + memoirs + memorabilia + memorable + memorableness + memoranda + memorandum + memorial + memorially + memorials + memories + memorization + memorize + memorized + memorizer + memorizes + memorizing + memory + memoryless + memos + Memphis + memphis + men + menace + menaced + menaces + menacing + menagerie + menageries + menarche + mend + mendacious + mendacity + mended + Mendel + mendelevium + mendelian + Mendelssohn + mender + mending + mends + Menelaus + menfolk + menhaden + menial + menials + meningitis + meniscus + Menlo + Mennonite + menopause + mens + menstrual + menstruate + menstruation + mensurable + mensuration + mental + mentalities + mentality + mentally + mention + mentionable + mentioned + mentioner + mentioners + mentioning + mentions + mentor + mentors + mentorship + menu + menus + Menzies + Mephistopheles + mercantile + Mercator + Mercedes + mercenaries + mercenariness + mercenary + mercer + merchandise + merchandiser + merchandising + merchant + merchants + mercies + merciful + mercifully + merciless + mercilessly + Merck + mercurial + mercuric + mercury + mercy + mere + Meredith + merely + merest + meretricious + merganser + merge + merged + merger + mergers + merges + merging + meridian + meridional + meringue + merit + merited + meriting + meritorious + meritoriously + meritoriousness + merits + Merle + merlin + mermaid + Merriam + merriest + Merrill + merrily + Merrimack + merriment + Merritt + merry + merrymake + Mervin + mesa + mescal + mescaline + mesenteric + mesh + mesmeric + mesoderm + meson + Mesopotamia + Mesozoic + mesquite + mess + message + messages + messed + messenger + messengers + messes + Messiah + messiah + messiahs + messier + messiest + messieurs + messily + messiness + messing + Messrs + messy + met + meta + metabit + metabits + metabole + metabolic + metabolism + metabolite + metacircular + metacircularity + metal + metalanguage + metallic + metalliferous + metallization + metallizations + metallography + metalloid + metallurgic + metallurgist + metallurgy + metals + metalwork + metamathematical + metamorphic + metamorphism + metamorphose + metamorphosed + metamorphosis + metanetwork + metanotion + metanotions + metaphor + metaphoric + metaphorical + metaphorically + metaphors + metaphysical + metaphysically + metaphysics + metarule + metarules + metasymbol + metasyntactic + metavariable + Metcalf + mete + meted + meteor + meteoric + meteorite + meteoritic + meteorology + meteors + meter + metering + meters + metes + methacrylate + methane + methanes + methanol + methionine + method + methodic + methodical + methodically + methodicalness + methodist + methodists + methodological + methodologically + methodologies + methodologists + methodology + methods + Methuen + Methuselah + methyl + methylene + meticulous + meticulously + metier + meting + metre + metres + metric + metrical + metrics + metro + metronome + metropolis + metropolitan + mets + mettle + mettlesome + Metzler + mew + mewed + mews + Mexican + mexican + Mexico + mexico + Meyer + mezzo + mhz + mi + Miami + miami + miasma + miasmal + mica + mice + miceplot + micerun + micesource + Michael + Michaelangelo + Michel + Michelangelo + Michele + Michelin + Michelson + michigan + Mickelson + Mickey + Micky + micro + microarchitects + microarchitecture + microarchitectures + microbial + microbicidal + microbicide + microbiology + microchip + microcode + microcoded + microcodes + microcoding + microcomputer + microcomputers + microcosm + microcycle + microcycles + microeconomics + microelectronics + microenvironmental + microfilm + microfilms + microgramming + micrography + microinstruction + microinstructions + microjump + microjumps + microlevel + micrometer + micron + Micronesia + microoperations + microorganisms + microphone + microphones + microphoning + microprocedure + microprocedures + microprocessing + microprocessor + microprocessors + microprogram + microprogrammable + microprogrammed + microprogrammer + microprogramming + microprograms + micros + microscope + microscopes + microscopic + microscopy + microsec + microsecond + microseconds + microstore + microsystems + microtine + microtines + microtus + microvax + microvaxes + microwave + microwaves + microword + microwords + micturation + mid + Midas + midband + midday + middle + Middlebury + middleman + middlemen + middles + Middlesex + Middleton + Middletown + middleweight + middling + midge + midget + midgets + midified + midland + midmorn + midnight + midnights + midpoint + midpoints + midrange + midscale + midsection + midshipman + midshipmen + midspan + midst + midstream + midsts + midsummer + midterm + midway + midweek + Midwest + midwest + Midwestern + midwife + midwinter + midwives + mien + miff + mig + might + mightier + mightiest + mightily + mightiness + mightn't + mighty + mignon + migrant + migrate + migrated + migrates + migrating + migration + migrations + migratory + Miguel + mike + mila + Milan + milan + milch + mild + milder + mildest + mildew + mildly + mildness + Mildred + mile + mileage + Miles + miles + milestone + milestones + milieu + milieux + militant + militantly + militarily + militarism + militarist + military + militate + militia + militiamen + milk + milked + milker + milkers + milkiness + milking + milkmaid + milkmaids + milks + milkshake + milkweed + milky + mill + Millard + milled + millenarian + millenia + millenium + millennia + millennium + miller + milleri + millet + milliammeter + milliampere + Millie + millijoule + Millikan + millimeter + millimeters + millimetre + millimetres + millinery + milling + million + millionaire + millionaires + millions + millionth + millipede + millipedes + millisec + millisecond + milliseconds + millivolt + millivoltmeter + milliwatt + mills + millstone + millstones + millwright + millwrights + milord + milt + Milton + Miltonic + Milwaukee + milwaukee + mimeograph + mimesis + mimetic + Mimi + mimic + mimicked + mimicking + mimics + min + minaret + mince + minced + mincemeat + minces + mincing + mind + Mindanao + minded + mindful + mindfully + mindfulness + minding + mindless + mindlessly + minds + mine + mined + minefield + miner + mineral + mineralogy + minerals + miners + Minerva + mines + minestrone + minesweeper + mingle + mingled + mingles + mingling + mini + miniature + miniatures + miniaturization + miniaturize + miniaturized + miniaturizes + miniaturizing + minicomputer + minicomputers + minilanguage + minim + minima + minimal + minimally + minimax + minimise + minimization + minimizations + minimize + minimized + minimizer + minimizers + minimizes + minimizing + minimum + mining + minion + minis + minister + ministered + ministerial + ministering + ministers + ministries + ministry + mink + minks + Minneapolis + Minnesota + minnesota + Minnie + minnow + minnows + Minoan + minor + minoring + minorities + minority + minors + Minos + minot + Minsk + Minsky + minstrel + minstrels + minstrelsy + mint + minted + minter + minting + mints + minuend + minuet + minus + minuscule + minute + minutely + minuteman + minutemen + minuteness + minuter + minutes + minutiae + Miocene + mips + Mira + miracle + miracles + miraculous + miraculously + mirage + Miranda + mire + mired + mires + Mirfak + Miriam + mirror + mirrored + mirroring + mirrors + mirth + misaligned + misanthrope + misanthropic + misbehave + misbehaved + misbehaves + misbehaving + misbehaviour + miscalculation + miscalculations + miscegenation + miscellaneous + miscellaneously + miscellaneousness + miscellany + mischief + mischievous + mischievously + mischievousness + miscible + misclassification + misclassified + misclassify + misconception + misconceptions + misconduct + misconstrue + misconstrued + misconstrues + miscreant + miser + miserable + miserableness + miserably + miseries + miserly + misers + misery + misfit + misfits + misfortune + misfortunes + misgiving + misgivings + misguided + mishandling + mishap + mishaps + misinformation + misjudgment + mislead + misleading + misleads + misled + mismanagement + mismatch + mismatched + mismatches + mismatching + misnomer + misogynist + misogyny + misplace + misplaced + misplaces + misplacing + mispronunciation + mispunch + misrepresent + misrepresentation + misrepresentations + misrepresented + misrepresenting + misrepresents + miss + missed + misses + misshapen + missile + missiles + missing + mission + missionaries + missionary + missioner + missions + Mississippi + mississippi + Mississippian + missive + Missoula + Missouri + missouri + misspell + misspelled + misspelling + misspellings + misspells + misspent + misstatement + Missy + mist + mistakable + mistake + mistaken + mistakenly + mistakes + mistaking + mistakion + misted + mister + misters + mistiness + misting + mistletoe + mistress + mistrust + mistrusted + mists + misty + mistype + mistyped + mistypes + mistyping + misunderstand + misunderstander + misunderstanders + misunderstanding + misunderstandings + misunderstood + misuse + misused + misuses + misusing + MIT + mit + Mitchell + mite + miter + miterwort + mitigate + mitigated + mitigates + mitigating + mitigation + mitigative + mitochondria + mitosis + mitral + mitre + mitt + mitten + mittens + mix + mixed + mixer + mixers + mixes + mixing + mixture + mixtures + mixup + Mizar + MN + mnem + mnemonic + mnemonically + mnemonics + MO + moan + moaned + moans + moat + moats + mob + mobcap + Mobil + mobile + mobility + mobilized + mobs + mobster + moccasin + moccasins + mock + mocked + mocker + mockernut + mockery + mocking + mockingbird + mocks + mockup + mod + modal + modalities + modality + modally + mode + model + modeled + modeless + modeling + modelings + modelled + modeller + modellers + modelling + models + modem + modems + moderate + moderated + moderately + moderateness + moderates + moderating + moderation + moderator + moderators + modern + modernised + modernity + modernization + modernize + modernized + modernizer + modernizing + modernly + modernness + moderns + modes + modest + modestly + Modesto + modesty + modicum + modifiability + modifiable + modification + modifications + modified + modifier + modifiers + modifies + modify + modifying + modish + modula + modular + modularity + modularization + modularize + modularized + modularizes + modularizing + modularly + modulate + modulated + modulates + modulating + modulation + modulations + modulator + modulators + module + modules + moduli + modulo + modulus + modus + Moe + moeck + Moen + Mogadiscio + Mohammedan + Mohawk + Mohr + moid + moiety + Moines + moire + Moiseyev + moist + moisten + moistly + moistness + moisture + molal + molar + molasses + mold + Moldavia + moldboard + molded + molder + molding + molds + mole + molecular + molecule + molecules + molehill + moles + molest + molested + molesting + molests + Moliere + Moline + Moll + Mollie + mollify + molluscs + mollusk + Molly + mollycoddle + Moloch + molt + molten + Moluccas + molybdate + molybdenite + molybdenum + mom + moment + momenta + momentarily + momentariness + momentary + momentous + momentously + momentousness + moments + momentum + mommy + Mona + Monaco + monad + monadic + monarch + monarchic + monarchies + monarchs + monarchy + Monash + monasteries + monastery + monastic + monaural + monax + Monday + monday + mondays + monedula + monel + monetarism + monetary + money + moneyed + moneymake + moneys + moneywort + Mongolia + mongolia + mongoose + monic + Monica + monies + monitary + monitor + monitored + monitoring + monitors + monitory + monk + monkey + monkeyed + monkeyflower + monkeying + monkeys + monkish + monks + Monmouth + monoalphabetic + Monoceros + monochromatic + monochromator + monochrome + monocotyledon + monocular + monoenergetic + monogamous + monogamy + monogram + monogrammed + monograms + monograph + monographes + monographs + monolith + monolithic + monologist + monologue + monomer + monomeric + monomial + monomorphic + monomorphism + Monongahela + monophasic + monopolies + monopolize + monopolizing + monopoly + monoprogrammed + monoprogramming + monostable + monotheism + monotone + monotonic + monotonically + monotonicity + monotonous + monotonously + monotonousness + monotony + monotreme + monotypic + monoxide + Monroe + Monrovia + Monsanto + monsieur + monsoon + monster + monsters + monstrosity + monstrous + monstrously + Mont + montage + Montague + Montana + montana + Montclair + monte + Montenegrin + Monterey + Monteverdi + Montevideo + Montgomery + montgomeryshire + month + monthly + months + montia + Monticello + monticola + monticolae + Montmartre + Montpelier + Montrachet + Montreal + Monty + monument + monumental + monumentally + monuments + moo + mood + moodiness + moods + moody + moon + mooned + Mooney + mooning + moonlight + moonlighter + moonlighting + moonlike + moonlit + moons + moonshine + moor + moorage + Moore + moored + mooring + moorings + Moorish + moors + moose + moot + mop + moped + mops + moraine + moral + morale + moralities + morality + morally + morals + Moran + morass + moratorium + Moravia + morbid + morbidly + morbidness + more + morel + Moreland + moreover + mores + Moresby + Morgan + morgen + morgue + Moriarty + moribund + Morley + Mormon + morn + morning + mornings + Moroccan + Morocco + moron + morons + morose + morph + morpheme + morphemic + morphine + morphism + morphisms + morphological + morphology + morpholoical + morphophonemic + morphs + Morrill + morris + Morrison + Morrissey + Morristown + morrow + Morse + morsel + morsels + mort + mortal + mortalities + mortality + mortally + mortals + mortalty + mortar + mortared + mortaring + mortars + mortem + mortgage + mortgagee + mortgages + mortgagor + mortician + mortification + mortified + mortifies + mortify + mortifying + mortise + Morton + mosaic + mosaics + Moscow + moscow + Moser + Moses + Moslem + moslem + moslems + mosque + mosquito + mosquitoes + moss + mosses + mossy + most + mostly + mot + motel + motels + motet + moth + mothball + mothballs + mother + mothered + motherer + motherers + motherhood + mothering + motherland + motherly + mothers + moths + motif + motifs + motion + motioned + motioning + motionless + motionlessly + motionlessness + motions + motivate + motivated + motivates + motivating + motivation + motivational + motivationally + motivations + motive + motives + motley + motor + motorcar + motorcars + motorcycle + motorcycles + motoring + motorist + motorists + motorize + motorized + motorizes + motorizing + Motorola + motorola + motors + mottle + motto + mottoes + mould + moulding + Moulton + mound + mounded + mounds + mount + mountable + mountain + mountaineer + mountaineering + mountaineers + mountainous + mountainously + mountains + mountainside + mountaintops + mounted + mounter + mounting + mountings + mounts + mourn + mourned + mourner + mourners + mournful + mournfully + mournfulness + mourning + mourns + mouse + mouser + mouses + mousetrap + moustache + mousy + mouth + mouthe + mouthed + mouthes + mouthful + mouthing + mouthpiece + mouths + Mouton + movable + move + moved + movement + movements + mover + movers + moves + movie + moviemakers + movies + moving + movings + mow + mowed + mower + mowing + mows + Moyer + Mozart + mpb + mpbs + MPH + Mr + mr + Mrs + Ms + ms + msink + msource + Mt + mts + mtscmd + mtx + mu + much + mucilage + muck + mucker + mucking + mucosa + mucus + mud + Mudd + muddied + muddiness + muddle + muddled + muddlehead + muddler + muddlers + muddles + muddling + muddy + mudguard + mudsling + Mueller + muezzin + muff + muffin + muffins + muffle + muffled + muffler + muffles + muffling + muffs + mug + mugging + muggy + mugho + mugs + Muir + Mukden + mulatto + mulberries + mulberry + mulch + mulct + mule + mules + mulish + mull + mullah + mullein + Mullen + mulligan + mulligatawny + mulling + mullion + multi + multibit + multiblock + multibus + multibyte + multicast + multicasting + multicasts + multicellular + multicomputer + multics + multidestination + multidimensional + multidisciplinary + multidrop + multifarious + multiframe + multihop + multilateral + multilayer + multilayered + multileaving + multilevel + multilingual + multimachine + multimicrocomputer + multimillion + multimode + multinational + multinode + multinomial + multipacket + multiparty + multipass + multipath + multiple + multiples + multiplet + multiplex + multiplexed + multiplexer + multiplexers + multiplexes + multiplexing + multiplexor + multiplexors + multiplicand + multiplicands + multiplication + multiplications + multiplicative + multiplicatively + multiplicatives + multiplicity + multiplied + multiplier + multipliers + multiplies + multiply + multiplying + multiprocess + multiprocessing + multiprocessor + multiprocessors + multiprogram + multiprogrammed + multiprogramming + multipying + multiregister + multisection + multisector + multiserver + multispecies + multistage + multistep + multisystem + multitagged + multitask + multitasking + multithread + multithreaded + multitude + multitudes + multitudinous + multiuser + multivariate + multiversion + multivoltine + multiway + multiword + multiwords + mum + mumble + mumbled + mumbler + mumblers + mumbles + mumbling + mumblings + Mumford + mummies + mummy + munch + munched + munching + Muncie + mundane + mundanely + mung + Munich + munich + municipal + municipalities + municipality + municipally + munificent + munition + munitions + Munson + muon + Muong + muonic + muonium + muons + mural + murals + murder + murdered + murderer + murderers + murdering + murderous + murderously + murders + muriatic + Muriel + murk + murky + murmur + murmured + murmurer + murmuring + murmurs + Murphy + murraro + Murray + murre + Muscat + muscle + muscled + muscles + muscling + Muscovite + Muscovy + muscular + musculature + musculus + muse + mused + muses + museum + museums + mush + mushroom + mushroomed + mushrooming + mushrooms + mushy + music + musical + musicale + musically + musicals + musician + musicianly + musicians + musicology + musing + musings + musk + Muskegon + muskellunge + musket + muskets + muskmelon + muskox + muskoxen + muskrat + muskrats + musks + muslim + muslin + mussel + mussels + must + mustache + mustached + mustaches + mustachio + mustang + mustard + muster + mustiness + mustn't + musts + musty + mutability + mutable + mutableness + mutagen + mutandis + mutant + mutate + mutated + mutates + mutating + mutation + mutational + mutations + mutatis + mutative + mute + muted + mutely + muteness + mutilate + mutilated + mutilates + mutilating + mutilation + mutineer + mutinies + mutiny + mutt + mutter + muttered + mutterer + mutterers + muttering + mutters + mutton + mutual + mutually + mutuel + mutus + Muzak + Muzo + muzzle + muzzles + my + mycelia + Mycenae + Mycenaean + mycobacteria + mycology + myel + myeline + myeloid + Myers + mylar + mynah + Mynheer + myocardial + myocardium + myofibril + myoglobin + myopia + myopic + myosin + Myra + myriad + Myron + myrrh + myrtle + myself + mysteries + mysterious + mysteriously + mysteriousness + mystery + mystic + mystical + mystics + mystify + mystique + myth + mythic + mythical + mythologies + mythology + myths + myxomatosis + n + n's + NAACP + nab + nabbed + Nabisco + nabla + nablas + nabob + nacelle + nachas + nachus + nacre + nacreous + Nadine + nadir + nae + nag + nagana + Nagasaki + nagel + nagged + nagger + nagging + Nagoya + nags + Nagy + naiad + naif + nail + nailbrush + nailed + nailhead + nailing + nails + nainsook + Nair + Nairobi + naive + naively + naiveness + naivete + naivety + naivite + Nakayama + naked + nakedly + nakedness + namable + namaste + name + nameable + named + nameless + namelessly + namely + nameplate + namer + namers + names + namesake + namesakes + naming + Nan + nance + Nancy + Nanette + nankeen + nankin + Nanking + nannies + nannoplankton + nanny + nanoinstruction + nanoinstructions + nanoprogram + nanoprogramming + nanosec + nanosecond + nanoseconds + nanostore + nanostores + nanoword + Nantucket + Naomi + naos + nap + napalm + nape + napery + naphtha + naphthalene + naphthene + naphthol + naphthyl + napiform + napkin + napkins + Naples + Napoleon + Napoleonic + napped + napper + nappy + naps + Narbonne + narc + narceine + narcissism + narcissist + narcissistic + narcissus + narcoanalysis + narcolepsy + narcosis + narcosynthesis + narcotic + narcotics + narcotism + narcotization + narcotize + narcotized + narcotizing + nard + nares + narghile + nargile + nargileh + naris + nark + Narragansett + narrate + narrated + narrating + narration + narrative + narratives + narrator + narrow + narrowed + narrower + narrowest + narrowing + narrowly + narrowness + narrows + narthex + narwal + narwhal + narwhale + nary + NASA + nasal + nasalization + nasalize + nasalized + nasalizing + nasally + nascence + nascency + nascent + naseberry + Nash + Nashua + Nashville + nasion + naso + nasofrontal + nasopharynx + Nassau + nastic + nastier + nastiest + nastily + nastiness + nasturtium + nasty + Nat + natal + Natalie + natality + natant + natation + natatoria + natatorial + natatorium + natatoriums + Natchez + Nate + nates + Nathan + Nathaniel + natheless + nation + national + nationalism + nationalist + nationalistic + nationalists + nationalities + nationality + nationalization + nationalize + nationalized + nationalizes + nationalizing + nationally + nationals + nationhood + nations + nationwide + native + natively + natives + nativism + nativities + nativity + NATO + natrolite + natron + natter + nattier + nattiest + nattily + nattiness + natty + natural + naturalism + naturalist + naturalistic + naturalists + naturalization + naturalize + naturalized + naturalizing + naturally + naturalness + naturals + nature + natured + natures + naturopath + naturopathy + naught + naughtier + naughtiest + naughtily + naughtiness + naughty + naumachia + nauplius + naur + nausea + nauseate + nauseated + nauseating + nauseous + nauseum + nautch + nautical + nautically + nautili + nautiloid + nautilus + nautiluses + Navajo + naval + navally + nave + navel + navicert + navicular + navies + navigability + navigable + navigate + navigated + navigates + navigating + navigation + navigational + navigator + navigators + navvy + navy + nawab + nay + naysayer + Nazarene + Nazareth + Nazi + nazi + nazis + Nazism + NBC + NBS + NC + NCAA + NCO + NCR + ND + Ndjamena + ne + Neal + Neanderthal + neap + Neapolitan + near + nearby + neared + nearer + nearest + nearing + nearly + nearness + nears + nearshore + nearsighted + nearsightedly + nearsightedness + neat + neater + neatest + neath + neatly + neatness + Nebraska + nebraska + nebula + nebulae + nebular + nebulas + nebulous + nebulously + necessaries + necessarily + necessary + necessitate + necessitated + necessitates + necessitating + necessitation + necessities + necessitous + necessity + neck + neckband + neckerchief + necking + necklace + necklaces + neckline + necks + necktie + neckties + neckwear + necrologies + necrology + necromancer + necromancy + necromantic + necropsy + necroses + necrosis + necrotic + nectar + nectareous + nectarine + nectary + Ned + nee + need + needed + needful + needham + needier + neediest + neediness + needing + needle + needled + needlepoint + needler + needlers + needles + needless + needlessly + needlessness + needlework + needling + needn + needn't + needs + needy + nefarious + nefariously + Neff + negate + negated + negates + negating + negation + negations + negative + negatived + negatively + negativeness + negatives + negativing + negativism + negativist + negativistic + negativity + negator + negators + neglect + neglected + neglectful + neglectfully + neglectfulness + neglecting + neglects + negligee + negligence + negligent + negligently + negligible + negligibly + negotiability + negotiable + negotiate + negotiated + negotiates + negotiating + negotiation + negotiations + negotiator + negritude + Negro + negro + Negroes + negroes + Negroid + Nehru + neigh + neighbor + neighborhood + neighborhoods + neighboring + neighborliness + neighborly + neighbors + neighbour + neighbourhood + neighbouring + neighbours + Neil + neither + Nell + Nellie + Nelsen + Nelson + nematode + nemesis + neoclassic + neoclassical + neodiprion + neodymium + neolithic + neologism + neomycin + neon + neonatal + neonate + neonates + neophyte + neophytes + neoplasm + neoplastic + neoprene + neotropical + Nepal + nepal + nepenthe + nephew + nephews + nephritis + nepotism + Neptune + neptunium + nereid + Nero + nerve + nerved + nerveless + nervelessly + nervelessness + nerves + nervier + nerviest + nerving + nervous + nervously + nervousness + nervy + Ness + nest + nested + nester + nesting + nestle + nestled + nestles + nestling + Nestor + nests + net + nether + Netherlands + netherlands + nethermost + netherworld + nets + netted + netting + nettle + nettled + nettlesome + nettling + network + networked + networking + networks + Neumann + neural + neuralgia + neuralgic + neurasthenia + neurasthenic + neuritic + neuritis + neuroanatomic + neuroanatomy + neuroanotomy + neurological + neurologist + neurologists + neurology + neuromuscular + neuron + neuronal + neurons + neuropathology + neurophysiology + neuropsychiatric + neuropsychiatry + neuropteran + neuroses + neurosis + neurotic + neurotically + neuter + neutral + neutralism + neutralist + neutralities + neutrality + neutralization + neutralize + neutralized + neutralizing + neutrally + neutrino + neutrinos + neutron + neutrons + Neva + Nevada + nevada + neve + never + nevermore + nevertheless + nevi + Nevins + nevus + new + Newark + newark + Newbold + newborn + Newcastle + newcomer + newcomers + newel + Newell + newer + newest + newfangled + newfound + Newfoundland + newish + newline + newlines + newly + newlywed + Newman + newness + Newport + news + newsboy + newscast + newscaster + newsdealer + newsgroup + newsier + newsiest + newsletter + newsletters + newsman + newsmanmen + newsmen + newspaper + newspaperman + newspapermen + newspapers + newspaperwoman + newspaperwomen + newsprint + newsreel + newsstand + Newsweek + newsworthy + newsy + newt + newton + Newtonian + newtonian + next + nexus + nexuses + Nguyen + NH + niacin + Niagara + Niamey + nib + nibble + nibbled + nibbler + nibblers + nibbles + nibbling + Nibelung + Nicaragua + nicaragua + nice + nicely + niceness + nicer + nicest + niceties + nicety + niche + Nicholas + Nicholls + Nichols + Nicholson + nichrome + nick + nicked + nickel + nickeled + nickeling + nickelodeon + nickels + nicker + nicking + nicknack + nickname + nicknamed + nicknames + nicknaming + nicks + Nicodemus + Nicosia + nicotinamide + nicotine + nicotinic + nictitate + nictitated + nictitating + niece + nieces + Nielsen + Nielson + Nietzsche + niftier + niftiest + nifty + Niger + Nigeria + niggard + niggardliness + niggardly + nigger + niggle + niggled + niggler + niggling + nigh + night + nightcap + nightclub + nightdress + nightfall + nightgown + nighthawk + nightie + nightime + nightingale + nightingales + nightly + nightmare + nightmares + nightmarish + nights + nightshade + nightshirt + nightspot + nighttime + nightwear + NIH + nihilism + nihilist + nihilistic + nijholt + Nikko + Nikolai + nikon + nil + Nile + nilgai + nilgau + nilpotent + nim + nimbi + nimble + nimbleness + nimbler + nimblest + nimbly + nimbus + nimbuses + NIMH + Nina + nincompoop + nine + ninebark + ninefold + ninepins + nines + nineteen + nineteens + nineteenth + nineties + ninetieth + ninety + Nineveh + ninnies + ninny + ninth + Niobe + niobium + nip + nipped + nipper + nippier + nippiest + nipple + nipples + Nippon + nippy + nips + nirvana + nit + niter + nitpick + nitrate + nitrated + nitrating + nitration + nitre + nitric + nitride + nitrification + nitrified + nitrify + nitrifying + nitrite + nitrocellulose + nitrogen + nitrogenous + nitroglycerin + nitroglycerine + nitrous + nittier + nittiest + nitty + nitwit + nix + nixe + nixes + Nixon + NJ + NM + NNE + NNW + no + NOAA + Noah + nob + nobackspace + nobatch + Nobel + nobelium + nobilities + nobility + noble + nobleman + noblemen + nobleness + nobler + nobles + noblesse + noblest + noblewoman + noblewomen + nobly + nobodies + nobody + nobody'd + noconfirm + noctuid + nocturnal + nocturnally + nocturne + nod + nodal + nodded + nodder + nodding + node + nodes + nods + nodular + nodule + nodulose + nodulous + noebcd + noecho + Noel + noerror + noes + Noetherian + noex + noexecute + nofile + noggin + nohex + nohow + noise + noised + noiseless + noiselessly + noiselessness + noisemake + noises + noisier + noisiest + noisily + noisiness + noising + noisome + noisomely + noisomeness + noisy + Nolan + Noll + nolo + nomad + nomadic + nomap + nomenclature + nominal + nominally + nominate + nominated + nominating + nomination + nominations + nominative + nominator + nominee + nomnem + nomogram + nomograph + non + nonadaptive + nonage + nonagenarian + nonaligned + nonalignment + nonbiodegradable + nonblank + nonblocking + nonce + nonchalance + nonchalant + nonchalantly + noncom + noncombatant + noncommercial + noncommissioned + noncommittal + noncommunication + nonconductor + nonconformism + nonconformist + nonconformity + nonconsecutively + nonconservative + noncooperation + noncritical + noncyclic + nondecreasing + nondescript + nondescriptly + nondestructive + nondestructively + nondeterminacy + nondeterminate + nondeterminately + nondeterminism + nondeterministic + nondeterministically + none + nonempty + nonentities + nonentity + nonessential + nonesuch + nonetheless + nonexistence + nonexistent + nonextensible + nonferrous + nonfunctional + nongovernmental + nonidempotent + noninteracting + noninterference + noninterleaved + nonintervention + nonintrusive + nonintuitive + noninverting + nonlinear + nonlinearities + nonlinearity + nonlinearly + nonlocal + nonmaskable + nonmathematical + nonmetal + nonmetallic + nonmicroprogrammed + nonmilitary + nonmoral + nonnegative + nonnegligible + nonnumerical + nonobjective + nonogenarian + nonorthogonal + nonorthogonality + nonparametric + nonpareil + nonpartisan + nonpartisanship + nonpartizan + nonperforate + nonperishable + nonpersistent + nonplus + nonplussed + nonplussing + nonportable + nonprocedural + nonprocedurally + nonproductive + nonproductiveness + nonprofit + nonprogrammable + nonprogrammer + nonrandom + nonrenewable + nonrepresentational + nonresidence + nonresident + nonresistance + nonresistant + nonrestrictive + nonscheduled + nonsectarian + nonsegmented + nonsense + nonsensic + nonsensical + nonsequential + nonsignificant + nonskid + nonspecialist + nonspecialists + nonstandard + nonstop + nonstowed + nonsubscripted + nonsupport + nonsymmetrical + nonsynchronous + nontechnical + nonterminal + nonterminals + nonterminating + nontermination + nonthermal + nontransparent + nontrivial + nonuniform + nonuniformity + nonunion + nonunionism + nonunionist + nonverbal + nonviolence + nonviolent + nonvoice + nonwrite + nonzero + noodle + noodles + nook + nooks + noon + noonday + noons + noontide + noontime + noose + nor + Nora + Nordhoff + Nordstrom + Noreen + Norfolk + norm + Norma + normal + normalcy + normality + normalization + normalizations + normalize + normalized + normalizes + normalizing + normally + normals + Norman + Normandy + normative + norms + Norris + north + Northampton + northbound + northeast + northeaster + northeasterly + northeastern + northeastward + northeastwards + norther + northerly + northern + northerner + northerners + northernly + northernmost + northland + Northrop + Northrup + Northumberland + northward + northwardly + northwards + northwest + northwester + northwesterly + northwestern + northwestward + northwestwards + Norton + Norwalk + Norway + norway + Norwegian + norwegian + Norwich + nos + nose + nosebag + nosebleed + nosed + nosegay + nosepiece + noses + nosey + nosier + nosiest + nosig + nosily + nosiness + nosing + nostalgia + nostalgic + nostalgically + Nostradamus + Nostrand + nostril + nostrils + nostrum + nosy + not + notable + notables + notably + notaries + notarization + notarize + notarized + notarizes + notarizing + notary + notate + notation + notational + notations + notch + notched + notches + notching + note + notebook + notebooks + noted + noterse + notes + noteworthiness + noteworthy + nothing + nothingness + nothings + noticable + notice + noticeable + noticeably + noticed + notices + noticing + notification + notifications + notified + notifier + notifiers + notifies + notify + notifying + noting + notion + notional + notions + notocord + notoriety + notorious + notoriously + Notre + Nottingham + notwithstanding + Nouakchott + nougat + nought + noun + nounal + nouns + nourish + nourished + nourishes + nourishing + nourishment + nouveau + Nov + nov + nova + novae + Novak + novas + noveboracensis + novel + novelette + novelist + novelists + novella + novellas + novelle + novels + novelties + novelty + November + november + novena + noverify + novice + novices + novitiate + novo + Novosibirsk + now + nowaday + nowadays + noway + noways + nowhere + nowise + noxious + noxiously + noxiousness + nozzle + npeel + npfx + NRC + nsec + NSF + NTIS + nu + nuance + nuanced + nuances + nub + nubbier + nubbiest + nubbin + nubby + Nubia + nubile + nucleant + nuclear + nucleate + nucleated + nucleating + nucleation + nuclei + nucleic + nucleoli + nucleolus + nucleon + nucleons + nucleotide + nucleotides + nucleus + nucleuses + nuclide + nude + nudely + nudeness + nudge + nudged + nudging + nudism + nudist + nudity + nugatory + nugget + nuisance + nuisances + null + nullary + nulled + nullification + nullified + nullifier + nullifiers + nullifies + nullify + nullifying + nullity + nulls + Nullstellensatz + num + numac + numb + numbed + number + numbered + numberer + numbering + numberless + numbers + numbing + numbly + numbness + numbs + numbskull + numerable + numeral + numerals + numerate + numerated + numerating + numeration + numerator + numerators + numeric + numerical + numerically + numerics + Numerische + numerology + numerous + numerously + numinous + numismatic + numismatics + numismatist + numskull + nun + nuncio + nuncios + nunneries + nunnery + nuns + nuptial + nurse + nursed + nursemaid + nurser + nurseries + nursery + nurserymaid + nurseryman + nurserymen + nurses + nursing + nurturance + nurture + nurtured + nurturers + nurtures + nurturing + nut + nutate + nutcrack + nutcracker + nuthatch + nutmeat + nutmeg + nutpick + nutria + nutrient + nutrients + nutriment + nutrition + nutritional + nutritionally + nutritionist + nutritionists + nutritious + nutritiously + nutritive + nuts + nutshell + nutshells + nutted + nuttier + nuttiest + nuttiness + nutty + nuzzle + nuzzled + nuzzler + nuzzling + NV + NW + NY + NYC + nylon + nymph + nymphomania + nymphomaniac + nymphs + Nyquist + NYU + o + O'Brien + o'clock + O'Connell + O'Connor + O'Dell + O'Donnell + O'Dwyer + o'er + O'Hare + O'Leary + O'Neill + o's + O'Shea + O'Sullivan + oaf + oafish + oak + oaken + Oakland + Oakley + oaks + oakum + oakwood + oar + oared + oarfish + oarlock + oars + oarsman + oarsmanship + oarsmen + oases + oasis + oast + oat + oatcake + oaten + oath + oaths + oatmeal + oats + obbligati + obbligato + obbligatos + obconic + obcordate + obduracy + obdurate + obdurately + obedience + obediences + obedient + obediently + obeisance + obeisant + obelisk + obelize + obelus + Oberlin + obese + obesity + obey + obeyed + obeying + obeys + obfuscate + obfuscated + obfuscating + obfuscation + obfuscatory + obi + obit + obituaries + obituary + obj + object + objected + objecter + objectify + objecting + objection + objectionable + objectionably + objections + objective + objectively + objectives + objectivism + objectivize + objectless + objector + objectors + objects + objet + objranging + objscan + objurgate + objurgated + objurgating + objurgation + oblanceolate + oblast + oblate + oblation + obligate + obligated + obligati + obligating + obligation + obligations + obligato + obligatory + obligatos + oblige + obliged + obligee + obliges + obliging + obligingly + obligor + oblique + obliqued + obliquely + obliqueness + obliquing + obliquity + obliterate + obliterated + obliterates + obliterating + obliteration + oblivion + oblivious + obliviously + obliviousness + oblong + obloquies + obloquy + obnoxious + obnoxiously + obnoxiousness + oboe + oboist + obolus + obovate + obovoid + obscene + obscenely + obscenities + obscenity + obscurant + obscurantism + obscurantist + obscuration + obscure + obscured + obscurely + obscurer + obscures + obscuring + obscurities + obscurity + obsequies + obsequious + obsequiously + obsequiousness + obsequy + observable + observably + observance + observances + observant + observantly + observation + observational + observations + observatories + observatory + observe + observed + observer + observers + observes + observing + obsess + obsession + obsessions + obsessive + obsessively + obsidian + obsolesce + obsolesced + obsolescence + obsolescent + obsolescing + obsolete + obsoleted + obsoleteness + obsoletes + obsoleting + obstacle + obstacles + obstetric + obstetrical + obstetrically + obstetrician + obstetrics + obstinacy + obstinate + obstinately + obstreperous + obstreperously + obstreperousness + obstruct + obstructed + obstructer + obstructing + obstruction + obstructionism + obstructionist + obstructionistic + obstructions + obstructive + obstructor + obstruent + obtain + obtainable + obtainably + obtained + obtaining + obtainment + obtains + obtrude + obtruded + obtruding + obtrusion + obtrusive + obtrusively + obtrusiveness + obtuse + obtusely + obtuseness + obverse + obversely + obviate + obviated + obviates + obviating + obviation + obviations + obvious + obviously + obviousness + ocarina + occasion + occasional + occasionally + occasioned + occasioning + occasionings + occasions + occident + occidental + occipiputs + occipita + occipital + occiput + occlude + occluded + occludes + occluding + occlusion + occlusions + occlusive + occult + occultate + occultism + occupancies + occupancy + occupant + occupants + occupation + occupational + occupationally + occupations + occupied + occupier + occupies + occupy + occupying + occur + occurred + occurrence + occurrences + occurrent + occurring + occurs + ocean + oceanaut + oceangoing + Oceania + oceanic + oceanographer + oceanographic + oceanographical + oceanography + oceanologist + oceanology + oceans + oceanside + ocelli + ocellus + ocelot + ocher + ochrogaster + Oct + oct + octagon + octagonal + octahedra + octahedral + octahedron + octahedrons + octal + octane + octant + octave + octaves + Octavia + octavo + octavos + octect + octects + octennial + octet + octets + octette + octile + octillion + October + october + octogenarian + octopi + octopus + octopuses + octoroon + octothorp + octothorpes + ocular + oculist + odalisk + odalisque + odd + oddball + odder + oddest + oddities + oddity + oddly + oddment + oddness + odds + ode + odes + Odessa + Odin + odious + odiously + odiousness + odium + odometer + odor + odoriferous + odorless + odorous + odorously + odorousness + odors + odour + Odysseus + Odyssey + Oedipal + Oedipus + oedipus + oersted + of + off + offal + offbeat + Offenbach + offence + offend + offended + offender + offenders + offending + offends + offense + offenses + offensive + offensively + offensiveness + offer + offered + offerer + offerers + offering + offerings + offers + offertories + offertory + offhand + offhanded + office + officeholder + officemate + officer + officers + offices + official + officialdom + officialism + officially + officials + officiate + officiated + officiating + officiation + officiator + officio + officious + officiously + officiousness + offing + offline + offload + offloaded + offloading + offloads + offpspring + offs + offsaddle + offset + offsets + offsetting + offshoot + offshoots + offshore + offside + offspring + offsprings + offstage + oft + often + oftentimes + Ogden + ogee + ogle + ogled + ogler + ogling + ogre + ogreish + ogress + ogrish + oh + Ohio + ohio + ohm + ohmic + ohmmeter + ohs + oil + oilcloth + oiled + oiler + oilers + oilier + oiliest + oilily + oiliness + oiling + oilman + oilmen + oils + oilseed + oilskin + oily + oink + oint + ointment + OK + ok + okanagan + okapi + okay + Okinawa + Oklahoma + oklahoma + okra + Olaf + Olav + old + olden + Oldenburg + older + oldest + oldish + oldness + olds + Oldsmobile + oldster + oldsters + oldy + oleaginous + oleander + olefin + olefins + oleo + oleomargarin + oleomargarine + oleoresin + olfactories + olfactory + Olga + oligarch + oligarchic + oligarchies + oligarchy + oligoclase + oligopoly + Olin + olive + olives + Olivetti + Olivia + olivine + Olsen + Olson + Olympia + olympiad + Olympic + Omaha + omaha + Oman + ombudsman + ombudsmen + ombudsperson + omega + omelet + omelette + omelettes + omen + omens + omicron + omikron + ominous + ominously + ominousness + omission + omissions + omit + omits + omitted + omitting + omnibus + omnibuses + omnidirectional + omnipotence + omnipotent + omnipresence + omnipresent + omniscience + omniscient + omnisciently + omnivore + omnivorous + on + onanism + onboard + once + oncology + oncoming + one + Oneida + oneness + onerous + onerously + ones + oneself + onetime + oneupmanship + ongoing + onion + onions + onionskin + online + onlooker + onlooking + only + onomatopoeia + onomatopoeic + onomatopoetic + Onondaga + onrush + onrushing + onset + onsets + onshore + onslaught + Ontario + onto + ontogeny + ontology + onus + onward + onwards + onyx + oocyte + oodles + oogenesis + oolong + oomph + oops + oosterbeek + ooze + oozed + oozier + ooziest + oozing + oozy + opacity + opal + opalesce + opalesced + opalescence + opalescent + opalescing + opals + opaque + opaquely + opaqueness + opcode + OPEC + Opel + open + opened + opener + openers + openhanded + openhandedly + openhandedness + openhearted + openheartedly + openheartedness + opening + openings + openly + openness + opens + openwork + opera + operable + operand + operandi + operands + operant + operas + operate + operated + operates + operatic + operatically + operating + operation + operational + operationally + operations + operative + operatives + operator + operators + opercula + operculum + operculums + operetta + operon + Ophiucus + ophthalmia + ophthalmic + ophthalmologist + ophthalmology + opiate + opine + opined + opining + opinion + opinionate + opinionated + opinionatedly + opinionatedness + opinionative + opinions + opium + opossum + Oppenheimer + opponent + opponents + opportune + opportunely + opportuneness + opportunism + opportunist + opportunistic + opportunities + opportunity + opposable + oppose + opposed + opposes + opposing + opposite + oppositely + oppositeness + opposites + opposition + oppositions + oppossum + oppress + oppressed + oppresses + oppressing + oppression + oppressive + oppressively + oppressiveness + oppressor + oppressors + opprobrious + opprobriously + opprobrium + opt + optative + opted + opthalmic + opthalmology + optic + optical + optically + optician + optics + optima + optimal + optimality + optimally + optimism + optimist + optimistic + optimistically + optimization + optimizations + optimize + optimized + optimizer + optimizers + optimizes + optimizing + optimum + optimums + opting + option + optional + optionally + options + optoacoustic + optoisolate + optometrist + optometry + opts + opulence + opulency + opulent + opulently + opus + opuses + or + oracle + oracles + oracular + oracularly + oral + orally + orange + orangeade + orangeroot + oranges + orangoutang + orangutan + orate + orated + orating + oration + orations + orator + oratoric + oratorical + oratorically + oratories + oratorio + oratorios + orators + oratory + orb + orbicular + orbiculate + orbit + orbital + orbitally + orbited + orbiter + orbiters + orbiting + orbits + orchard + orchards + orchestra + orchestral + orchestrally + orchestras + orchestrate + orchestrated + orchestrates + orchestrating + orchestration + orchid + orchids + orchis + ordain + ordained + ordaining + ordains + ordeal + order + ordered + ordering + orderings + orderlies + orderliness + orderly + orders + ordinal + ordinance + ordinances + ordinaries + ordinarily + ordinariness + ordinary + ordinate + ordinates + ordination + ordnance + ordure + ore + ored + oregano + Oregon + oregon + oregoni + ores + Oresteia + Orestes + org + organ + organdie + organdies + organdy + organic + organically + organised + organism + organismal + organismic + organisms + organist + organists + organizable + organization + organizational + organizationally + organizations + organize + organized + organizer + organizers + organizes + organizing + organometallic + organs + organza + orgasm + orgasmic + orgiastic + orgies + orgy + orians + oriel + orient + oriental + orientate + orientated + orientating + orientation + orientations + oriented + orienting + orients + orifice + orifices + origami + origin + original + originality + originally + originals + originate + originated + originates + originating + origination + originator + originators + origins + Orin + Orinoco + oriole + Orion + orison + Orkney + orl + Orlando + Orleans + orleans + orly + ormolu + ornament + ornamental + ornamentally + ornamentation + ornamented + ornamenting + ornaments + ornate + ornateness + orneriness + ornery + ornithological + ornithologist + ornithologists + ornithology + orography + Orono + orotund + orphan + orphanage + orphaned + orphans + Orpheus + Orphic + Orr + orris + Ortega + orthant + orthicon + orthoclase + orthodontia + orthodontic + orthodontics + orthodontist + orthodox + orthodoxies + orthodoxy + orthoganal + orthogonal + orthogonality + orthogonally + orthographer + orthographic + orthographies + orthography + orthonormal + orthonormality + orthopaedics + orthopedic + orthopedics + orthopedist + orthophosphate + orthopteran + orthorhombic + ortman + Orville + Orwell + Orwellian + oryx + Osaka + osaka + Osborn + Osborne + Oscar + oscillate + oscillated + oscillates + oscillating + oscillation + oscillations + oscillator + oscillators + oscillatory + oscilloscope + oscilloscopes + osculate + osculated + osculating + osculation + Osgood + Oshkosh + osi + osier + Osiris + Oslo + oslo + osmium + osmosis + osmotic + osmotically + osprey + ospreys + osseous + ossification + ossified + ossify + ossifying + ostensible + ostensibly + ostentation + ostentatious + ostentatiously + osteology + osteomyelitis + osteopath + osteopathic + osteopathy + osteoporosis + ostler + ostracism + ostracize + ostracized + ostracizing + ostracod + Ostrander + ostrich + ostriches + Oswald + Othello + other + otherness + others + otherwise + otherworld + otherworldliness + otherworldly + otiose + Otis + otitis + Ott + Ottawa + otter + otters + Otto + Ottoman + Ouagadougou + ouch + ought + oughtn't + ounce + ounces + our + ours + ourself + ourselves + oust + ouster + out + outback + outbid + outbidding + outboard + outbound + outbreak + outbreaks + outbuilding + outburst + outbursts + outcast + outcasts + outclass + outcome + outcomes + outcompete + outcries + outcrop + outcropped + outcropping + outcrossing + outcry + outdated + outdid + outdistance + outdistanced + outdistancing + outdo + outdoing + outdone + outdoor + outdoors + outer + outermost + outfield + outfielder + outfit + outfits + outfitted + outfitter + outfitting + outflank + outflanks + outflow + outfox + outgo + outgoes + outgoing + outgone + outgrew + outgrow + outgrowing + outgrown + outgrows + outgrowth + outguess + outhouse + outing + outlaid + outlander + outlandish + outlast + outlasts + outlaw + outlawed + outlawing + outlawries + outlawry + outlaws + outlay + outlaying + outlays + outlet + outlets + outline + outlined + outlines + outlining + outlive + outlived + outlives + outliving + outlook + outlying + outmaneuver + outmanoeuvered + outmanoeuvering + outmanoeuvre + outmatch + outmoded + outnumber + outnumbered + outpatient + outperform + outperformed + outperforming + outperforms + outplay + outpoint + outpost + outposts + output + outputs + outputted + outputting + outrage + outraged + outrageous + outrageously + outrageousness + outrages + outraging + outran + outrank + outreach + outrider + outrigger + outright + outrightness + outrun + outrunning + outruns + outs + outsell + outselling + outset + outshine + outshined + outshining + outshone + outside + outsider + outsiders + outsize + outskirts + outsmart + outsold + outspoken + outspokenness + outspread + outspreading + outstanding + outstandingly + outstretch + outstretched + outstrip + outstripped + outstripping + outstrips + outtalk + outvote + outvoted + outvotes + outvoting + outward + outwardly + outwardness + outwards + outwear + outwearing + outweigh + outweighed + outweighing + outweighs + outwent + outwit + outwits + outwitted + outwitting + outwore + outworn + ouvre + ouzel + ouzo + ova + oval + ovals + ovarian + ovaries + ovary + ovate + ovately + ovation + oven + ovenbird + ovens + over + overact + overage + overall + overalls + overawe + overawed + overawing + overbalance + overbalanced + overbalancing + overbar + overbear + overbearing + overbid + overbidding + overblown + overboard + overbore + overborne + overcame + overcast + overcharge + overcharged + overcharging + overcloud + overcoat + overcoats + overcome + overcomes + overcoming + overcrowd + overcrowded + overcrowding + overcrowds + overdefined + overdid + overdo + overdoing + overdominant + overdone + overdose + overdraft + overdrafts + overdraw + overdrawing + overdrawn + overdress + overdrew + overdrive + overdue + overemphasis + overemphasized + overestimate + overestimated + overestimates + overestimating + overestimation + overfill + overflow + overflowed + overflowing + overflows + overgrew + overgrow + overgrowing + overgrown + overgrowth + overhand + overhang + overhanging + overhangs + overhaul + overhauled + overhauling + overhauls + overhead + overheads + overhear + overheard + overhearing + overhears + overhung + overidden + overjoy + overjoyed + overkill + overlaid + overland + overlap + overlapped + overlapping + overlaps + overlay + overlayed + overlaying + overlays + overload + overloaded + overloading + overloads + overlook + overlooked + overlooking + overlooks + overlord + overly + overmuch + overnight + overnighter + overnighters + overpass + overplay + overpower + overpowered + overpowering + overpowers + overprint + overprinted + overprinting + overprints + overproduction + overprotective + overran + overrate + overrated + overrating + overreach + overreact + overreacted + overridden + override + overrides + overriding + overrode + overrule + overruled + overrules + overruling + overrun + overrunning + overruns + oversaw + oversea + overseas + oversee + overseeing + overseen + overseer + overseers + oversees + overshadow + overshadowed + overshadowing + overshadows + overshoe + overshoot + overshooting + overshot + oversight + oversights + oversimplification + oversimplifications + oversimplified + oversimplifies + oversimplify + oversimplifying + oversize + oversized + overskirt + oversleep + oversleeping + overslept + overspread + overspreading + overstate + overstated + overstatement + overstatements + overstates + overstating + overstay + overstep + overstepped + overstepping + overstock + overstocked + overstocking + overstocks + overstory + overstrike + overstrikes + overstriking + overstruck + overstrung + overstuff + oversubscribed + oversupplied + oversupplies + oversupply + oversupplying + overt + overtake + overtaken + overtaker + overtakers + overtakes + overtaking + overtax + overthrew + overthrow + overthrowing + overthrown + overtime + overtly + overtone + overtones + overtook + overtop + overtopped + overtopping + overture + overtures + overturn + overturned + overturning + overturns + overtyped + overuse + overview + overviews + overvoltage + overweening + overweigh + overweight + overwhelm + overwhelmed + overwhelming + overwhelmingly + overwhelms + overwinter + overwintered + overwintering + overwork + overworked + overworking + overworks + overwrite + overwrites + overwriting + overwritten + overwrought + overzealous + Ovid + oviduct + oviform + oviparity + oviparous + oviparously + oviposition + ovipositor + ovoid + ovoidal + ovular + ovulate + ovulated + ovulating + ovulation + ovule + ovum + ow + owe + owed + Owens + owes + owing + owl + owlish + owlishly + owls + owly + own + owned + owner + ownerless + owners + ownership + ownerships + owning + owns + ox + oxalate + oxalic + oxblood + oxbow + oxcart + oxen + oxeye + Oxford + oxidant + oxidate + oxidation + oxide + oxides + oxidization + oxidize + oxidized + oxidizer + oxidizing + oxlike + Oxnard + Oxonian + oxtail + oxyacetylene + oxygen + oxygenate + oxygenated + oxygenating + oxygenation + oxygenator + oxygenize + oxygenized + oxygenizing + oxymomora + oxymoron + oyes + oyez + oyster + oysters + Ozark + ozone + ozonic + p + p's + pa + Pablo + Pabst + pabulum + paca + pace + paced + pacemake + pacemaker + pacer + pacers + paces + pacesetting + pachisi + pachyderm + pachydermateous + pacific + pacificate + pacification + pacified + pacifier + pacifies + pacifism + pacifist + pacify + pacing + pacinko + pack + package + packaged + packager + packagers + packages + packaging + packagings + Packard + packed + packer + packers + packet + packets + packing + packman + packrat + packs + packsack + packsaddle + packthread + pact + pacts + pad + padauk + padded + padding + paddle + paddlefish + paddock + paddy + padishah + padlock + padre + padrone + pads + paduasoy + paean + paella + paeon + paesano + pagan + paganize + pagans + page + pageant + pageantry + pageants + pageboy + paged + pager + pagers + pages + paginal + paginate + paginated + paginates + paginating + pagination + paging + pagoda + pagurid + pah + pahlavi + pahoehoe + paid + pail + paillasse + paillette + pails + pain + Paine + pained + painful + painfully + painkiller + painless + pains + painstaking + painstakingly + paint + paintbrush + paintbrushes + painted + painter + painterly + painters + painting + paintings + paints + painty + pair + paired + pairing + pairings + pairs + pairwise + paisa + paisano + paisley + pajama + pajamas + Pakistan + pakistan + Pakistani + pal + palace + palaces + paladin + palaeontology + palaestra + palankeen + palanquin + palatable + palatal + palate + palates + palatial + Palatine + palatize + palaver + palazzi + palazzo + pale + palea + paled + paleethnology + palely + paleness + paleoanthropic + paleography + paleolith + Paleolithic + paleontography + paleontology + Paleozoic + paler + Palermo + pales + palest + Palestine + palestra + paletot + palette + palfrey + palimpset + palindrome + palindromic + paling + palingenesis + palinode + palisade + palish + pall + palladia + Palladian + palladic + palladium + palladous + pallbearer + pallet + palletize + pallette + palliasse + palliate + palliative + pallid + pallium + pallor + palm + palmar + palmary + palmate + palmed + palmer + palmetto + palming + Palmolive + palms + Palmyra + Palo + palo + Palomar + palpable + pals + palsy + Pam + Pamela + pampa + pamper + pampered + pamphlet + pamphlets + pan + panacea + panaceas + panama + pancake + pancakes + Pancho + pancreas + pancreatic + panda + Pandanus + pandas + pandemic + pandemics + pandemonium + pander + Pandora + pane + panel + paneled + paneling + panelist + panelists + panelling + panels + panes + pang + pangs + panhandle + panic + panicked + panicking + panicky + panicle + panics + panjandrum + panmixia + panned + panning + panoply + panorama + panoramic + pans + pansies + pansy + pant + panted + pantheism + pantheist + pantheon + panther + panthers + panties + panting + pantomime + pantomimic + pantries + pantry + pants + panty + pantyhose + Paoli + pap + papa + papal + papaw + paper + paperback + paperbacks + papered + paperer + paperers + papering + paperings + papers + paperweight + paperwork + papery + papillary + papoose + Pappas + pappy + paprika + Papua + papyri + papyrus + par + parabola + parabolic + paraboloid + paraboloidal + parachute + parachuted + parachutes + parade + paraded + parades + paradigm + paradigmatic + paradigms + parading + paradise + paradox + paradoxes + paradoxic + paradoxical + paradoxically + paraffin + paragon + paragonite + paragons + paragraph + paragraphed + paragrapher + paragraphing + paragraphs + Paraguay + paraguay + parakeet + paralinguistic + parallax + parallel + paralleled + parallelepiped + paralleling + parallelism + parallelize + parallelized + parallelizes + parallelizing + parallelled + parallelling + parallelogram + parallelograms + parallels + paralysed + paralysis + paralytic + paralyze + paralyzed + paralyzes + paralyzing + param + paramagnet + paramagnetic + paramecia + paramecium + parameter + parameterizable + parameterization + parameterizations + parameterize + parameterized + parameterizes + parameterizing + parameterless + parameters + parametric + parametrized + parametrizing + paramilitary + paramount + Paramus + paranoia + paranoiac + paranoid + paranormal + paranotions + parapet + parapets + paraphernalia + paraphrase + paraphrased + paraphrases + paraphrasing + parapsychology + parasite + parasites + parasitic + parasitics + parasiticus + parasitism + parasitized + parasitoid + parasitoids + parasol + parasympathetic + paratroop + paraxial + parboil + parc + parcel + parceled + parceling + parcels + parch + parched + parchment + pardon + pardonable + pardonably + pardoned + pardoner + pardoners + pardoning + pardons + pare + pared + paregoric + parenchyma + parent + parentage + parental + parentheses + parenthesis + parenthesize + parenthesized + parenthesizes + parenthesizing + parenthetic + parenthetical + parenthetically + parenthood + parents + pares + Pareto + parfield + pariah + parimutuel + paring + parings + Paris + paris + parish + parishes + parishioner + Parisian + parity + park + Parke + parked + parker + parkers + parking + Parkinson + parkish + parkland + parklike + parks + parkway + parlance + parlay + parley + parliament + parliamentarian + parliamentary + parliaments + parlor + parlors + parmesan + parochial + parodies + parody + parole + paroled + parolee + paroles + paroling + parquet + Parr + parried + Parrish + parrot + parroting + parrots + parry + pars + parse + parsecs + parsed + parser + parsers + parses + Parsifal + parsimonious + parsimony + parsing + parsings + parsley + parsnip + parson + parsonage + parsons + part + partake + partaker + partakes + partaking + parted + parter + parters + parthenogenesis + Parthenon + partial + partialed + partiality + partially + partials + participant + participants + participate + participated + participates + participating + participation + participative + participatory + participle + particle + particles + particular + particularly + particulars + particulate + parties + parting + partings + partisan + partisans + partition + partitioned + partitioning + partitions + partly + partner + partnered + partners + partnership + partook + partridge + partridges + parts + party + parus + parvenu + Pasadena + Pascal + pascal + paschal + pasha + Paso + pass + passable + passage + passages + passageway + Passaic + passband + passbook + passe + passed + passenger + passengers + passer + passerby + passerines + passers + passes + passing + passion + passionate + passionately + passions + passivate + passive + passively + passiveness + passivity + Passover + passport + passports + password + passwords + past + paste + pasteboard + pasted + pastel + pastes + pasteup + Pasteur + pasteurized + pastiche + pastime + pastimes + pasting + pastness + pastor + pastoral + pastors + pastry + pasts + pasture + pastures + pasty + pat + Patagonia + patch + patched + patches + patchiness + patching + patchwork + patchy + pate + paten + patent + patentable + patented + patentee + patenter + patenters + patenting + patently + patents + pater + paternal + paternally + paternoster + Paterson + path + pathetic + pathname + pathnames + pathogen + pathogenesis + pathogenic + pathological + pathology + pathos + paths + pathway + pathways + patience + patient + patiently + patients + patina + patio + patriarch + patriarchal + patriarchs + patriarchy + Patrice + Patricia + patrician + patricians + Patrick + patrimonial + patrimony + patriot + patriotic + patriotism + patriots + patristic + patrol + patrolled + patrolling + patrolman + patrolmen + patrols + patron + patronage + patroness + patronize + patronized + patronizes + patronizing + patrons + pats + Patsy + patter + pattered + pattering + patterings + pattern + patterned + patterning + patterns + patters + Patterson + Patti + patties + Patton + patty + paucity + paucitypause + Paul + Paula + Paulette + Pauli + Pauline + Paulo + Paulsen + Paulson + Paulus + paunch + paunchy + pauper + pause + paused + pauses + pausing + pavanne + pave + paved + pavement + pavements + paves + pavilion + pavilions + paving + Pavlov + paw + pawing + pawn + pawns + pawnshop + paws + Pawtucket + pax + pay + payable + paycheck + paychecks + paycheque + paycheques + payday + payed + payer + payers + paying + paymaster + payment + payments + Payne + payoff + payoffs + payroll + pays + Paz + PBS + pbx + pbxes + pc + pcm + pdn + PDP + pdp + pea + Peabody + peace + peaceable + peaceably + peaceful + peacefully + peacefulness + peacemake + peacetime + peach + peaches + Peachtree + peacock + peacocks + peafowl + peak + peaked + peaking + peaks + peaky + peal + Peale + pealed + pealing + peals + peanut + peanuts + pear + Pearce + pearl + pearlite + pearls + pearlstone + pearly + pears + Pearson + peas + peasant + peasantry + peasants + Pease + peat + pebble + pebbles + pecan + peccary + peck + pecked + pecking + pecks + Pecos + pectoral + pectoralis + peculate + peculiar + peculiarities + peculiarity + peculiarly + pecuniary + pedagogic + pedagogical + pedagogically + pedagogue + pedagogy + pedal + pedant + pedantic + pedantically + pedantics + pedantry + peddle + peddler + peddlers + pedestal + pedestals + pedestrian + pedestrians + pediatric + pediatrician + pediatricians + pediatrics + pedigree + pediment + Pedro + pee + peek + peeke + peeked + peeking + peeks + peel + peeled + peeling + peels + peep + peeped + peeper + peephole + peeping + peeps + peepy + peer + peered + peering + peerless + peers + peeve + peg + Pegasus + pegboard + pegging + Peggy + pegs + pejorative + pejoratively + Peking + peking + pelage + pelagic + Pelham + pelican + pellagra + pellet + pellets + pelt + pelting + peltry + pelts + pelvic + pelvis + Pembroke + pemmican + pen + penal + penalize + penalized + penalizes + penalizing + penalties + penalty + penance + penates + pence + penchant + pencil + penciled + pencilled + pencils + pend + pendant + pended + pending + pendn + pends + pendulum + pendulums + Penelope + penetrable + penetrate + penetrated + penetrates + penetrating + penetratingly + penetration + penetrations + penetrative + penetrator + penetrators + penguin + penguins + Penh + penicillin + peninsula + peninsulas + penis + penitent + penitential + penitentiary + penman + penmen + Penn + penna + pennant + penned + pennies + penniless + penning + Pennsylvania + pennsylvania + pennsylvanicus + penny + pennyroyal + pennywhistle + Penrose + pens + Pensacola + pension + pensioner + pensions + pensive + pent + pentagon + pentagonal + pentagons + pentagram + pentane + Pentecost + pentecostal + penthouse + penultimate + penumbra + penup + penurious + penury + peony + people + peopled + peoples + Peoria + pep + pepper + peppered + peppergrass + peppering + peppermint + pepperoni + peppers + peppery + peppy + Pepsi + PepsiCo + peptic + peptidase + peptide + per + perceivable + perceivably + perceive + perceived + perceiver + perceivers + perceives + perceiving + percent + percentage + percentages + percentile + percentiles + percents + percept + perceptible + perceptibly + perception + perceptions + perceptive + perceptively + perceptual + perceptually + perch + perchance + perched + perches + perching + perchlorate + Percival + percolate + percolated + percussion + percussive + percutaneous + Percy + perdition + peremptory + perennial + perennially + perennials + Perez + perfect + perfected + perfectible + perfecting + perfection + perfectionist + perfectionists + perfections + perfectly + perfectness + perfects + perfidious + perfidy + perforate + perforated + perforates + perforating + perforation + perforations + perforce + perform + performance + performances + performed + performer + performers + performing + performs + perfume + perfumed + perfumery + perfumes + perfuming + perfunctory + perfusion + Pergamon + perhaps + Periclean + Pericles + peridotite + perihelion + peril + Perilla + perilous + perilously + perils + perimeter + period + periodic + periodical + periodically + periodicals + periodicity + periods + peripatetic + peripheral + peripherally + peripherals + peripheries + periphery + periphrastic + periscope + perish + perishable + perishables + perished + perisher + perishers + perishes + perishing + peritectic + periwinkle + perjure + perjury + perk + Perkins + perky + Perle + permalloy + permanence + permanency + permanent + permanently + permeable + permeate + permeated + permeates + permeating + permeation + Permian + permissable + permissibility + permissible + permissiblity + permissibly + permission + permissions + permissive + permissively + permit + permits + permitted + permitting + permutation + permutations + permute + permuted + permutes + permuting + pernicious + peromyscus + peroxide + perpendicular + perpendicularly + perpendiculars + perpetrate + perpetrated + perpetrates + perpetrating + perpetration + perpetrations + perpetrator + perpetrators + perpetual + perpetually + perpetuate + perpetuated + perpetuates + perpetuating + perpetuation + perpetuity + perplex + perplexed + perplexing + perplexity + perquisite + Perry + pers + persecute + persecuted + persecutes + persecuting + persecution + persecutor + persecutors + persecutory + Perseus + perseverance + perseverant + persevere + persevered + perseveres + persevering + Pershing + Persia + persiflage + persimmon + persist + persisted + persistence + persistent + persistently + persisting + persists + person + persona + personage + personages + personal + personalities + personality + personalization + personalize + personalized + personalizes + personalizing + personally + personification + personified + personifies + personify + personifying + personnel + persons + perspective + perspectives + perspicacious + perspicuity + perspicuous + perspicuously + perspiration + perspire + persuadable + persuade + persuaded + persuader + persuaders + persuades + persuading + persuasion + persuasions + persuasive + persuasively + persuasiveness + pert + pertain + pertained + pertaining + pertains + Perth + pertinacious + pertinent + perturb + perturbate + perturbation + perturbations + perturbed + Peru + peru + perusal + peruse + perused + peruser + perusers + peruses + perusing + Peruvian + pervade + pervaded + pervades + pervading + pervasion + pervasive + pervasively + pervasiveness + perverse + perversion + pervert + perverted + perverts + pessimal + pessimism + pessimist + pessimistic + pessimum + pest + peste + pester + pesticide + pestilence + pestilent + pestilential + pestle + pests + pet + petal + petals + Pete + peter + peterman + peters + Petersburg + Petersen + Peterson + petit + petite + petition + petitioned + petitioner + petitioners + petitioning + petitions + petrel + petri + petrified + petrify + petrochemical + petroglyph + petrol + petroleum + petrology + pets + petted + petter + petters + petticoat + petticoats + pettiness + petting + petty + petulant + petunia + Peugeot + pew + pewee + pews + pewter + pfennig + Pfizer + pflag + pfx + pgntt + pgnttrp + Ph.D + phage + phagocyte + phalanger + phalanx + phalarope + phantasy + phantom + phantoms + pharmaceutic + pharmacist + pharmacology + pharmacopoeia + pharmacy + phase + phased + phaser + phasers + phases + phasing + PhD + pheasant + pheasants + Phelps + phenol + phenolic + phenomena + phenomenal + phenomenalists + phenomenally + phenomenological + phenomenologically + phenomenologies + phenomenology + phenomenon + phenotype + phenotypes + phenotypic + phenyl + phenylalanine + pheromone + pheromones + phi + Phil + Philadelphia + philadelphia + philanthrope + philanthropic + philanthropy + philharmonic + Philip + Philippine + Philistine + Phillip + philodendron + philology + philosoph + philosopher + philosophers + philosophic + philosophical + philosophically + philosophies + philosophize + philosophized + philosophizer + philosophizers + philosophizes + philosophizing + philosophy + Phipps + phloem + phlox + phobias + phobic + phoebe + Phoenicia + phoenix + phon + phone + phoned + phoneme + phonemes + phonemic + phones + phonetic + phonetics + phoney + phonic + phoning + phonograph + phonographs + phonology + phonon + phony + phosgene + phosphate + phosphates + phosphide + phosphine + phosphor + phosphoresce + phosphorescent + phosphoric + phosphorus + phosphorylate + photo + photocomposition + photocopied + photocopier + photocopiers + photocopies + photocopy + photocopying + photodiode + photodiodes + photogenic + photograph + photographed + photographer + photographers + photographic + photographing + photographs + photography + photolysis + photolytic + photometry + photon + photopositive + photos + photosensitive + photosynthetic + photosynthetically + phototypesetter + phototypesetters + phototypesetting + phrase + phrased + phrasemake + phraseology + phrases + phrasing + phrasings + phthalate + phycomycetes + phyla + Phyllis + phylogeny + phylum + physic + physical + physically + physicalness + physicals + physician + physicians + physicist + physicists + physics + Physik + physiochemical + physiognomy + physiol + physiological + physiologically + physiologies + physiology + physiotherapist + physiotherapy + physique + phytoplankton + pi + pianissimo + pianist + pianka + piano + pianos + piazza + piazzas + pica + picas + Picasso + picayune + Piccadilly + piccolo + picea + pick + pickaxe + picked + picker + pickerel + Pickering + pickers + picket + picketed + picketer + picketers + picketing + pickets + Pickett + Pickford + picking + pickings + pickle + pickled + pickles + pickling + Pickman + pickoff + picks + pickup + pickups + picky + picnic + picnicked + picnicker + picnicking + picnics + picofarad + picojoule + picosecond + pictorial + pictorially + picture + pictured + pictures + picturesque + picturesqueness + picturing + piddle + pidgin + pie + piece + pieced + piecemeal + pieces + piecewise + piecing + Piedmont + pienaar + pier + pierce + pierced + pierces + piercing + Pierre + piers + Pierson + pies + pietism + piety + piezoelectric + pig + pigeon + pigeonberry + pigeonfoot + pigeonhole + pigeons + pigging + piggish + piggy + piggyback + piggybacked + piggybacking + piggybacks + pigment + pigmentation + pigmented + pigments + pigpen + pigroot + pigs + pigskin + pigtail + pika + pike + piker + pikes + pil + Pilate + pile + piled + pilers + piles + pilewort + pilfer + pilferage + pilgrim + pilgrimage + pilgrimages + pilgrims + piling + pilings + pill + pillage + pillaged + pillar + pillared + pillars + pillory + pillow + pillows + pills + Pillsbury + pilot + piloted + piloting + pilots + pimentel + pimp + pimple + pin + pinafore + pinball + pinch + pinched + pinches + pinching + pincushion + pine + pineapple + pineapples + pined + Pinehurst + pinene + pines + ping + pinhead + pinhole + pining + pinion + pink + pinker + pinkest + pinkie + pinkish + pinkly + pinkness + pinks + pinnacle + pinnacles + pinnate + pinned + pinning + pinnings + pinniped + pinochle + pinout + pinpoint + pinpointed + pinpointing + pinpoints + pins + pinscher + Pinsky + pint + pintail + pinto + pints + pinus + pinwheel + pinxter + pion + pioneer + pioneered + pioneering + pioneers + pions + Piotr + pious + piously + pip + pipa + pipe + piped + pipeline + pipelined + pipelines + pipelining + piper + pipers + pipes + pipette + pipid + piping + pipsissewa + piquant + pique + piracy + Piraeus + pirate + pirates + pirogue + pirouette + Piscataway + Pisces + piss + pissodes + pistachio + pistil + pistils + pistol + pistole + pistols + piston + pistons + pit + pitch + pitchblende + pitched + pitcher + pitchers + pitches + pitchfork + pitching + pitchstone + piteous + piteously + pitfall + pitfalls + pith + pithed + pithes + pithier + pithiest + pithiness + pithing + pithy + pitiable + pitied + pitier + pitiers + pities + pitiful + pitifully + pitiless + pitilessly + pitman + Pitney + pits + Pitt + pittance + pitted + Pittsburgh + pittsburgh + Pittsfield + Pittston + pituitary + pity + pitying + pityingly + Pius + pivot + pivotal + pivoting + pivots + pixel + pixels + pixy + pizza + pizzicato + Pl + placard + placards + placate + placater + place + placeable + placebo + placed + placeholder + placement + placements + placenta + placental + placer + places + placid + placidly + placing + plagiarism + plagiarist + plagioclase + plague + plagued + plagues + plaguey + plaguing + plaid + plaids + plain + plainer + plainest + Plainfield + plainly + plainness + plains + plaintext + plaintexts + plaintiff + plaintiffs + plaintive + plaintively + plaintiveness + plait + plaits + plan + planar + planarity + Planck + plane + planed + planeload + planer + planers + planes + planet + planetaria + planetarium + planetary + planetesimal + planetoid + planets + planing + plank + planking + planks + plankton + planktonic + planned + planner + planners + planning + planoconcave + planoconvex + plans + plant + plantain + plantation + plantations + planted + planter + planters + planting + plantings + plants + plaque + plasm + plasma + plasmon + plaster + plastered + plasterer + plasterers + plastering + plasters + plastic + plasticine + plasticity + plastics + plastisol + plastron + plat + plate + plateau + plateaus + plated + platelet + platelets + platen + platens + plates + platform + platforms + plating + platinum + platitude + platitudinous + Plato + platonic + Platonism + Platonist + platoon + Platte + platter + platters + platykurtic + platypus + plausibility + plausible + play + playa + playable + playback + playbacks + playboy + played + player + players + playful + playfully + playfulness + playground + playgrounds + playhouse + playing + playmate + playmates + playoff + playroom + plays + plaything + playthings + playtime + playwright + playwrights + playwriting + plaza + plea + plead + pleaded + pleader + pleading + pleads + pleas + pleasant + pleasantly + pleasantness + please + pleased + pleases + pleasing + pleasingly + pleasure + pleasures + pleat + plebeian + plebian + plebiscite + plebiscites + pledge + pledged + pledges + Pleiades + pleiotropy + Pleistocene + plenary + plenipotentiary + plenitude + plenteous + plentiful + plentifully + plenty + plenum + plethora + pleura + pleural + pleurisy + Plexiglas + plexiglass + pli + pliable + pliant + plied + pliers + plies + plight + Pliny + Pliocene + plod + plodding + plop + plot + plotlib + plots + plotted + plotter + plotters + plotting + plotx + plough + ploughman + plover + plow + plowed + plower + plowing + plowman + plows + plowshare + ploy + ploys + pluck + plucked + plucking + plucks + plucky + plug + plugboard + pluggable + plugged + plugging + plugs + plum + plumage + plumb + plumbago + plumbate + plumbed + plumber + plumbers + plumbing + plumbs + plume + plumed + plumes + plummet + plummeting + plump + plumped + plumpness + plums + plunder + plundered + plunderer + plunderers + plundering + plunders + plunge + plunged + plunger + plungers + plunges + plunging + plunk + pluperfect + plural + plurality + plurals + plus + pluses + plush + plushy + Plutarch + Pluto + pluton + plutonium + ply + Plymouth + plyscore + plywood + PM + pmsg + pneumatic + pneumococcus + pneumonia + Po + poach + poached + poacher + poaches + POBox + pocket + pocketbook + pocketbooks + pocketed + pocketful + pocketing + pockets + Pocono + pod + podge + podia + podium + pods + podunk + Poe + poem + poems + poesy + poet + poetic + poetical + poetically + poetics + poetries + poetry + poets + pogo + pogrom + poi + poignant + poignantly + Poincare + poinsettia + point + pointed + pointedly + pointer + pointers + pointing + pointless + points + pointwise + pointy + poise + poised + poises + poison + poisoned + poisoner + poisoning + poisonous + poisonousness + poisons + Poisson + poisson + poke + poked + poker + pokerface + pokes + poking + pol + Poland + poland + polar + polarimeter + Polaris + polariscope + polarities + polariton + polarity + polarization + polarizations + polarized + polarogram + polarograph + polarography + Polaroid + polaron + pole + polecat + poled + polemic + polemicists + polemics + poles + police + policed + policeman + policemen + polices + policies + policing + policy + poling + polio + poliomyelitis + polionotus + polis + polish + polished + polisher + polishers + polishes + polishing + Politburo + polite + politely + politeness + politer + politest + politic + political + politically + politician + politicians + politicization + politicking + politico + politics + polity + Polk + polka + polkadot + poll + Pollard + polled + pollen + pollinate + pollinated + pollination + pollinator + pollinators + polling + pollock + polloi + polls + pollutant + pollutants + pollute + polluted + pollutes + polluting + pollution + Pollux + polo + polonaise + polonium + polopony + polyalphabetic + polychotomous + polyculture + polyethylene + polygamous + polygon + polygonal + polygons + polygynous + polygyny + polyhedra + polyhedral + polyhedrals + polyhedron + Polyhymnia + polymer + polymerase + polymeric + polymers + polymorph + polymorphic + polymorphism + polymorphisms + polymorphous + polynomial + polynomials + Polyphemus + polyphony + polyploidy + polysaccharide + polytechnic + polytope + polytypy + pomade + pomegranate + Pomona + pomp + pompadour + pompano + Pompeii + pompey + pompon + pomposity + pompous + pompously + pompousness + Ponce + Ponchartrain + poncho + pond + ponder + pondered + pondering + ponderosa + ponderosae + ponderous + ponders + ponds + pong + ponies + pont + Pontiac + pontiff + pontific + pontificate + pony + pooch + poodle + pooh + pool + Poole + pooled + pooling + pools + poop + poor + poorer + poorest + poorly + poorness + pop + popcorn + pope + popish + poplar + poplin + popped + poppies + popping + poppy + pops + popsicle + populace + popular + popularity + popularization + popularize + popularized + popularizes + popularizing + popularly + populate + populated + populates + populating + population + populations + populaton + populism + populist + populous + populousness + porcelain + porch + porches + porcine + porcupine + porcupines + pore + pored + pores + poring + pork + porker + pornographer + pornographic + pornography + porosity + porous + porphyry + porpoise + porridge + port + portability + portable + portage + portal + portals + Porte + ported + portend + portended + portending + portends + portent + portentous + porter + porterhouse + porters + portfolio + portfolios + Portia + portico + porting + portion + portions + portland + portly + portmanteau + Porto + portrait + portraits + portraiture + portray + portrayal + portrayed + portraying + portrays + ports + Portsmouth + Portugal + portugal + portugese + Portuguese + portulaca + posable + pose + posed + Poseidon + poser + posers + poses + poseur + posey + posh + posing + posit + posited + positing + position + positional + positioned + positioning + positions + positive + positively + positiveness + positives + positron + positronium + positrons + posits + Posner + posse + posseman + possemen + possess + possessed + possesses + possessing + possession + possessional + possessions + possessive + possessively + possessiveness + possessor + possessors + possibilities + possibility + possible + possibly + possum + possums + post + postage + postal + postcard + postcondition + postdoctoral + posted + poster + posterior + posteriori + posterity + posters + postfix + postgraduate + posthumous + posting + postlude + postman + postmark + postmaster + postmasters + postmen + postmortem + postmultiply + postoffice + postoffices + postoperative + postorder + postpone + postponed + postpones + postponing + postposition + postprocess + postprocessor + postreproductive + posts + postscript + postscripts + posttest + posttests + postulate + postulated + postulates + postulating + postulation + postulations + posture + postures + postwar + posy + pot + potable + potash + potassium + potato + potatoes + potbelly + potboil + potency + potent + potentate + potentates + potential + potentialities + potentiality + potentially + potentials + potentiating + potentiometer + potentiometers + pothole + potion + potlatch + Potomac + potpourri + pots + potted + potter + potters + pottery + potting + Potts + pouch + pouches + Poughkeepsie + poultice + poultry + pounce + pounced + pounces + pouncing + pound + pounded + pounder + pounders + pounding + pounds + pour + poured + pourer + pourers + pouring + pours + pout + pouted + pouting + pouts + poverty + pow + powder + powdered + powdering + powderpuff + powders + powdery + Powell + power + powered + powerful + powerfully + powerfulness + powerhouse + powering + powerless + powerlessly + powerlessness + powers + powerset + powersets + powerstat + pox + Poynting + ppm + PR + practicable + practicably + practical + practicality + practically + practice + practiced + practices + practicing + practise + practised + practitioner + practitioners + Prado + praecox + pragmat + pragmatic + pragmatically + pragmatics + pragmatism + pragmatist + Prague + prague + prairie + prairies + praise + praised + praiser + praisers + praises + praiseworthy + praising + praisingly + pram + prance + pranced + prancer + prancing + prank + pranks + pranksters + praseodymium + prate + Pratt + Pravda + pray + prayed + prayer + prayerful + prayers + praying + pre + preach + preached + preacher + preachers + preaches + preaching + preachy + preallocate + preallocated + preallocating + preamble + preambles + preassign + preassigned + preassigning + preassigns + prebble + Precambrian + precarious + precariously + precariousness + precaution + precautions + precede + preceded + precedence + precedences + precedent + precedented + precedents + precedes + preceding + precednce + precept + precepts + precess + precesses + precessing + precession + precinct + precincts + precious + preciously + preciousness + precipice + precipitable + precipitate + precipitated + precipitately + precipitateness + precipitates + precipitating + precipitation + precipitous + precipitously + precise + precisely + preciseness + precision + precisions + preclude + precluded + precludes + precluding + precocious + precociously + precocity + precompiled + precompute + precomputed + precomputing + preconceive + preconceived + preconception + preconceptions + precondition + preconditioned + preconditions + precursor + precursors + predate + predated + predates + predating + predation + predator + predators + predatory + predecessor + predecessors + predecrement + predefine + predefined + predefines + predefining + predefinition + predefinitions + predetermine + predetermined + predetermines + predetermining + predicament + predicaments + predicate + predicated + predicates + predicating + predication + predications + predict + predictability + predictable + predictably + predicted + predicting + prediction + predictions + predictive + predictor + predictors + predicts + predilect + predilection + predilections + predisposition + predominance + predominant + predominantly + predominate + predominated + predominately + predominates + predominating + predomination + preeminent + preempt + preempted + preempting + preemption + preemptive + preemptor + preempts + preen + prefab + prefabricate + prefabricated + preface + prefaced + prefaces + prefacing + prefatory + prefect + prefecture + prefer + preferable + preferably + prefered + preference + preferences + preferential + preferentially + preferred + preferring + prefers + prefill + prefills + prefix + prefixed + prefixes + prefixing + pregnancies + pregnant + preheated + prehistoric + preinitialize + preinitialized + preinitializes + preinitializing + preinterrupt + prejudge + prejudged + prejudice + prejudiced + prejudices + prejudicing + prelate + preliminaries + preliminary + preloaded + prelude + preludes + premating + premature + prematurely + prematurity + premeditated + premier + premiere + premiers + premise + premises + premium + premiums + premonition + premultiplying + Prentice + preoccupation + preoccupied + preoccupies + preoccupy + preoptic + prep + prepaging + preparation + preparations + preparative + preparatives + preparatory + prepare + prepared + prepares + preparing + prepend + prepended + prepending + preplot + preponderance + preponderant + preponderate + preposition + prepositional + prepositions + preposterous + preposterously + preprinted + preprocessed + preprocessing + preprocessor + preprocessors + preproduction + preprogrammed + prepunched + prereproductive + prerequisite + prerequisites + prerogative + prerogatives + Presbyterian + prescan + Prescott + prescribe + prescribed + prescribes + prescribing + prescription + prescriptions + prescriptive + preselect + preselected + preselecting + preselects + presence + presences + present + presentation + presentations + presented + presenter + presenting + presently + presentness + presents + preser + preservation + preservations + preserve + preserved + preserver + preservers + preserves + preserving + preset + presets + presetting + preside + presided + presidency + president + presidential + presidents + presides + presiding + presolvated + prespective + press + pressed + presser + presses + pressing + pressings + pressure + pressured + pressures + pressuring + pressurize + pressurized + prestidigitate + prestige + prestigious + presto + Preston + presumably + presume + presumed + presumes + presuming + presumption + presumptions + presumptive + presumptuous + presumptuousness + presuppose + presupposed + presupposes + presupposing + presupposition + pretend + pretended + pretender + pretenders + pretending + pretends + pretense + pretenses + pretension + pretensions + pretentious + pretentiously + pretentiousness + pretest + pretesting + pretests + pretext + pretexts + Pretoria + prettier + prettiest + prettily + prettiness + pretty + prevail + prevailed + prevailing + prevailingly + prevails + prevalence + prevalent + prevalently + prevent + preventable + preventably + prevented + preventing + prevention + preventive + preventives + prevents + preview + previewed + previewing + previews + previous + previously + prexy + prey + preyed + preying + preys + Priam + price + priced + priceless + pricer + pricers + prices + pricing + prick + pricked + pricking + prickle + prickly + pricks + pride + prided + prides + priding + pried + priest + Priestley + priests + prig + priggish + prim + prima + primacy + primal + primaries + primarily + primary + primate + prime + primed + primeness + primer + primers + primes + primeval + priming + primitive + primitively + primitiveness + primitives + primp + primrose + prince + princely + princes + princess + princesses + Princeton + princeton + principal + principalities + principality + principally + principals + Principia + principle + principled + principles + principly + print + printable + printably + printed + printer + printers + printing + printmake + printout + printouts + prints + prio + prior + priori + priorities + prioritize + prioritized + priority + priory + Priscilla + prism + prismatic + prisms + prison + prisoner + prisoners + prisons + prissy + pristine + Pritchard + privacies + privacy + private + privately + privates + privation + privations + privet + privies + priviledge + privilege + privileged + privileges + privy + prize + prized + prizer + prizers + prizes + prizewinning + prizing + pro + probabilist + probabilistic + probabilistically + probabilities + probability + probable + probably + probate + probated + probates + probating + probation + probative + probe + probed + probes + probing + probings + probity + problem + problematic + problematical + problematically + problems + procaine + procedes + procedural + procedurally + procedure + procedured + procedures + proceduring + proceed + proceeded + proceeding + proceedings + proceeds + process + processed + processes + processing + procession + processor + processors + proclaim + proclaimed + proclaimer + proclaimers + proclaiming + proclaims + proclamation + proclamations + proclivities + proclivity + procotols + procrastinate + procrastinated + procrastinates + procrastinating + procrastination + procreate + procrustean + Procrustes + Procter + proctor + procurable + procural + procurals + procure + procured + procurement + procurements + procurer + procurers + procures + procuring + Procyon + prod + prodigal + prodigally + prodigious + prodigy + produce + produced + producer + producers + produces + producible + producing + product + production + productions + productive + productively + productivity + products + Prof + prof + profane + profanely + profess + professed + professes + professing + profession + professional + professionalism + professionally + professionals + professions + professor + professorial + professors + proffer + proffered + proffers + proficiencies + proficiency + proficient + proficiently + profile + profiled + profiles + profiling + profit + profitability + profitable + profitably + profited + profiteer + profiteers + profiting + profits + profitted + profitter + profitters + profligate + profound + profoundest + profoundly + profundity + profuse + profusely + profusion + prog + progenies + progenitor + progenitors + progeny + prognosis + prognosticate + program + programmability + programmable + programmatically + programme + programmed + programmer + programmers + programmes + programming + programmng + programs + progress + progressed + progresses + progressing + progression + progressions + progressive + progressively + prohibit + prohibited + prohibiting + prohibition + prohibitions + prohibitive + prohibitively + prohibitory + prohibits + project + projected + projectile + projecting + projection + projections + projective + projectively + projector + projectors + projects + prokaryote + Prokofieff + prolate + prolegomena + proletariat + proliferate + proliferated + proliferates + proliferating + proliferation + prolific + proline + prolix + prolog + prologue + prolong + prolongate + prolonged + prolonging + prolongs + prolusion + prom + promenade + promenades + Promethean + Prometheus + promethium + prominence + prominent + prominently + promiscuity + promiscuous + promise + promised + promises + promising + promontory + promote + promoted + promoter + promoters + promotes + promoting + promotion + promotional + promotions + prompt + prompted + prompter + promptest + prompting + promptings + promptitude + promptly + promptness + prompts + promulgate + promulgated + promulgates + promulgating + promulgation + prone + proneness + prong + pronged + prongs + pronotum + pronoun + pronounce + pronounceable + pronounced + pronouncement + pronouncements + pronounces + pronouncing + pronouns + pronto + pronunciation + pronunciations + proof + proofing + proofread + proofreader + proofs + prop + propaganda + propagandist + propagate + propagated + propagates + propagating + propagation + propagations + propane + propel + propellant + propelled + propeller + propellers + propelling + propels + propensity + proper + properly + properness + propertied + properties + property + prophecies + prophecy + prophesied + prophesier + prophesies + prophesy + prophet + prophetic + prophets + propionate + propitiate + propitious + proponent + proponents + proportion + proportional + proportionality + proportionally + proportionate + proportionately + proportioned + proportioning + proportionment + proportions + propos + proposal + proposals + propose + proposed + proposer + proposes + proposing + proposition + propositional + propositionally + propositioned + propositioning + propositions + propound + propounded + propounding + propounds + proprietary + proprietor + proprietors + propriety + proprioception + proprioceptive + props + propulsion + propulsions + propyl + propylene + prorate + prorated + prorates + prorogue + pros + prosaic + proscenium + proscribe + proscription + prose + prosecute + prosecuted + prosecutes + prosecuting + prosecution + prosecutions + prosecutor + proselytize + proselytized + proselytizes + proselytizing + Proserpine + prosodic + prosodics + prosody + prosopopoeia + prospect + prospected + prospecting + prospection + prospections + prospective + prospectively + prospectives + prospector + prospectors + prospects + prospectus + prosper + prospered + prospering + prosperity + prosperous + prospers + prostate + prosthetic + prostitute + prostitutes + prostitution + prostrate + prostration + protactinium + protagonist + protagonists + protean + protease + protect + protected + protecting + protection + protections + protective + protectively + protectiveness + protector + protectorate + protectors + protects + protege + proteges + protein + proteins + proteolysis + proteolytic + protest + protestant + protestation + protestations + protested + protesting + protestingly + protestor + protestors + protests + prothonotary + protocol + protocols + proton + protonated + protonotion + protonotions + protons + Protophyta + protoplasm + protoplasmic + prototype + prototyped + prototypes + prototypic + prototypical + prototypically + prototyping + protoypes + Protozoa + protozoan + protract + protracted + protrude + protruded + protrudes + protruding + protrusion + protrusions + protrusive + protuberant + proud + prouder + proudest + proudly + Proust + provability + provable + provably + prove + proved + proven + provenance + prover + proverb + proverbial + proverbs + provers + proves + provide + provided + providence + provident + providential + provider + providers + provides + providing + province + provinces + provincial + provincially + proving + provision + provisional + provisionally + provisioned + provisioning + provisions + proviso + provisos + provocateur + provocation + provocative + provocatively + provoke + provoked + provokes + provoking + provost + prow + prowess + prowl + prowled + prowler + prowlers + prowling + prows + proximal + proximate + proximately + proximities + proximity + proxy + prudence + prudent + prudential + prudently + prudishness + prune + pruned + pruner + pruners + prunes + pruning + prurient + Prussia + pry + prying + prys + ps + psalm + psalms + psalter + psend + pseudo + pseudodevice + pseudofiles + pseudoinstruction + pseudoinstructions + pseudonym + pseudonyms + pseudoobscura + pseudoparallelism + psi + psize + psuedo + psw + psych + psyche + psyches + psychiatric + psychiatrist + psychiatrists + psychiatry + psychic + psycho + psychoacoustic + psychoanalysis + psychoanalyst + psychoanalytic + psychoanalytical + psychobiology + psychological + psychologically + psychologist + psychologists + psychology + psychometry + psychopath + psychopathic + psychophysic + psychophysiology + psychopomp + psychoses + psychosexual + psychosis + psychosocial + psychosomatic + psychotherapeutic + psychotherapist + psychotherapy + psychotic + psyllium + PTA + ptarmigan + pterodactyl + Ptolemaic + Ptolemy + ptt + ptts + pub + puberty + pubescent + pubic + public + publication + publications + publicity + publicize + publicized + publicizes + publicizing + publicly + publish + published + publisher + publishers + publishes + publishing + pubs + Puccini + puck + pucker + puckered + puckering + puckers + puckish + pudding + puddings + puddingstone + puddle + puddles + puddling + puddly + pueblo + puerile + Puerto + puerto + puff + puffball + puffed + puffery + puffin + puffing + puffs + puffy + pug + puget + Pugh + puissant + puke + Pulaski + Pulitzer + pull + pullback + pulled + puller + pulley + pulleys + pulling + pullings + Pullman + pullover + pulls + pulmonary + pulp + pulping + pulpit + pulpits + pulsar + pulsate + pulsation + pulsations + pulse + pulsed + pulses + pulsing + pulverable + puma + pumice + pummel + pump + pumped + pumping + pumpkin + pumpkins + pumpkinseed + pumps + pun + punch + punched + puncher + punches + punching + punctual + punctually + punctuate + punctuated + punctuating + punctuation + puncture + punctured + punctures + puncturing + pundit + punditry + pungent + Punic + punish + punishable + punished + punishes + punishing + punishment + punishments + punitive + punk + punky + puns + punster + punt + punted + punting + punts + puny + pup + pupa + pupae + pupal + pupate + pupil + pupils + puppet + puppeteer + puppets + puppies + puppy + puppyish + pups + Purcell + purchasable + purchase + purchaseable + purchased + purchaser + purchasers + purchases + purchasing + Purdue + pure + puree + purely + purer + purest + purgation + purgative + purgatory + purge + purged + purges + purging + purification + purifications + purified + purifier + purifiers + purifies + purify + purifying + Purina + purine + purist + purists + Puritan + puritanic + purity + purl + purloin + purple + purpler + purplest + purport + purported + purportedly + purporter + purporters + purportes + purporting + purportively + purports + purpose + purposed + purposeful + purposefully + purposely + purposes + purposive + purr + purred + purring + purrs + purse + pursed + purser + purses + purslane + pursuant + pursue + pursued + pursuer + pursuers + pursues + pursuing + pursuit + pursuits + purvey + purveyor + purview + pus + Pusan + Pusey + push + pushbutton + pushdown + pushed + pusher + pushers + pushes + pushing + pushout + pushpin + puss + pussy + pussycat + put + putative + Putnam + puts + putt + putter + puttering + putters + putting + putty + puzzle + puzzled + puzzlement + puzzler + puzzlers + puzzles + puzzling + puzzlings + PVC + Pygmalion + pygmies + pygmy + pyknotic + Pyle + Pyongyang + pyracanth + pyramid + pyramidal + pyramids + pyre + Pyrex + pyridine + pyrimidine + pyrite + pyroelectric + pyrolyse + pyrolysis + pyrometer + pyrophosphate + pyrotechnic + pyroxene + pyroxenite + Pyrrhic + Pythagoras + Pythagorean + python + q + q's + Qatar + QED + qtam + qua + quack + quacked + quackery + quackish + quacks + quad + quadragenarian + quadragesimal + quadrangle + quadrangular + quadrant + quadrants + quadraphonic + quadrat + quadrate + quadrated + quadratic + quadratical + quadratically + quadratics + quadrating + quadrature + quadratures + quadrennial + quadrennially + quadrennium + quadric + quadricentennial + quadriceps + quadrifid + quadriga + quadrilateral + quadrilaterals + quadrilingual + quadrille + quadrillion + quadrinomial + quadripartite + quadriplegia + quadriplegic + quadrisect + quadrisyllable + quadrivalent + quadrivium + quadroon + quadruped + quadrupedal + quadruple + quadrupled + quadruples + quadruplet + quadruplicate + quadruplicated + quadruplicating + quadruplication + quadrupling + quadrupole + quaff + quagmire + quagmires + quahaug + quahog + quail + quails + quaint + quaintly + quaintness + quake + quaked + quaker + Quakeress + quakers + quakes + quaking + qualification + qualifications + qualified + qualifier + qualifiers + qualifies + qualify + qualifying + qualitative + qualitatively + qualities + quality + qualm + qualmish + quandaries + quandary + quanta + Quantico + quantifiable + quantification + quantifications + quantified + quantifier + quantifiers + quantifies + quantify + quantifying + quantile + quantitative + quantitatively + quantitativeness + quantities + quantity + quantization + quantize + quantized + quantizes + quantizing + quantum + quarantine + quarantined + quarantines + quarantining + quark + quarrel + quarreled + quarreler + quarreling + quarrelled + quarreller + quarrelling + quarrels + quarrelsome + quarrelsomely + quarrelsomeness + quarried + quarrier + quarries + quarry + quarrying + quarryman + quarrymen + quart + quarter + quarterback + quarterdeck + quartered + quartering + quarterlies + quarterly + quartermaster + quarters + quartet + quartets + quartette + quartic + quartile + quarto + quartos + quarts + quartz + quartzite + quasar + quash + quashed + quashes + quashing + quasi + quasiparticle + quaternary + quatrain + quatrefoil + quaver + quavered + quavering + quavers + quavery + quay + quean + queasier + queasiest + queasily + queasiness + queasy + Quebec + queen + queenly + queens + queer + queerer + queerest + queerly + queerness + quell + quelling + quench + quenched + quenches + quenching + quenchless + queried + queries + querulous + querulously + querulousness + query + querying + quest + quested + quester + questers + questing + question + questionable + questionably + questioned + questioner + questioners + questioning + questioningly + questionings + questionnaire + questionnaires + questions + quests + quetzal + queue + queued + queueing + queuer + queuers + queues + queuing + Quezon + quibble + quibbled + quibbler + quibbling + quiche + quiches + quick + quicken + quickened + quickening + quickens + quicker + quickest + quickie + quicklime + quickly + quickness + quicksand + quicksilver + quickstep + quid + quiesced + quiescence + quiescent + quiescently + quiet + quieted + quieter + quietest + quieting + quietly + quietness + quiets + quietude + quietus + quill + quillwort + quilt + quilted + quilter + quilting + quilts + quince + quinine + Quinn + quinsy + quint + quintessence + quintessential + quintet + quintette + quintic + quintillion + quintuple + quintupled + quintuplet + quintupling + quintus + quip + quipped + quipping + quipster + quire + Quirinal + quirk + quirks + quirky + quirt + quisling + quit + quitclaim + quite + quiting + Quito + quits + quittance + quitted + quitter + quitters + quitting + quiver + quivered + quivering + quivers + Quixote + quixotic + quixotical + quixotically + quixotism + quiz + quizzed + quizzes + quizzical + quizzically + quizzing + quo + quod + quoin + quoit + quondam + quonset + quorum + quota + quotable + quotas + quotation + quotations + quote + quoted + quotes + quoth + quotidian + quotient + quotients + quoting + r + R&D + r's + rabat + rabato + rabbet + rabbi + rabbies + rabbin + rabbinate + rabbinic + rabbinical + rabbinically + rabbis + rabbit + rabbitry + rabbits + rabble + rabblement + rabid + rabidly + rabies + Rabin + raccoon + raccoons + race + racecourse + raced + racehorse + racemate + raceme + racemic + racemism + racemization + racemose + racer + racers + racerunner + races + racetrack + raceway + Rachel + rachilla + rachis + rachitic + rachitis + Rachmaninoff + racial + racialism + racially + racier + raciest + racily + raciness + racing + racism + racist + rack + racked + racket + racketeer + racketeering + racketeers + rackets + rackety + racking + racknumber + racks + raconteur + racoon + racquet + racy + rad + radar + radars + radarscope + Radcliffe + radial + radially + radian + radiance + radians + radiant + radiantly + radiate + radiated + radiates + radiating + radiation + radiations + radiative + radiator + radiators + radical + radicalism + radicalize + radicalized + radicalizing + radically + radicals + radices + radidii + radii + radio + radioactive + radioactively + radioactivity + radioastronomy + radiobroadcast + radiobroadcasted + radiobroadcasting + radiocarbon + radiochemical + radiochemistry + radioed + radiogram + radiography + radioing + radioisotope + radiologist + radiology + radiolysis + radiometer + radiopaque + radiophysics + radios + radioscopic + radioscopy + radiosonde + radiotelegraph + radiotelegraphy + radiotherapy + radish + radishes + radium + radius + radiuses + radix + radon + Rae + Rafael + Rafferty + raffia + raffish + raffle + raffled + raffling + raft + rafter + rafters + rafts + rag + raga + ragamuffin + rage + raged + rages + ragged + raggedly + raggedness + raggedy + ragging + raging + raglan + ragout + rags + ragtime + ragweed + rah + raid + raided + raider + raiders + raiding + raids + rail + railbird + railed + railer + railers + railhead + railing + railleries + raillery + railroad + railroaded + railroader + railroaders + railroading + railroads + rails + railway + railways + raiment + rain + rainbow + raincoat + raincoats + raindrop + raindrops + rained + rainfall + rainforest + rainier + rainiest + raininess + raining + rainproof + rains + rainstorm + rainwater + rainy + raise + raised + raiser + raisers + raises + raisin + raising + raisins + raj + raja + rajah + rake + raked + rakehell + rakes + raking + rakish + rakishly + rakishness + Raleigh + rallied + rallies + rally + rallye + rallying + Ralph + Ralston + ram + Ramada + Raman + ramble + rambled + rambler + rambles + rambling + ramblings + rambunctious + rambunctiously + rambunctiousness + ramekin + ramequin + ramification + ramifications + ramified + ramify + ramifying + ramjet + rammed + rammer + Ramo + ramp + rampage + rampaged + rampaging + rampant + rampantly + rampart + ramps + ramrod + rams + Ramsey + ramshackle + ran + rana + ranch + ranched + rancher + ranchers + ranches + ranching + ranchman + ranchmen + rancho + rancid + rancor + rancorous + rancour + Rand + Randall + randier + randiest + randn + Randolph + random + randomization + randomize + randomized + randomizes + randomizing + randomly + randomness + randoms + randy + rang + range + ranged + rangeland + ranger + rangers + ranges + rangier + rangiest + ranging + Rangoon + rangy + Ranier + rank + ranked + ranker + rankers + rankest + Rankin + Rankine + ranking + rankings + rankle + rankled + rankling + rankly + rankness + ranks + ransack + ransacked + ransacking + ransacks + ransom + ransomer + ransoming + ransoms + rant + ranted + ranter + ranters + ranting + rantingly + rants + Raoul + rap + rapacious + rapaciously + rapacity + rape + raped + raper + rapes + Raphael + rapid + rapidity + rapidly + rapidness + rapids + rapier + rapine + raping + rapist + rapped + rapport + rapprochement + raps + rapscallion + rapt + raptly + raptorial + raptors + rapture + raptures + rapturous + rare + rarebit + rarefaction + rarefied + rarefy + rarefying + rarely + rareness + rarer + rarest + rareties + rarety + Raritan + rarities + rarity + rasa + rascal + rascality + rascally + rascals + rash + rasher + rashly + rashness + Rasmussen + rasp + raspberries + raspberry + rasped + raspier + raspiest + rasping + rasps + raspy + rassle + rassled + rassling + raster + Rastus + rat + rata + ratchet + rate + rated + rater + raters + rates + rather + rathskeller + ratification + ratified + ratifies + ratify + ratifying + rating + ratings + ratio + ratiocinate + ratiocinated + ratiocinating + ratiocination + ration + rational + rationale + rationales + rationalism + rationalist + rationalistic + rationalities + rationality + rationalization + rationalizations + rationalize + rationalized + rationalizes + rationalizing + rationally + rationals + rationing + rations + ratios + ratlin + ratline + rats + ratsbane + rattail + rattan + ratted + rattier + rattiest + ratting + rattle + rattlebrain + rattlebrained + rattled + rattler + rattlers + rattles + rattlesnake + rattlesnakes + rattletrap + rattling + rattly + rattrap + ratty + raucous + raucously + raucousness + Raul + raunchier + raunchiest + raunchily + raunchiness + raunchy + ravage + ravaged + ravager + ravagers + ravages + ravaging + rave + raved + ravel + raveled + raveling + ravelled + ravelling + raven + ravening + ravenous + ravenously + ravens + raves + ravine + ravines + raving + ravings + ravioli + ravish + ravisher + ravishing + ravishment + raw + rawboned + rawer + rawest + rawhide + Rawlinson + rawly + rawness + ray + Rayleigh + Raymond + rayon + rays + Raytheon + raze + razed + razing + razor + razorback + razors + razz + razzmatazz + RCA + Rd + re + reabbreviate + reabbreviated + reabbreviates + reabbreviating + reach + reachability + reachable + reachably + reached + reacher + reaches + reaching + reacquired + react + reactant + reacted + reacting + reaction + reactionaries + reactionary + reactions + reactivate + reactivated + reactivates + reactivating + reactivation + reactive + reactively + reactivities + reactivity + reactor + reactors + reacts + read + readability + readable + readably + reader + readers + readership + readied + readier + readies + readiest + readily + readiness + reading + readings + readjusted + readl + readout + readouts + reads + ready + readying + Reagan + reagents + real + realer + reales + realest + realign + realigned + realigning + realigns + realisable + realism + realist + realistic + realistically + realists + realities + reality + realizable + realizably + realization + realizations + realize + realized + realizes + realizing + reallocate + reallocated + really + realm + realms + realness + reals + realtor + realty + ream + reamer + reanalyze + reanalyzes + reanalyzing + reanimate + reanimated + reanimating + reanimation + reap + reaped + reaper + reaping + reappear + reappeared + reappearing + reappears + reapportion + reapportionment + reappraisal + reappraisals + reaps + rear + reared + rearing + rearmost + rearrange + rearrangeable + rearranged + rearrangement + rearrangements + rearranges + rearranging + rearrest + rearrested + rears + rearward + rearwards + reasearch + reason + reasonable + reasonableness + reasonably + reasoned + reasoner + reasoning + reasonings + reasons + reassemble + reassembled + reassembles + reassembling + reassembly + reassessment + reassessments + reassign + reassigned + reassigning + reassignment + reassignments + reassigns + reassurance + reassure + reassured + reassures + reassuring + reassuringly + reattack + reave + reawaken + reawakened + reawakening + reawakens + reb + rebate + rebated + rebates + rebating + Rebecca + rebel + rebelled + rebelling + rebellion + rebellions + rebellious + rebelliously + rebelliousness + rebels + rebind + rebinding + rebinds + rebirth + reboot + rebooted + rebooting + reboots + rebound + rebounded + rebounding + rebounds + rebroadcast + rebroadcasting + rebroadcasts + rebuff + rebuffed + rebuild + rebuilding + rebuilds + rebuilt + rebuke + rebuked + rebukes + rebuking + rebus + rebut + rebuttal + rebutted + rebutting + recalcitrance + recalcitrancy + recalcitrant + recalculate + recalculated + recalculates + recalculating + recalculation + recalculations + recalibrate + recalibrated + recalibrates + recalibrating + recall + recalled + recalling + recalls + recant + recantation + recap + recapitulate + recapitulated + recapitulates + recapitulating + recapitulation + recapped + recapping + recapture + recaptured + recaptures + recapturing + recast + recasting + recasts + recede + receded + recedes + receding + receipt + receipts + receivable + receive + received + receiver + receivers + receivership + receives + receiving + recent + recently + recentness + receptacle + receptacles + reception + receptionist + receptions + receptive + receptively + receptiveness + receptivity + receptor + recess + recessed + recesses + recession + recessional + recessive + rechannelling + recherche + Recife + recipe + recipes + recipient + recipients + reciprocal + reciprocally + reciprocate + reciprocated + reciprocates + reciprocating + reciprocation + reciprocities + reciprocity + recirculate + recirculated + recirculates + recirculating + recital + recitalist + recitals + recitation + recitations + recitative + recite + recited + reciter + recites + reciting + reck + reckless + recklessly + recklessness + reckon + reckoned + reckoner + reckoning + reckonings + reckons + reclaim + reclaimable + reclaimed + reclaimer + reclaimers + reclaiming + reclaims + reclamation + reclamations + reclassification + reclassified + reclassifies + reclassify + reclassifying + recline + reclined + reclining + recluse + reclusive + recode + recoded + recodes + recoding + recognise + recognised + recognition + recognitions + recognizability + recognizable + recognizably + recognizance + recognize + recognized + recognizer + recognizers + recognizes + recognizing + recoil + recoiled + recoiling + recoils + recollect + recollected + recollecting + recollection + recollections + recombination + recombinations + recombine + recombined + recombines + recombining + recommences + recommend + recommendation + recommendations + recommended + recommender + recommending + recommends + recommit + recommitted + recommitting + recompense + recompensed + recompensing + recompilation + recompile + recompiled + recompiles + recompiling + recompute + recomputed + recomputes + recomputing + reconcilable + reconcile + reconciled + reconciler + reconciles + reconciliation + reconciling + recondite + recondition + reconfigurable + reconfiguration + reconfigurations + reconfigure + reconfigured + reconfigurer + reconfigures + reconfiguring + reconfirm + reconnaissance + reconnect + reconnected + reconnecting + reconnection + reconnects + reconnoiter + reconnoitre + reconnoitred + reconnoitring + reconsider + reconsideration + reconsidered + reconsidering + reconsiders + reconstitute + reconstituted + reconstituting + reconstruct + reconstructed + reconstructing + reconstruction + reconstructive + reconstructs + reconvene + reconverted + reconverts + record + recorded + recorder + recorders + recording + recordings + records + recount + recounted + recounting + recounts + recourse + recover + recoverable + recovered + recoveries + recovering + recovers + recovery + recreant + recreate + recreated + recreates + recreating + recreation + recreational + recreationally + recreations + recreative + recriminate + recriminated + recriminating + recrimination + recriminatory + recrudescence + recrudescent + recruit + recruited + recruiter + recruiting + recruitment + recruitors + recruits + recta + rectal + rectally + rectangle + rectangles + rectangular + rectification + rectified + rectifier + rectify + rectifying + rectilinear + rectitude + rector + rectories + rectors + rectory + rectum + rectums + recumbent + recuperate + recuperated + recuperating + recuperation + recuperative + recur + recurred + recurrence + recurrences + recurrent + recurrently + recurring + recurs + recurse + recursed + recurses + recursing + recursion + recursions + recursive + recursively + recurvaria + recusant + recuse + recyclable + recycle + recycled + recycles + recycling + red + redact + redactor + redbird + redbreast + redbud + redcap + redcoat + redd + redded + redden + reddened + redder + reddest + redding + reddish + reddishness + redeclare + redeclared + redeclares + redeclaring + redeem + redeemable + redeemed + redeemer + redeemers + redeeming + redeems + redefine + redefined + redefines + redefining + redefinition + redefinitions + redemption + redemptive + redemptory + redeploy + redeployment + redesign + redesignate + redesigned + redesigning + redesigns + redevelop + redevelopment + redfield + redhead + redheaded + redheart + redimension + redimensioned + redimensioning + redimensions + redirect + redirected + redirecting + redirection + redirections + rediscovered + redisplay + redisplayed + redisplaying + redisplays + redistribute + redistributed + redistributes + redistributing + redistribution + redistrict + redly + Redmond + redneck + redness + redo + redodid + redodoing + redodone + redoing + redolence + redolent + redone + redouble + redoubled + redoubling + redoubt + redoubtable + redoubtably + redound + redpoll + redraw + redrawn + redress + redressed + redresses + redressing + reds + redshank + redstart + Redstone + redtop + reduce + reduced + reducer + reducers + reduces + reducibility + reducible + reducibly + reducing + reduction + reductions + redundance + redundancies + redundancy + redundant + redundantly + reduplicate + reduplicated + reduplicating + reduplication + redwood + reecho + reed + reedbuck + reedier + reediest + reediness + reeds + reeducate + reeducation + reedy + reef + reefer + reefs + reek + reel + reelect + reelected + reelecting + reelects + reeled + reeler + reeling + reels + reemerge + reemphasize + reemphasized + reemphasizes + reemphasizing + reenable + reenabled + reenforcement + reenter + reenterable + reentered + reentering + reenters + reentrancy + reentrant + reentry + Reese + reestablish + reestablished + reestablishes + reestablishing + reevaluate + reevaluated + reevaluates + reevaluating + reevaluation + reeve + reeved + Reeves + reeving + reexamine + reexamined + reexamines + reexamining + reexecuted + ref + reface + refaced + refacing + refection + refectories + refectory + refer + referable + refered + referee + refereed + refereeing + referees + reference + referenced + referencer + references + referencing + referenda + referendum + referendums + referent + referential + referentiality + referentially + referents + referral + referrals + referred + referring + refers + refill + refillable + refilled + refilling + refills + refine + refined + refinement + refinements + refiner + refineries + refinery + refines + refining + refinish + refinisher + refit + refitted + refitting + reflect + reflectance + reflected + reflecting + reflection + reflections + reflective + reflectively + reflectivity + reflector + reflectors + reflects + reflex + reflexes + reflexive + reflexively + reflexiveness + reflexivity + reflux + refluxing + reforest + reforestation + reform + reformable + reformat + reformation + reformatories + reformatory + reformats + reformatted + reformatting + reformed + reformer + reformers + reforming + reforms + reformulate + reformulated + reformulates + reformulating + reformulation + refract + refracted + refraction + refractometer + refractor + refractorily + refractoriness + refractory + refragment + refrain + refrained + refraining + refrains + refresh + refreshed + refresher + refreshers + refreshes + refreshing + refreshingly + refreshment + refreshments + refrigerant + refrigerate + refrigerated + refrigerating + refrigeration + refrigerator + refrigerators + refry + refs + refuel + refueled + refueling + refuels + refuge + refugee + refugees + refugia + refulgence + refulgent + refund + refundable + refunding + refunds + refurbish + refusal + refuse + refused + refuses + refusing + refutable + refutation + refute + refuted + refuter + refutes + refuting + regain + regained + regaining + regains + regal + regale + regaled + regalement + regalia + regaling + regally + regard + regarded + regardful + regarding + regardless + regardlessly + regards + regatta + regencies + regency + regenerate + regenerated + regenerates + regenerating + regeneration + regenerative + regenerator + regenerators + regent + regents + regentship + reggae + regicidal + regicide + regime + regimen + regiment + regimental + regimentation + regimented + regiments + regimes + Regina + Reginald + region + regional + regionalism + regionally + regions + Regis + register + registered + registering + registers + registrable + registrant + registrar + registration + registrations + registries + registry + regnant + regress + regressed + regresses + regressing + regression + regressions + regressive + regret + regretful + regretfully + regrets + regrettable + regrettably + regretted + regretting + regroup + regrouped + regrouping + regular + regularities + regularity + regularize + regularized + regularizing + regularly + regulars + regulate + regulated + regulates + regulating + regulation + regulations + regulative + regulator + regulators + regulatory + Regulus + regurgitate + regurgitated + regurgitating + regurgitation + rehabilitate + rehabilitated + rehabilitating + rehabilitation + rehash + rehashed + rehashing + rehear + rehearheard + rehearhearing + rehearsal + rehearsals + rehearse + rehearsed + rehearser + rehearses + rehearsing + reheat + Reich + Reid + reign + reigned + reigning + reigns + Reilly + reimbursable + reimburse + reimbursed + reimbursement + reimbursements + reimbursing + reimplemented + rein + reincarnate + reincarnated + reincarnating + reincarnation + reindeer + reindeers + reined + reinforce + reinforced + reinforcement + reinforcements + reinforcer + reinforces + reinforcing + Reinhold + reinitialize + reinitialized + reinitializes + reinitializing + reins + reinsert + reinserted + reinserting + reinserts + reinstate + reinstated + reinstatement + reinstates + reinstating + reinterpret + reinterpreted + reinterpreting + reinterprets + reintroduce + reintroduced + reintroduces + reintroducing + reintroduction + reinvasion + reinvent + reinvented + reinventing + reinvents + reiterate + reiterated + reiterates + reiterating + reiteration + reiterative + reject + rejected + rejecting + rejection + rejections + rejector + rejectors + rejects + rejoice + rejoiced + rejoicer + rejoices + rejoicing + rejoin + rejoinder + rejoined + rejoining + rejoins + rejuvenate + rejuvenated + rejuvenating + rejuvenation + rel + relabel + relabeled + relabeling + relabelled + relabelling + relabels + relapse + relapsed + relapses + relapsing + relatable + relate + related + relatedness + relater + relates + relating + relation + relational + relationally + relationals + relations + relationship + relationships + relative + relatively + relativeness + relatives + relativism + relativistic + relativistically + relativity + relator + relators + relax + relaxant + relaxation + relaxations + relaxed + relaxer + relaxes + relaxing + relay + relayed + relaying + relays + releasable + release + released + releases + releasing + relegate + relegated + relegates + relegating + relegation + relent + relented + relenting + relentless + relentlessly + relentlessness + relents + relevance + relevances + relevancy + relevant + relevantly + relevent + reliabilities + reliability + reliable + reliableness + reliably + reliance + reliant + reliantly + relic + relics + relict + relied + relief + relies + relievable + relieve + relieved + reliever + relievers + relieves + relieving + religion + religions + religiosity + religious + religiously + religiousness + relink + relinquish + relinquished + relinquishes + relinquishing + relinquishment + reliquary + relish + relished + relishes + relishing + relive + relived + relives + reliving + reload + reloaded + reloader + reloading + reloads + relocatability + relocatable + relocate + relocated + relocates + relocating + relocation + relocations + reluctance + reluctancy + reluctant + reluctantly + rely + relying + rem + remain + remainder + remainders + remained + remaining + remains + reman + remand + remark + remarkable + remarkableness + remarkably + remarked + remarking + remarks + remarried + rematch + Rembrandt + remediable + remedial + remedied + remedies + remedy + remedying + remember + remembered + remembering + remembers + remembrance + remembrances + remind + reminded + reminder + reminders + reminding + reminds + Remington + reminisce + reminisced + reminiscence + reminiscences + reminiscent + reminiscently + reminiscing + remiss + remission + remissive + remissness + remit + remittance + remitted + remittent + remitting + remnant + remnants + remodel + remodeled + remodeling + remodelled + remodelling + remodels + remonstrance + remonstrant + remonstrate + remonstrated + remonstrates + remonstrating + remonstration + remonstrative + remonstrator + remorse + remorseful + remorseless + remote + remotely + remoteness + remoter + remotest + remount + remounted + remounting + removable + removal + removals + remove + removed + remover + removes + removing + remunerable + remunerate + remunerated + remunerating + remuneration + remunerative + Remus + Rena + renaissance + renal + rename + renamed + renames + renaming + renascence + renascent + Renault + rend + render + rendered + rendering + renderings + renders + rendezvous + rendezvoused + rendezvousing + rending + rendition + renditions + rends + Rene + renegade + renege + reneged + reneger + reneging + renegotiable + renew + renewable + renewal + renewals + renewed + renewer + renewing + renews + rennet + Renoir + renormalize + renormalized + renormalizing + renounce + renounced + renouncement + renounces + renouncing + renovate + renovated + renovating + renovation + renovative + renovator + renown + renowned + Rensselaer + rent + rentable + rental + rentals + rented + renter + renting + rents + renumber + renumbered + renumbering + renumbers + renunciate + renunciation + renwick + reoccur + reoccurs + reopen + reopened + reopening + reopens + reorder + reordered + reordering + reorders + reorganization + reorganizations + reorganize + reorganized + reorganizer + reorganizes + reorganizing + rep + repackage + repaid + repair + repairable + repaired + repairer + repairing + repairman + repairmen + repairs + reparable + reparation + reparations + repartee + repast + repasts + repatriate + repatriated + repatriating + repatriation + repay + repayable + repayed + repaying + repayment + repayments + repays + repeal + repealed + repealer + repealing + repeals + repeat + repeatable + repeated + repeatedly + repeater + repeaters + repeating + repeats + repel + repelled + repellent + repeller + repelling + repels + repent + repentance + repentant + repented + repenting + repents + repercussion + repercussions + repercussive + repertoire + repertories + repertory + repetatively + repetition + repetitions + repetitious + repetitiously + repetitive + repetitively + repetitiveness + repetoire + rephrase + rephrased + rephrases + rephrasing + repine + repined + repining + replace + replaceable + replaced + replacement + replacements + replacer + replaces + replacing + replay + replayed + replaying + replays + replenish + replenished + replenishes + replenishing + replenishment + replete + repleteness + repletion + replica + replicas + replicate + replicated + replicates + replicating + replication + replications + replied + replies + replot + replotted + reply + replying + report + reportable + reportage + reported + reportedly + reporter + reporters + reporting + reportorial + reports + repose + reposed + reposeful + reposes + reposing + reposition + repositioned + repositioning + repositions + repositories + repository + repossess + repossession + reprehend + reprehensible + reprehensibly + reprehension + represent + representable + representably + representation + representational + representationally + representations + representative + representatively + representativeness + representatives + represented + representing + represents + repress + repressed + represses + repressible + repressing + repression + repressions + repressive + reprieve + reprieved + reprieves + reprieving + reprimand + reprint + reprinted + reprinting + reprints + reprisal + reprisals + reprise + reproach + reproachable + reproached + reproaches + reproachful + reproachfully + reproachfulness + reproaching + reprobate + reprobated + reprobating + reprobation + reprocess + reprocessed + reproduce + reproduced + reproducer + reproducers + reproduces + reproducibilities + reproducibility + reproducible + reproducibly + reproducing + reproduction + reproductions + reproductive + reproductively + reprogram + reprogrammed + reprogramming + reprograms + reproof + reproval + reprove + reproved + reprover + reproving + reprovingly + reptile + reptiles + reptilian + republic + republican + republicans + republics + repudiate + repudiated + repudiates + repudiating + repudiation + repudiations + repudiator + repugnance + repugnant + repugnantly + repulse + repulsed + repulses + repulsing + repulsion + repulsions + repulsive + repulsively + repulsiveness + repunch + reputability + reputable + reputably + reputation + reputations + repute + reputed + reputedly + reputes + reputing + request + requested + requester + requesters + requesting + requests + requeued + require + required + requirement + requirements + requires + requiring + requisite + requisites + requisition + requisitioned + requisitioning + requisitions + requital + requite + requited + requiting + reran + reread + rereading + reredos + reregister + reroute + rerouted + reroutes + rerouting + rerun + rerunning + reruns + res + resale + rescattering + reschedule + rescind + rescindable + rescission + rescue + rescued + rescuer + rescuers + rescues + rescuing + research + researched + researcher + researchers + researches + researching + reseat + resection + reseeding + reselect + reselected + reselecting + reselects + resell + reselling + resemblance + resemblances + resemblant + resemble + resembled + resembles + resembling + resend + resending + resends + resent + resented + resentful + resentfully + resentfulness + resenting + resentment + resents + resequencing + reserpine + reservation + reservations + reserve + reserved + reservedly + reserver + reserves + reserving + reservist + reservoir + reservoirs + reset + resets + resetting + resettings + reshuffle + reside + resided + residence + residences + residencies + residency + resident + residential + residentially + residents + resides + residing + residual + residuals + residuary + residue + residues + residuua + residuum + resign + resignation + resignations + resigned + resignedly + resigning + resigns + resilience + resiliency + resilient + resin + resinosis + resinous + resins + resiny + resist + resistable + resistably + resistance + resistances + resistant + resistantly + resisted + resister + resistible + resisting + resistive + resistivity + resistless + resistor + resistors + resists + resole + resoled + resoling + resolute + resolutely + resoluteness + resolution + resolutions + resolvable + resolve + resolved + resolver + resolvers + resolves + resolving + resonance + resonances + resonant + resonantly + resonate + resonator + resorb + resorcinol + resort + resorted + resorting + resorts + resound + resounding + resoundingly + resounds + resource + resourceful + resourcefully + resourcefulness + resources + respecification + respecifications + respecified + respecify + respect + respectability + respectable + respectably + respected + respecter + respectful + respectfully + respectfulness + respecting + respective + respectively + respects + respell + respiration + respirator + respiratory + respire + respired + respiring + respirometer + respirometry + respite + resplendence + resplendent + resplendently + respond + responded + respondence + respondent + respondents + responder + responders + responding + responds + response + responses + responsibilities + responsibility + responsible + responsibleness + responsibly + responsive + responsively + responsiveness + rest + restart + restartable + restarted + restarting + restarts + restate + restated + restatement + restates + restating + restaurant + restaurants + restaurateur + rested + restful + restfully + restfulness + resting + restitution + restive + restively + restless + restlessly + restlessness + restorable + restoration + restorations + restorative + restore + restored + restorer + restorers + restores + restoring + restrain + restrainable + restrained + restrainedly + restrainer + restrainers + restraining + restrains + restraint + restraints + restrict + restricted + restricting + restriction + restrictions + restrictive + restrictively + restricts + restroom + restructure + restructured + restructures + restructuring + rests + restyled + resubmitted + result + resultant + resultantly + resultants + resulted + resulting + results + resumable + resume + resumed + resumes + resuming + resumption + resumptions + resurface + resurfaced + resurfacing + resurgence + resurgent + resurrect + resurrected + resurrecting + resurrection + resurrections + resurrector + resurrectors + resurrects + resuscitate + resuscitated + resuscitating + resuscitation + resuscitator + resuspension + resynchronization + resynchronize + resynchronized + resynchronizing + ret + retail + retailer + retailers + retailing + retain + retainable + retained + retainer + retainers + retaining + retainment + retains + retake + retaken + retaking + retal + retaliate + retaliated + retaliating + retaliation + retaliative + retaliatory + retard + retardant + retardation + retarded + retarder + retarding + retch + retention + retentions + retentive + retentively + retentiveness + retested + reticence + reticent + reticle + reticles + reticular + reticulate + reticulated + reticulately + reticulates + reticulating + reticulation + reticulum + retina + retinae + retinal + retinas + retinue + retire + retired + retiree + retirement + retirements + retires + retiring + retook + retool + retooling + retort + retorted + retorts + retouch + retoucher + retrace + retraced + retraces + retracing + retract + retractable + retracted + retractile + retracting + retraction + retractions + retracts + retrain + retrained + retraining + retrains + retranslate + retranslated + retranslation + retransmission + retransmissions + retransmit + retransmits + retransmitted + retransmitting + retread + retreat + retreated + retreating + retreats + retrench + retrenchment + retribution + retributive + retributively + retributory + retried + retrier + retriers + retries + retrievable + retrieval + retrievals + retrieve + retrieved + retriever + retrievers + retrieves + retrieving + retro + retroactive + retroactively + retrofire + retrofired + retrofiring + retrofit + retrofitted + retrofitting + retrograde + retrograded + retrograding + retrogress + retrogression + retrogressive + retrogressively + retrorocket + retros + retrospect + retrospection + retrospective + retrospectively + retrovision + retry + retrying + return + returnable + returned + returner + returning + returns + retype + retyped + retypes + retyping + Reub + Reuben + reunion + reunions + reunite + reunited + reuniting + reusable + reuse + reused + reuses + reusing + Reuters + rev + revamp + revamped + revamping + revamps + reveal + revealed + revealing + revealment + reveals + reveille + revel + revelation + revelations + revelatory + reveled + reveler + reveling + revelled + reveller + revelling + revelries + revelry + revels + revenge + revenged + revengeful + revengefully + revengefulness + revenger + revenging + revenue + revenuers + revenues + rever + reverberate + reverberated + reverberating + reverberation + reverberatory + revere + revered + reverence + reverenced + reverencing + reverend + reverends + reverent + reverential + reverently + reveres + reverie + reveries + reverified + reverifies + reverify + reverifying + revering + revers + reversal + reversals + reverse + reversed + reversely + reverser + reverses + reversibility + reversible + reversing + reversion + revert + reverted + revertible + reverting + reverts + revery + revet + review + reviewed + reviewer + reviewers + reviewing + reviews + revile + reviled + revilement + reviler + reviling + revisable + revisal + revise + revised + reviser + revises + revising + revision + revisionary + revisions + revisit + revisited + revisiting + revisits + revisor + revival + revivalism + revivalist + revivals + revive + revived + reviver + revives + revivification + revivified + revivify + revivifying + reviving + revocable + revocation + revokable + revoke + revoked + revoker + revokes + revoking + revolt + revolted + revolter + revolting + revoltingly + revolts + revolution + revolutionaries + revolutionary + revolutionist + revolutionize + revolutionized + revolutionizer + revolutionizing + revolutions + revolve + revolved + revolver + revolvers + revolves + revolving + revue + revulsion + revved + revving + reward + rewarded + rewarding + rewardingly + rewards + rewind + rewinding + rewinds + rewire + rewired + rewiring + reword + rework + reworked + reworking + reworks + rewound + rewrite + rewriter + rewrites + rewriting + rewritten + rewrote + Rex + Reykjavik + Reynolds + rfree + rfs + rhapsodic + rhapsodical + rhapsodically + rhapsodies + rhapsodist + rhapsodize + rhapsodized + rhapsodizing + rhapsody + Rhea + Rhenish + rhenium + rheology + rheostat + rhesus + rhetoric + rhetorical + rhetorically + rhetorician + rheum + rheumatic + rheumatism + rheumatoid + rheumier + rheumiest + rheumy + Rhine + rhinestone + rhinitis + rhino + rhinoceros + rhinos + rhizome + rho + Rhoda + Rhode + rhode + Rhodes + Rhodesia + rhodium + rhododendron + rhodolite + rhodonite + rhomb + rhombi + rhombic + rhomboid + rhomboidal + rhombus + rhombuses + rhubarb + rhumb + rhyme + rhymed + rhymes + rhymester + rhyming + rhythm + rhythmic + rhythmical + rhythmically + rhythms + RI + rib + ribald + ribaldry + ribbed + ribber + ribbing + ribbon + ribbonlike + ribbons + ribless + riboflavin + ribonucleic + ribose + ribosome + ribs + Rica + rica + rice + riced + ricer + rich + Richard + Richardson + richen + richer + riches + richest + Richfield + richly + Richmond + richness + Richter + ricing + rick + ricketiness + rickets + Rickettsia + rickettsiae + rickettsial + rickety + rickrack + ricksha + rickshaw + rickshaws + Rico + rico + ricochet + ricocheted + ricocheting + rid + riddance + ridded + ridden + ridding + riddle + riddled + riddler + riddles + riddling + ride + rider + riderless + riders + ridership + rides + ridge + ridged + ridgepiece + ridgepole + ridges + ridging + Ridgway + ridicule + ridiculed + ridicules + ridiculing + ridiculous + ridiculously + ridiculousness + riding + rids + Riemann + Riemannian + rife + riff + riffle + riffled + riffling + riffraff + rifle + rifled + rifleman + riflemen + rifler + rifles + rifling + rift + rig + Riga + rigamarole + Rigel + rigged + rigger + rigging + Riggs + right + righted + righteous + righteously + righteousness + righter + rightful + rightfully + rightfulness + righting + rightist + rightly + rightmost + rightness + rights + rightward + rigid + rigidity + rigidly + rigidness + rigmarole + rigor + rigorous + rigorously + rigors + rigour + rigs + rile + riled + Riley + riling + rill + rilly + rim + rime + rimed + riming + rimmed + rims + rimy + rind + rinds + Rinehart + ring + ringbolt + ringed + ringer + ringers + ringing + ringingly + ringings + ringleader + ringlet + ringleted + ringmaster + rings + ringside + ringworm + rink + rinse + rinsed + rinser + rinses + rinsing + Rio + Riordan + riot + rioted + rioter + rioters + rioting + riotous + riotously + riots + rip + riparian + ripe + ripely + ripen + ripener + ripeness + Ripley + ripoff + ripost + riposte + riposted + riposting + ripped + ripper + ripping + ripple + rippled + ripples + ripplier + rippliest + rippling + ripply + rips + ripsaw + riptide + rise + risen + riser + risers + rises + risibilities + risibility + risible + rising + risings + risk + risked + riskier + riskiest + riskily + riskiness + risking + risks + risky + risque + Ritchie + rite + rites + Ritter + ritual + ritualism + ritualistic + ritualistically + ritually + rituals + Ritz + ritzier + ritziest + ritzy + rival + rivaled + rivaling + rivalled + rivalling + rivalries + rivalry + rivals + rive + rived + riven + river + riverbank + riverfront + riverine + rivers + riverside + rivet + riveter + rivets + Riviera + riving + rivulet + rivulets + Riyadh + rld + RNA + roach + roaches + road + roadbed + roadblock + roadhouse + roads + roadshow + roadside + roadster + roadsters + roadway + roadways + roam + roamed + roamer + roaming + roams + roan + roar + roared + roarer + roaring + roars + roast + roasted + roaster + roasting + roasts + rob + robbed + robber + robberies + robbers + robbery + robbin + robbing + robe + robed + Robert + Roberta + Roberto + Robertson + robes + robin + robing + robins + Robinson + robot + robotic + robotics + robots + robs + robust + robustly + robustness + roc + roche + Rochester + rock + rockabye + rockaway + rockbound + rocked + Rockefeller + rocker + rockers + rocket + rocketed + rocketing + rocketry + rockets + Rockford + rockier + Rockies + rockies + rockiest + rockiness + rocking + Rockland + rocks + Rockwell + rocky + rococo + rod + rode + rodent + rodentia + rodents + rodeo + rodeos + Rodgers + Rodney + Rodriguez + rods + roe + roebuck + Roentgen + roes + Roger + rogue + rogueries + roguery + rogues + roguish + roguishly + roil + roister + roisterer + Roland + role + roles + roll + rollback + rolled + roller + rollers + rollick + rollicking + rolling + Rollins + rolls + romaine + Roman + roman + romance + romanced + romancer + romancers + romances + romancing + Romania + Romano + romantic + romantically + romanticism + romanticize + romanticized + romanticizing + romantics + Rome + rome + Romeo + romp + romped + romper + romping + romps + Romulus + Ron + Ronald + rondo + Ronnie + rood + roof + roofed + roofer + roofing + roofs + rooftop + rooftree + rook + rookeries + rookery + rookie + rooky + room + roomed + roomer + roomers + roomette + roomful + roomfuls + roomie + roomier + roomiest + roominess + rooming + roommate + rooms + roomy + Roosevelt + Rooseveltian + roost + rooster + roosters + root + rooted + rooter + rooting + rootless + rootlet + roots + rootstock + rope + roped + roper + ropers + ropes + roping + Rosa + Rosalie + rosaries + rosary + rose + roseate + rosebud + rosebuds + rosebush + rosed + Roseland + rosemary + Rosen + Rosenberg + Rosenblum + Rosenthal + Rosenzweig + roses + Rosetta + rosette + rosewood + rosier + rosiest + rosily + rosin + rosiness + rosing + Ross + roster + rostra + rostral + rostrum + rostrums + rosy + rot + Rotarian + rotary + rotate + rotated + rotates + rotating + rotation + rotational + rotations + rotator + rotatory + ROTC + rote + rotenone + Roth + Rothschild + rotifer + rotifers + rotisserie + rotogravure + rotor + rototill + rots + rotted + rotten + rottenly + rottenness + rotter + rotterdam + rotting + rotund + rotunda + rotundity + rotundness + rouble + rouge + rouged + rough + roughage + roughcast + roughed + roughen + rougher + roughest + roughhew + roughhouse + roughhoused + roughhousing + roughing + roughish + roughly + roughneck + roughness + roughshod + rouging + roulette + round + roundabout + rounded + roundedness + roundelay + rounder + roundest + roundhead + roundhouse + rounding + roundish + roundly + roundness + roundoff + rounds + roundtable + roundup + roundworm + rouse + roused + rouses + rousing + Rousseau + roustabout + rout + route + routed + router + routers + routes + routine + routinely + routines + routing + routings + rove + roved + roven + rover + roves + roving + row + rowboat + rowdier + rowdies + rowdiest + rowdily + rowdiness + rowdy + rowdyism + Rowe + rowed + rowel + Rowena + rower + rowing + rowings + Rowland + Rowley + rows + Roxbury + Roy + royal + royalist + royalists + royally + royalties + royalty + Royce + RPM + RSVP + Ruanda + rub + rubbed + rubber + rubberize + rubberized + rubberizing + rubbers + rubbery + rubbing + rubbish + rubble + rubdown + Rube + rubella + Ruben + rubens + rubeola + rubicund + rubidium + rubies + Rubin + ruble + rubles + rubout + rubric + rubs + ruby + ruche + ruching + rucksack + ruckus + rudder + rudderless + rudders + ruddier + ruddiest + ruddiness + ruddy + rude + rudely + rudeness + ruder + rudest + rudiment + rudimentary + rudiments + rudinsky + Rudolf + Rudolph + Rudy + Rudyard + rue + rued + rueful + ruefully + ruff + ruffed + ruffian + ruffianly + ruffians + ruffle + ruffled + ruffles + ruffling + rufous + Rufus + rug + rugby + rugged + ruggedly + ruggedness + rugs + ruin + ruination + ruinations + ruined + ruing + ruining + ruinous + ruinously + ruins + rule + ruled + ruler + rulers + rules + ruling + rulings + rum + Rumania + rumania + rumanian + rumb + rumba + rumble + rumbled + rumbler + rumbles + rumbling + rumblings + rumen + Rumford + ruminant + ruminate + ruminated + ruminating + rumination + ruminations + ruminative + rummage + rummaged + rummaging + rummy + rumor + rumored + rumors + rumour + rumours + rump + rumple + rumpled + rumpling + rumply + rumpus + rumrunner + rums + run + runabout + runaround + runaway + rundown + rune + rung + Runge + rungs + runic + runlet + runnable + runnel + runner + runners + runneth + runnier + runniest + running + runny + Runnymede + runoff + runs + runt + runtier + runtiest + runtime + runty + runway + runways + Runyon + rupee + rupture + ruptured + ruptures + rupturing + rural + ruralism + rurally + ruse + rush + rushed + rusher + rushes + rushier + rushiest + rushing + Rushmore + rushy + rusk + Russ + Russell + russet + Russia + russia + russian + russians + Russo + russula + rust + rusted + rustic + rustically + rusticate + rusticated + rusticates + rusticating + rustication + rusticity + rustier + rustiest + rustily + rustiness + rusting + rustle + rustled + rustler + rustlers + rustless + rustling + rustproof + rusts + rusty + rut + rutabaga + Rutgers + rutgers + Ruth + ruthenium + Rutherford + ruthless + ruthlessly + ruthlessness + rutile + Rutland + Rutledge + ruts + rutted + ruttier + ruttiest + rutty + Rwanda + Ryan + Rydberg + Ryder + rye + s + s's + sa + sabadilla + sabbat + sabbath + sabbatical + saber + sabers + sabin + Sabina + Sabine + sable + sablefish + sables + sabot + sabotage + sabotaged + sabotages + sabotaging + saboteur + sabra + sabre + sabretache + sabulous + sac + sacaton + saccade + saccarify + saccarimeter + saccate + saccharase + saccharate + saccharic + saccharide + saccharin + saccharine + saccharoidal + saccharometer + saccharose + saccular + sacculate + saccule + sacculus + sacerdotal + sacerdotalism + sachem + sachet + Sachs + sack + sackbut + sackcloth + sacker + sackful + sacking + sacks + sacque + sacra + sacral + sacralize + sacrament + sacramental + sacramentalism + sacramentarian + Sacramento + sacrarium + sacred + sacredly + sacredness + sacrifice + sacrificed + sacrificer + sacrificers + sacrifices + sacrificial + sacrificially + sacrificing + sacrilege + sacrilegious + sacrilegiously + sacring + sacristan + sacristies + sacristy + sacroiliac + sacrosanct + sacrosciatic + sacrum + sacrums + sacs + sad + sadden + saddened + saddens + sadder + saddest + saddle + saddleback + saddlebacked + saddlebag + saddlebow + saddlecloth + saddled + saddler + saddlery + saddles + saddletree + saddling + sadhu + Sadie + sadiron + sadism + sadist + sadistic + sadistically + sadists + sadleir + Sadler + sadly + sadness + sadomasochism + safari + safaris + safe + safeblowing + safecracking + safeguard + safeguarded + safeguarding + safeguards + safekeeping + safelight + safely + safeness + safer + safes + safest + safeties + safety + safflower + saffron + safranine + safranyik + safrole + sag + saga + sagacious + sagaciously + sagacity + sage + sagebrush + sagely + sageness + sager + sages + sagest + saggar + sagged + sagger + saggier + saggiest + sagginess + sagging + saggy + Saginaw + sagital + sagittal + Sagittarius + sagittary + sagittate + sago + sags + saguaro + saguaros + Sahara + sahib + said + saiga + Saigon + sail + sailboat + sailcloth + sailed + sailer + sailfish + sailing + sailor + sailoring + sailorly + sailors + sailplane + sails + sainfoin + saint + sainted + sainthood + saintlier + saintliest + saintliness + saintly + saints + saith + sake + saker + sakes + saki + Sal + Salaam + salability + salable + salacious + salaciously + salad + salads + salamander + salami + salaried + salaries + salary + sale + saleable + Salem + salep + saleratus + Salerno + sales + salesclerk + salesgirl + Salesian + salesladies + saleslady + salesman + salesmanship + salesmen + salespeople + salesperson + salesroom + saleswoman + saleswomen + salicin + salicylate + salience + salient + salientian + saliently + saliferous + salify + salimeter + Salina + saline + salinity + salinometer + Salisbury + Salish + saliva + salivary + salivate + salivated + salivating + salivation + Salk + Salle + sallenders + sallet + sallied + sallies + sallow + sallowness + sally + sallying + salmagundi + salmi + salmon + salmonberry + salmonella + salmonellae + salmonellas + salmonellosis + salmonoid + salmons + salol + salon + salons + saloon + saloonkeep + saloons + salpa + salpiglosis + salpingectomy + salpingitis + salpinx + salsify + salt + saltant + saltarello + saltation + saltatorial + saltatory + saltbox + saltbush + saltcellar + salted + salter + saltern + salters + saltier + saltiest + saltigrade + saltily + saltine + saltiness + salting + saltire + saltish + saltpeter + salts + saltwater + saltworks + saltwort + salty + salubrious + salubriously + salutary + salutation + salutations + salutatory + salute + saluted + salutes + saluting + salvable + Salvador + salvage + salvageable + salvaged + salvager + salvages + salvaging + salvation + Salvatore + salve + salved + salver + salverform + salves + salvia + salvific + salving + salvo + salvoes + salvor + salvos + Sam + samara + samarium + samarskite + samba + sambar + sambuke + same + sameness + samisen + samite + samlet + Sammy + Samoa + samovar + sampan + sample + sampled + sampler + samplers + samples + sampling + samplings + Sampson + Samson + Samuel + Samuelson + samurai + San + Sana + sanatoria + sanatoriria + sanatoririums + sanatorium + Sanborn + Sanchez + Sancho + sancta + sanctification + sanctified + sanctify + sanctifying + sanctimonious + sanctimoniously + sanctimoniousness + sanctimony + sanction + sanctioned + sanctioning + sanctions + sanctities + sanctity + sanctuaries + sanctuary + sanctum + sanctums + sand + sandal + sandaled + sandalled + sandals + sandalwood + sandbag + sandbagged + sandbagging + sandblast + sandbox + Sandburg + sanded + sander + sanderling + sanders + Sanderson + sandhill + sandhog + Sandia + sandier + sandiest + sanding + sandlot + sandlotter + sandman + sandpaper + sandpile + sandpiper + Sandra + sands + sandstone + sandstorm + Sandusky + sandwich + sandwiched + sandwiches + sandy + sane + sanely + saner + sanest + Sanford + sang + sangaree + sanguinary + sanguine + sanguinely + sanguineous + Sanhedrin + sanicle + sanitariia + sanitariiums + sanitarium + sanitary + sanitate + sanitation + sanitize + sanitized + sanitizing + sanity + sank + sans + Santa + Santayana + Santiago + Santo + Sao + sap + sapience + sapiens + sapient + sapling + saplings + sapodilla + saponification + saponified + saponify + saponifying + sapped + sapphire + sappier + sappiest + sappiness + sappy + saps + sapsucker + sapwood + saquaro + Sara + Saracen + Sarah + Saran + Sarasota + Saratoga + sarcasm + sarcasms + sarcastic + sarcastically + sarcoma + sarcomas + sarcomata + sarcophagi + sarcophagus + sarcophaguses + sardine + sardonic + sardonically + Sargent + sari + sarong + sarsaparilla + sarsparilla + sartorial + sartorially + sash + sashay + Saskatchewan + Saskatoon + sass + sassafras + sassier + sassiest + sassiness + sassy + sat + satan + satanic + satanical + satanically + satchel + satchels + sate + sated + sateen + satellite + satellites + sates + satiability + satiable + satiate + satiated + satiating + satiation + satiety + satin + sating + satinwood + satiny + satire + satires + satiric + satirical + satirically + satirist + satirize + satirized + satirizing + satisfaction + satisfactions + satisfactorily + satisfactory + satisfiability + satisfiable + satisfied + satisfies + satisfy + satisfying + satrap + satterthwaite + saturable + saturate + saturated + saturater + saturates + saturating + saturation + Saturday + saturday + saturdays + Saturn + Saturnalia + saturnine + satyr + sauce + sauced + saucepan + saucepans + saucer + saucers + sauces + saucier + sauciest + saucily + sauciness + saucing + saucy + Saud + Saudi + sauerbraten + sauerkraut + Saul + Sault + sauna + Saunders + saunter + saunterer + saurian + sausage + sausages + saute + sauteed + sauteing + sauterne + savable + savage + savaged + savagely + savageness + savager + savageries + savagers + savagery + savages + savaging + savanna + Savannah + savant + save + saveable + saved + saver + savers + saves + saving + savings + savior + saviors + Saviour + saviours + Savonarola + savor + savored + savorier + savoriest + savoring + savors + savory + savour + savoury + savoy + Savoyard + savvied + savvy + savvying + saw + sawbelly + sawbuck + sawdust + sawed + sawer + sawfish + sawfly + sawhorse + sawing + sawmill + sawmills + sawn + saws + sawtimber + sawtooth + sawyer + sawyers + sax + saxhorn + saxifrage + Saxon + Saxony + saxophone + saxophonist + say + sayer + sayers + saying + sayings + says + SC + scab + scabbard + scabbards + scabbed + scabbier + scabbiest + scabbing + scabby + scabies + scabious + scabrous + scabrously + scad + scaffold + scaffolding + scaffoldings + scaffolds + Scala + scalable + scalar + scalars + scalawag + scald + scalded + scalding + scale + scaled + scaleless + scalene + scalers + scales + scalf + scalier + scaliest + scaling + scalings + scallawag + scallion + scallop + scalloped + scallops + scalp + scalpel + scalper + scalps + scalx + scaly + scalz + scam + scamp + scamper + scampering + scampers + scampi + scampies + scampish + scan + scandal + scandalize + scandalized + scandalizing + scandalmonger + scandalous + scandalously + scandals + Scandinavia + scandinavian + scandium + scanned + scanner + scanners + scanning + scans + scansion + scanstor + scant + scantier + scantiest + scantily + scantiness + scantly + scantness + scanty + scapegoat + scapegrace + scapula + scapulae + scapular + scapulas + scar + scarab + Scarborough + scarce + scarcely + scarceness + scarcer + scarcities + scarcity + scards + scare + scarecrow + scared + scares + scarf + scarface + scarfs + scarier + scariest + scarification + scarified + scarify + scarifying + scariness + scaring + Scarlatti + scarlet + scarp + scarred + scarring + scars + Scarsdale + scarves + scary + scat + scathe + scathed + scathing + scathingly + scatological + scatology + scatted + scatter + scatterbrain + scatterbrained + scattered + scattergun + scattering + scatterings + scatterplot + scatterplots + scatters + scaup + scavenge + scavenged + scavenger + scavengers + scavenging + scenario + scenarios + scenarist + scene + sceneries + scenery + scenes + scenic + scenically + scent + scented + scents + scepter + sceptered + scepters + sceptic + sceptical + scepticism + sceptre + Schaefer + Schafer + Schantz + schedulable + schedule + scheduled + scheduler + schedulers + schedules + scheduling + schelling + schema + schemas + schemata + schematic + schematically + schematics + scheme + schemed + schemer + schemers + schemes + scheming + Schenectady + scherzi + scherzo + scherzos + Schiller + schilling + schism + schismatic + schist + schizoid + schizomycetes + schizophrenia + schizophrenic + Schlesinger + schlieren + Schlitz + Schloss + schmaltz + schmaltzy + Schmidt + Schmitt + schmitz + Schnabel + schnapps + schnauzer + Schneider + schnozzle + Schoenberg + Schofield + scholar + scholarly + scholars + scholarship + scholarships + scholastic + scholastical + scholastically + scholasticism + scholastics + school + schoolbook + schoolboy + schoolboys + schooled + schooler + schoolers + schoolfellow + schoolgirl + schoolgirlish + schoolhouse + schoolhouses + schooling + schoolma'am + schoolman + schoolmarm + schoolmaster + schoolmasters + schoolmate + schoolmen + schoolmistress + schoolroom + schoolrooms + schools + schoolteacher + schoolwork + schooner + schottische + Schottky + Schroeder + Schroedinger + Schubert + Schultz + Schulz + Schumacher + Schumann + schuss + Schuster + Schuyler + Schuylkill + schwa + Schwab + Schwartz + Schweitzer + Sci + sciatic + sciatica + science + sciences + scientific + scientifically + scientist + scientists + scimitar + scimiter + scintilla + scintillate + scintillated + scintillating + scintillation + scintillator + scintillators + scion + scissor + scissored + scissoring + scissors + scleroses + sclerosis + sclerotic + SCM + scoff + scoffed + scoffer + scoffing + scoffingly + scoffs + scold + scolded + scolder + scolding + scolds + scollop + scolytid + scolytidae + scolytids + sconce + scone + scoop + scooped + scoopful + scoopfulfuls + scooping + scoops + scoot + scooter + scope + scoped + scopes + scopic + scoping + scopolamine + scops + scorbutic + scorbutical + scorch + scorched + scorcher + scorches + scorching + score + scoreboard + scorecard + scored + scorer + scorers + scores + scoria + scoring + scorings + scorn + scorned + scorner + scornful + scornfully + scorning + scorns + Scorpio + scorpion + scorpions + Scot + scotch + scoter + Scotia + Scotland + scotland + Scotsman + Scotsmen + Scott + Scottish + scottish + Scottsdale + Scotty + scoundrel + scoundrelly + scoundrels + scour + scoured + scourge + scourged + scourger + scourging + scouring + scours + scout + scouted + scouting + scoutmaster + scouts + scow + scowl + scowled + scowler + scowling + scowls + scrabble + scrabbled + scrabbling + scrag + scragged + scraggier + scraggiest + scraggily + scragging + scragglier + scraggliest + scraggly + scraggy + scram + scramble + scrambled + scrambler + scrambles + scrambling + scrammed + Scranton + scrap + scrapbook + scrapbooks + scrape + scraped + scraper + scrapers + scrapes + scraping + scrapings + scrapped + scrapper + scrappier + scrappiest + scrappily + scrappiness + scrappy + scraps + scratch + scratched + scratcher + scratchers + scratches + scratchier + scratchiest + scratching + scratchpad + scratchpads + scratchy + scrawl + scrawled + scrawlier + scrawliest + scrawling + scrawls + scrawly + scrawnier + scrawniest + scrawny + scream + screamed + screamer + screamers + screaming + screamingly + screams + screech + screeched + screeches + screechier + screechiest + screechiness + screeching + screechy + screed + screen + screened + screenful + screening + screenings + screenplay + screens + screenwriter + screw + screwball + screwbean + screwdriver + screwed + screwier + screwiest + screwing + screws + screwworm + screwy + scrfchar + scribal + scribble + scribbled + scribbler + scribbles + scribbling + scribe + scribes + scribing + Scribners + scrim + scrimmage + scrimmaged + scrimmaging + scrimp + scrimper + scrimpier + scrimpiest + scrimpy + scrip + Scripps + script + scripted + scription + scripts + scriptural + scripture + scriptures + scriptwriter + scriven + scrod + scrofula + scrofulous + scroll + scrolled + scrolling + scrolls + scrooge + scrota + scrotal + scrotum + scrotums + scrounge + scrounged + scrounger + scrounging + scrub + scrubbed + scrubber + scrubbier + scrubbiest + scrubby + scruff + scruffier + scruffiest + scruffily + scruffiness + scruffy + scrumptious + scrumptiously + scruple + scrupled + scrupling + scrupulosities + scrupulosity + scrupulous + scrupulously + scrupulousness + scrutable + scrutinies + scrutinize + scrutinized + scrutinizer + scrutinizing + scrutiny + scuba + scud + scudded + scuff + scuffle + scuffled + scuffles + scuffling + scull + sculler + sculleries + scullery + scullion + sculp + sculpin + sculpt + sculpted + sculptor + sculptors + sculptress + sculpts + sculptural + sculpturally + sculpture + sculptured + sculptures + sculpturing + scum + scummed + scummier + scummiest + scumming + scummy + scup + scupper + scuppernong + scups + scurf + scurfier + scurfiest + scurfy + scurried + scurrilities + scurrility + scurrilous + scurrilously + scurry + scurrying + scurvier + scurviest + scurvily + scurviness + scurvy + scutcheon + scuttle + scuttlebutt + scuttled + scuttles + scuttling + scutum + Scylla + scythe + scythed + scythes + Scythia + scything + SD + sdlc + sds + sdump + SE + sea + seabirds + seaboard + seacoast + seacoasts + seafare + seafarer + seafaring + seafood + seagoing + Seagram + seagull + seagulls + seahorse + seal + sealable + sealant + sealed + sealer + sealevel + sealing + seals + sealskin + sealy + seam + seaman + seamanlike + seamanship + seamed + seamen + seamier + seamiest + seaminess + seaming + seamless + seams + seamstress + seamy + Sean + seance + seances + seaplane + seaport + seaports + seaquake + sear + search + searched + searcher + searchers + searches + searching + searchingly + searchings + searchlight + seared + searing + searingly + sears + seas + seascape + seashell + seashore + seashores + seasick + seasickness + seaside + season + seasonable + seasonably + seasonal + seasonally + seasoned + seasoner + seasoners + seasoning + seasonings + seasons + seastar + seat + seated + seater + seating + seats + Seattle + seattle + seaward + seawards + seaway + seaweed + seaweeds + seaworthiness + seaworthy + sebaceous + Sebastian + sec + secant + secede + seceded + seceder + secedes + seceding + secession + secessionist + seclude + secluded + secluding + seclusion + seclusive + second + secondaries + secondarily + secondary + seconded + seconder + seconders + secondhand + seconding + secondly + seconds + secrecies + secrecy + secret + secretarial + secretariat + secretaries + secretary + secretaryship + secrete + secreted + secretes + secreting + secretion + secretions + secretive + secretively + secretiveness + secretly + secretory + secrets + secs + sect + sectarian + sectarianism + section + sectional + sectionalism + sectionalist + sectionally + sectioned + sectioning + sections + sector + sectors + sects + secular + secularism + secularist + secularization + secularize + secularized + secularizing + secularly + secure + secured + securely + secures + securing + securings + securities + security + sedan + sedate + sedated + sedately + sedateness + sedating + sedation + sedative + sedentary + seder + sedge + sediment + sedimental + sedimentary + sedimentation + sediments + sedition + seditionist + seditious + seduce + seduced + seducer + seducers + seduces + seducing + seduction + seductive + seductively + seductiveness + sedulity + sedulous + sedulously + sedulousness + see + seeable + seed + seedbed + seeded + seeder + seeders + seedier + seediest + seediness + seeding + seedings + seedling + seedlings + seeds + seedy + seeing + seek + seeker + seekers + seeking + seeks + seem + seemed + seeming + seemingly + seemlier + seemliest + seemliness + seemly + seems + seen + seep + seepage + seeped + seeping + seeps + seer + seers + seersucker + sees + seesaw + seethe + seethed + seethes + seething + segment + segmentation + segmentations + segmented + segmenting + segments + Segovia + segregant + segregate + segregated + segregates + segregating + segregation + segregationist + segue + segued + segueing + Segundo + Seidel + seine + seined + seining + seismic + seismically + seismogram + seismograph + seismographer + seismographic + seismography + seismological + seismologist + seismology + seize + seized + seizes + seizing + seizure + seizures + selander + seldom + select + selectable + selected + selecting + selection + selectionists + selections + selective + selectively + selectivity + selectivitysenescence + selectman + selectmen + selectness + selector + selectors + Selectric + selects + Selena + selenate + selenite + selenium + self + selfadjoint + selfish + selfishly + selfishness + selfless + selflessly + selflessness + Selfridge + selfsame + Selkirk + sell + seller + sellers + selling + sellout + sells + Selma + seltzer + selvage + selvedge + selves + Selwyn + semantic + semantical + semantically + semanticist + semanticists + semantics + semaphore + semaphores + semblance + semelparity + semelparous + semen + semester + semesters + semi + semiannual + semiannually + semiautomated + semicircle + semicircular + semiclassical + semicolon + semicolons + semiconductor + semiconductors + semiconscious + semifinal + semimonthlies + semimonthly + seminal + seminar + seminarian + seminaries + seminars + seminary + Seminole + semipermanent + semipermanently + semiprecious + semiprivate + semipro + semiprofessional + Semiramis + semis + semisweet + Semite + Semitic + semitone + semitrailer + semitropical + semiweeklies + semiweekly + semiyearlies + semiyearly + semolina + semper + sen + senate + senates + senator + senatorial + senators + send + sender + senders + sending + sends + Seneca + Senegal + senescence + senescent + seneschal + senile + senility + senior + seniorities + seniority + seniors + senna + senor + Senora + senorita + sensate + sensation + sensational + sensationalism + sensationalist + sensationalize + sensationalized + sensationalizing + sensationally + sensations + sense + sensed + senseless + senselessly + senselessness + senses + sensibilities + sensibility + sensible + sensibly + sensing + sensitive + sensitively + sensitiveness + sensitives + sensitivities + sensitivity + sensitization + sensitize + sensitized + sensitizer + sensitizing + sensor + sensors + sensory + sensual + sensualism + sensualist + sensuality + sensually + sensuous + sensuously + sent + sentence + sentenced + sentences + sentencing + sentential + sententious + sentience + sentiency + sentient + sentiment + sentimental + sentimentalism + sentimentalist + sentimentalities + sentimentality + sentimentalize + sentimentalized + sentimentalizing + sentimentally + sentiments + sentinel + sentinels + sentries + sentry + Seoul + seoul + sepal + separability + separable + separably + separate + separated + separately + separateness + separates + separating + separation + separations + separatism + separatist + separator + separators + sepia + Sepoy + sepsis + sept + septa + septate + September + september + septennial + septet + septette + septic + septically + septicemia + septillion + septuagenarian + septum + septums + sepuchral + sepulcher + sepulchers + sepulchral + sepulchrally + sepulchre + seq + seqed + seqence + seqfchk + seqrch + sequel + sequels + sequence + sequenced + sequencer + sequencers + sequences + sequencing + sequencings + sequent + sequential + sequentiality + sequentialize + sequentialized + sequentializes + sequentializing + sequentially + sequester + sequestration + sequin + sequitur + Sequoia + seqwl + sera + seraglio + seraglios + serape + seraph + seraphic + seraphically + seraphim + seraphs + Serbia + sercom + sere + serenade + serenaded + serenading + serendipitous + serendipity + serene + serenely + serenity + serf + serfdom + serfs + serge + sergeancies + sergeancy + sergeant + sergeants + sergeantship + Sergei + serial + serializability + serializable + serialization + serializations + serialize + serialized + serializes + serializing + serially + serials + seriatim + seriating + seriation + series + serif + serine + seriocomic + seriocomically + serious + seriously + seriousness + sermon + sermonize + sermonizing + sermons + serological + serology + serotinous + serous + Serpens + serpent + serpentine + serpents + serrate + serrated + serried + serum + serums + servant + servants + serve + served + server + servers + serves + service + serviceability + serviceable + serviceably + serviceberry + serviced + serviceman + servicemen + services + servicing + serviette + servile + servilely + servility + serving + servings + servitor + servitude + servo + servomechanism + servomotor + sesame + sesquicentennial + sessile + session + sessional + sessions + set + setback + Seth + setioerr + Seton + setpfx + sets + setscrew + settable + settee + setter + setters + setting + settings + settle + settled + settlement + settlements + settler + settlers + settles + settling + setuid + setup + setups + seven + sevenfold + sevens + seventeen + seventeens + seventeenth + seventh + seventies + seventieth + seventy + sever + several + severalfold + severally + severalty + severance + severe + severed + severely + severeness + severer + severest + severing + severities + severity + Severn + severs + Seville + sew + sewage + Seward + sewed + sewer + sewerage + sewers + sewing + sewn + sews + sex + sexagenarian + sexed + sexes + sexier + sexiest + sexily + sexiness + sexing + sexism + sexist + sexless + sexlessly + sexlessness + sexologist + sexology + Sextans + sextant + sextet + sextette + sextillion + sexton + sextuple + sextuplet + sexual + sexuality + sexually + sexy + Seymour + sforzando + sfree + shabbier + shabbiest + shabbily + shabbiness + shabby + shack + shacked + shackle + shackled + shackles + shackling + shacks + shad + shadbush + shade + shaded + shades + shadflower + shadier + shadiest + shadily + shadiness + shading + shadings + shadow + shadowed + shadower + shadowiness + shadowing + shadows + shadowy + shads + shady + Shafer + Shaffer + shaft + shafts + shag + shagbark + shagged + shaggier + shaggiest + shagginess + shagging + shaggy + shah + shakable + shakably + shake + shakeable + shakedown + shaken + shaker + shakers + shakes + Shakespeare + Shakespearean + Shakespearian + shakier + shakiest + shakily + shakiness + shaking + shako + shakos + shaky + shale + shall + shallot + shallow + shallower + shallowly + shallowness + shalom + shalt + sham + shamble + shambled + shambles + shambling + shame + shamed + shameface + shamefaced + shameful + shamefully + shamefulness + shameless + shamelessly + shamelessness + shames + shaming + shammed + shamming + shammy + shampoo + shampooed + shampooing + shamrock + shams + shan't + Shanghai + shanghaied + shanghaiing + shank + Shannon + shannon + shantey + shanteys + shanties + Shantung + shanty + shape + shaped + shapeless + shapelessly + shapelessness + shapelier + shapeliest + shapeliness + shapely + shaper + shapers + shapes + shaping + Shapiro + sharable + shard + share + shareable + sharecrop + sharecropped + sharecropper + sharecroppers + sharecropping + shared + shareholder + shareholders + sharer + sharers + shares + Shari + sharing + shark + sharks + sharkskin + Sharon + sharp + Sharpe + sharpen + sharpened + sharpener + sharpening + sharpens + sharper + sharpest + sharpie + sharply + sharpness + sharpshoot + sharpshooter + Shasta + shatter + shattered + shattering + shatterproof + shatters + Shattuck + shave + shaved + shaven + shaver + shaves + shaving + shavings + shaw + shawl + shawls + Shawnee + shay + she + she'd + she'll + Shea + sheaf + shear + sheared + Shearer + shearer + shearing + shears + sheath + sheathe + sheathed + sheathing + sheaths + sheave + sheaved + sheaves + sheaving + shebang + shed + shedder + shedding + Shedir + sheds + Sheehan + sheen + sheep + sheepdip + sheepfold + sheepish + sheepishly + sheepishness + sheepskin + sheer + sheered + sheet + sheeted + sheeting + sheets + Sheffield + sheik + sheikdom + sheikh + Sheila + shekel + Shelby + Sheldon + sheldrake + shelf + shelflike + shell + shellac + shellack + shellacked + shellacking + shelled + sheller + Shelley + shellfire + shellfish + shelling + shells + shelter + sheltered + sheltering + shelters + Shelton + shelve + shelved + shelves + shelving + Shenandoah + shenanigan + Shepard + shepherd + shepherdess + shepherds + Sheppard + Sheraton + sherbet + Sheridan + sheriff + sheriffs + Sherlock + Sherman + sherries + Sherrill + sherry + Sherwin + Sherwood + shes + shew + shewed + shewing + shewn + shfsep + shibboleth + shied + shield + shielded + shielding + shieldings + shields + shies + shift + shifted + shifter + shifters + shiftier + shiftiest + shiftily + shiftiness + shifting + shiftless + shifts + shifty + shill + shillalah + shillelagh + shillelah + shilling + shillings + Shiloh + shim + shimmer + shimmered + shimmering + shimmers + shimmery + shimmied + shimmy + shimmying + shin + shinbone + shindig + shine + shined + shiner + shiners + shines + shingle + shingled + shingles + shingling + shinguard + shinier + shiniest + shininess + shining + shiningly + shinned + shinnied + shinning + shinny + shinnying + Shinto + shiny + ship + shipboard + shipbuild + shipbuilder + shipbuilding + shiplap + Shipley + shipload + shipman + shipmate + shipmen + shipment + shipments + shipowner + shipped + shipper + shippers + shipping + ships + shipshape + shipwreck + shipwrecked + shipwrecks + shipwright + shipyard + shire + shirk + shirker + shirking + shirks + Shirley + shirr + shirring + shirt + shirting + shirtmake + shirts + shirttail + shirtwaist + shish + shitepoke + shiv + shivaree + shiver + shivered + shiverer + shivering + shivers + shivery + shmaltz + shmaltzier + shmaltziest + shmaltzy + Shmuel + shoal + shoals + shoat + shock + shocked + shocker + shockers + shocking + shockingly + Shockley + shockproof + shocks + shod + shoddier + shoddies + shoddiest + shoddily + shoddiness + shoddy + shoe + shoed + shoehorn + shoehorning + shoeing + shoelace + shoemake + shoemaker + shoemaking + shoes + shoeshine + shoestring + shogun + shoji + shone + shoo + shooed + shoofly + shooing + shook + shoot + shooter + shooters + shooting + shootings + shoots + shop + shopkeep + shopkeeper + shopkeepers + shoplift + shoplifter + shoplifting + shopped + shopper + shoppers + shopping + shops + shoptalk + shopworn + shore + shored + shoreline + shores + shoring + shorn + short + shortage + shortages + shortbread + shortcake + shortchange + shortchanged + shortchanging + shortcoming + shortcomings + shortcut + shortcuts + shorted + shorten + shortened + shortener + shortening + shortens + shorter + shortest + shortfall + shorthand + shorthanded + shorthorn + shorting + shortish + shortly + shortness + shorts + shortsighted + shortsightedly + shortsightedness + shortstop + shortwave + shot + shotbush + shotgun + shotguns + shots + should + shoulder + shouldered + shouldering + shoulders + shouldest + shouldn + shouldn't + shouldst + shout + shouted + shouter + shouters + shouting + shouts + shove + shoved + shovel + shoveled + shoveler + shovelful + shovelfuls + shoveling + shovelled + shoveller + shovelling + shovels + shoves + shoving + show + showboat + showcase + showdown + showed + shower + showered + showering + showers + showery + showier + showiest + showily + showiness + showing + showings + showman + showmanship + showmen + shown + showoff + showpiece + showplace + showroom + shows + showy + shrank + shrapnel + shred + shredded + shredder + shredding + shreds + Shreveport + shrew + shrewd + shrewdest + shrewdly + shrewdness + shrewish + shrewishly + shrewishness + shrews + shriek + shrieked + shrieking + shrieks + shrift + shrike + shrill + shrilled + shrilling + shrillness + shrilly + shrimp + shrimpton + shrine + shrines + shrink + shrinkable + shrinkage + shrinking + shrinks + shrive + shrived + shrivel + shriveled + shriveling + shrivelled + shrivelling + shriven + shriving + shroud + shrouded + shrove + shrub + shrubberies + shrubbery + shrubbier + shrubbiest + shrubby + shrubs + shrug + shrugged + shrugging + shrugs + shrunk + shrunken + shtick + Shu + shuck + shucks + shudder + shuddered + shuddering + shudders + shuddery + shuffle + shuffleboard + shuffled + shuffler + shuffles + shuffling + Shulman + shun + shunned + shuns + shunt + shush + shut + shutdown + shutdowns + shuteye + shutoff + shutout + shuts + shutter + shuttered + shutters + shutting + shuttle + shuttlecock + shuttled + shuttles + shuttling + shy + shyer + shyest + shying + Shylock + shyly + shyness + shyster + sial + SIAM + Siamese + Sian + sib + Siberia + sibilance + sibilant + Sibley + sibling + siblings + sibship + sibships + sibyl + sibylline + sic + Sicilian + Sicily + sick + sickbed + sicked + sicken + sickening + sicker + sickest + sicking + sickish + sickle + sicklewort + sicklied + sicklier + sickliest + sickliness + sickly + sicklying + sickness + sicknesses + sickout + sickroom + side + sidearm + sideband + sideboard + sideboards + sideburn + sideburns + sidecar + sided + sidekick + sidelight + sidelights + sideline + sidelined + sidelining + sidelong + sideman + sidemen + sidepiece + sidereal + siderite + sides + sidesaddle + sideshow + sideslip + sideslipped + sideslipping + sidesplitting + sidestep + sidestepped + sidestepping + sideswipe + sideswiped + sideswiping + sidetrack + sidewalk + sidewalks + sidewall + sideway + sideways + sidewinder + sidewise + siding + sidings + sidle + sidled + sidling + Sidney + siege + Siegel + sieges + Siegfried + Sieglinda + Siegmund + Siemens + Siena + sienna + sierra + siesta + sieve + sieves + sift + sifted + sifter + sifting + sig + sigfile + sigfiles + sigh + sighed + sighing + sighs + sight + sighted + sighting + sightings + sightless + sightlier + sightliest + sightliness + sightly + sights + sightsee + sightseeing + sightseer + sigma + sigmoid + Sigmund + sign + signal + signaled + signaler + signaling + signalize + signalized + signalizing + signalled + signaller + signalling + signally + signals + signatories + signatory + signature + signatures + signboard + signed + signer + signers + signet + significance + significant + significantly + significants + signification + signified + signifies + signify + signifying + signing + signoff + signon + signons + Signor + signor + Signora + signpost + signs + sikkim + Sikorsky + silage + silane + Silas + silence + silenced + silencer + silencers + silences + silencing + silent + silently + silhouette + silhouetted + silhouettes + silhouetting + silica + silicate + silicates + siliceous + silicic + silicide + silicon + silicone + silicosis + silk + silken + silkier + silkiest + silkily + silkine + silkiness + silks + silkworm + silky + sill + sillier + silliest + sillily + silliness + sills + silly + silo + siloed + siloing + silos + silt + siltation + silted + siltier + siltiest + silting + silts + siltstone + silty + silvan + silver + silvered + silverfish + silvering + Silverman + silvers + silversmith + silverware + silvery + sima + simcon + simian + similar + similarily + similarities + similarity + similarly + simile + similitude + simmer + simmered + simmering + simmers + Simmons + Simon + Simonson + simony + simpatico + simper + simple + simplectic + simpleminded + simpleness + simpler + simplest + simpleton + simplex + simplicial + simplicities + simplicity + simplification + simplifications + simplified + simplifier + simplifiers + simplifies + simplify + simplifying + simplistic + simply + Simpson + Sims + simula + simulate + simulated + simulates + simulating + simulation + simulations + simulator + simulators + simulcast + simulcasting + simultaneity + simultaneous + simultaneously + sin + Sinai + since + sincere + sincerely + sincerer + sincerest + sincerities + sincerity + Sinclair + sine + sinecure + sines + sinew + sinews + sinewy + sinful + sinfully + sinfulness + sing + singable + Singapore + singe + singed + singeing + singer + singers + singing + singingly + single + singled + singlehanded + singleness + singleprecision + singles + singlestep + singlet + singleton + singletons + singletree + singling + singly + sings + singsong + singular + singularities + singularity + singularly + sinh + sinister + sinisterly + sinisterness + sinistral + sink + sinked + sinker + sinkers + sinkhole + sinking + sinks + sinned + sinner + sinners + sinning + sins + sinter + sinuosities + sinuosity + sinuous + sinuously + sinus + sinusitis + sinusoid + sinusoidal + sinusoids + sion + sioning + Sioux + sip + siphon + siphoned + siphoning + sipped + sipper + sipping + sips + sir + sire + sired + siren + sirens + sires + siring + Sirius + sirloin + sirocco + siroccos + sirs + sirup + sis + sisal + siskin + sissies + sissified + sissy + sister + sisterhood + sisterliness + sisterly + sisters + Sistine + Sisyphean + Sisyphus + sit + sitar + site + sited + sites + siting + sits + sitter + sitters + sitting + sittings + situ + situate + situated + situates + situating + situation + situational + situationally + situations + situp + situs + siva + six + sixes + sixfold + sixgun + sixpence + sixteen + sixteens + sixteenth + sixth + sixths + sixties + sixtieth + sixty + sizable + sizableness + sizably + size + sizeable + sized + sizes + sizing + sizings + sizzle + sizzled + sizzling + skat + skate + skated + skater + skaters + skates + skating + skedaddle + skedaddled + skedaddling + skeet + skein + skeletal + skeleton + skeletons + skeptic + skeptical + skeptically + skepticism + skeptics + sketch + sketchbook + sketched + sketches + sketchier + sketchiest + sketchily + sketching + sketchpad + sketchy + skew + skewed + skewer + skewers + skewing + skewness + skews + ski + skid + skidded + skidding + skiddy + skied + skier + skies + skiff + skiing + skilful + skilfully + skilfulness + skill + skilled + skillet + skillful + skillfully + skillfulness + skills + skim + skimmed + skimmer + skimming + skimp + skimped + skimpier + skimpiest + skimpily + skimpiness + skimping + skimps + skimpy + skims + skin + skindive + skinflick + skinflint + skink + skinless + skinned + skinner + skinners + skinnier + skinniest + skinniness + skinning + skinny + skins + skintight + skip + skipjack + skipped + skipper + skippers + skipping + Skippy + skips + skirmish + skirmished + skirmisher + skirmishers + skirmishes + skirmishing + skirt + skirted + skirting + skirts + skis + skit + skits + skittish + skittishly + skittishness + skittle + skivvies + skivvy + skoal + Skopje + skulduggery + skulk + skulked + skulker + skulking + skulks + skull + skullcap + skullduggery + skulls + skunk + skunks + sky + skycap + Skye + skyhook + skyjack + skyjacker + skylark + skylarking + skylarks + skylight + skylights + skyline + skyrocket + skyrockets + skyscrape + skyscraper + skyscrapers + skyward + skywards + skywave + skyway + skyways + skywriter + skywriting + slab + slack + slacken + slackens + slacker + slacking + slackly + slackness + slacks + sladang + slag + slain + slake + slaked + slaking + slalom + slam + slammed + slamming + slams + slander + slanderer + slanderous + slanderously + slanders + slang + slangier + slangiest + slangy + slant + slanted + slanting + slantingly + slants + slap + slapdash + slapped + slapping + slaps + slapstick + slash + slashed + slashes + slashing + slat + slate + slated + slater + slates + slather + slating + slats + slatted + slattern + slatternly + slaughter + slaughtered + slaughterer + slaughterhouse + slaughtering + slaughters + Slav + slave + slaved + slaveholder + slaveholding + slaver + slavery + slaves + Slavic + slaving + slavish + slavishly + slavishness + Slavonic + slaw + slay + slayed + slayer + slayers + slaying + slays + sleazier + sleaziest + sleazily + sleaziness + sleazy + sled + sledded + sledding + sledge + sledged + sledgehammer + sledges + sledging + sleds + sleek + sleekly + sleekness + sleep + sleeper + sleepers + sleepier + sleepiest + sleepily + sleepiness + sleeping + sleepless + sleeplessly + sleeplessness + sleeps + sleepwalk + sleepwalker + sleepwalking + sleepwear + sleepy + sleet + sleety + sleeve + sleeveless + sleeves + sleigh + sleighs + sleight + slender + slenderer + slenderize + slenderized + slenderizing + slenderly + slenderness + slept + sleuth + slew + slewing + slice + sliced + slicer + slicers + slices + slicing + slick + slicker + slickers + slickly + slickness + slicks + slid + slide + slider + sliders + slides + sliding + slier + sliest + slight + slighted + slighter + slightest + slighting + slightingly + slightly + slightness + slights + slim + slime + slimed + slimier + slimiest + sliminess + slimly + slimmed + slimmer + slimmest + slimming + slimness + slimy + sling + slinging + slings + slingshot + slink + slinkier + slinkiest + slinking + slinky + slip + slipcase + slipcover + slipknot + slippage + slipped + slipper + slipperier + slipperiest + slipperiness + slippers + slippery + slipping + slips + slipshod + slit + slither + slits + sliver + slivers + slivery + Sloan + Sloane + slob + slobber + Slocum + sloe + slog + slogan + sloganeer + slogans + slogged + slogging + sloop + slop + slope + sloped + sloper + slopers + slopes + sloping + slopped + sloppier + sloppiest + sloppily + sloppiness + slopping + sloppy + slops + slosh + slot + sloth + slothful + slothfully + slothfulness + sloths + slots + slotted + slotting + slouch + slouched + slouches + slouchier + slouchiest + slouching + slouchy + slough + Slovakia + sloven + Slovenia + slovenlier + slovenliest + slovenliness + slovenly + slow + slowdown + slowed + slower + slowest + slowing + slowly + slowness + slowpoke + slows + slt + sludge + slue + slued + slug + sluggard + sluggardly + slugged + slugger + slugging + sluggish + sluggishly + sluggishness + slugs + sluice + sluiced + sluicing + sluing + slum + slumber + slumbered + slumbering + slumberous + slumbers + slumlord + slummed + slumming + slump + slumped + slumps + slums + slung + slunk + slur + slurp + slurping + slurred + slurring + slurringly + slurry + slurs + slush + slushiness + slushy + slut + sluttish + sly + slyer + slyest + slyly + slyness + smack + smacked + smacking + smacks + small + smaller + smallest + Smalley + smallish + smallness + smallpox + smalltime + smart + smarted + smarten + smarter + smartest + smartly + smartness + smash + smashed + smasher + smashers + smashes + smashing + smashingly + smashup + smattering + smear + smeared + smearing + smears + smeary + smell + smelled + smellier + smelliest + smelling + smells + smelly + smelt + smelter + smelts + smidgen + smidgin + smile + smiled + smiles + smiling + smilingly + smirch + smirk + smirked + smite + smith + smithereens + smithers + Smithfield + smithies + smiths + Smithson + smithy + smiting + smitten + sml + smock + smocking + smocks + smog + smoggier + smoggiest + smoggy + smokable + smoke + smoked + smokehouse + smokeless + smoker + smokers + smokes + smokescreen + smokestack + smokier + smokies + smokiest + smokiness + smoking + smoky + smolder + smoldered + smoldering + smolders + smooch + smooth + smoothbore + smoothed + smoother + smoothes + smoothest + smoothing + smoothly + smoothness + smorgasbord + smote + smother + smothered + smothering + smothers + smoulder + Smucker + smudge + smudged + smudging + smudgy + smug + smugger + smuggest + smuggle + smuggled + smuggler + smugglers + smuggles + smuggling + smugly + smugness + smurks + smut + smuttier + smuttiest + smuttiness + smutty + Smyrna + Smythe + snack + snacks + snaffle + snafu + snag + snagged + snagging + snaggleteeth + snaggletooth + snaggletoothed + snail + snails + snake + snakebird + snaked + snakelike + snakeroot + snakes + snakier + snakiest + snaking + snaky + snap + snapback + snapdragon + snapped + snapper + snappers + snappier + snappiest + snappily + snappiness + snapping + snappish + snappishly + snappy + snaps + snapshot + snapshots + snare + snared + snares + snaring + snark + snarl + snarled + snarling + snatch + snatched + snatches + snatching + snazzy + sneak + sneaked + sneaker + sneakers + sneakier + sneakiest + sneakily + sneakiness + sneaking + sneakingly + sneaks + sneaky + sneer + sneered + sneering + sneeringly + sneers + sneeze + sneezed + sneezes + sneezing + snell + snick + snicker + snide + snidely + Snider + sniff + sniffed + sniffing + sniffle + sniffled + sniffling + sniffs + snifter + snigger + snip + snipe + sniped + sniping + snipped + snippet + snippier + snippiest + snippiness + snipping + snippy + snitch + snitched + snivel + sniveled + sniveling + snivelled + snivelling + snob + snobbery + snobbish + snobbishness + snobol + snood + snook + snoop + snooped + snoopier + snoopiest + snooping + snoops + snoopy + snoot + snootier + snootiest + snootily + snootiness + snooty + snooze + snoozed + snoozing + snore + snored + snorer + snores + snoring + snorkel + snort + snorted + snorting + snorts + snot + snottier + snottiest + snotty + snout + snouts + snow + snowball + snowbank + snowbird + snowbound + snowdrift + snowdrop + snowed + snowfall + snowflake + snowier + snowiest + snowily + snowing + snowman + snowmen + snowmobile + snowplow + snows + snowshoe + snowshoes + snowstorm + snowsuit + snowy + snub + snubbed + snubber + snubbier + snubbiest + snubby + snuck + snuff + snuffbox + snuffed + snuffer + snuffing + snuffle + snuffled + snuffling + snuffs + snug + snugger + snuggest + snuggle + snuggled + snuggles + snuggling + snuggly + snugly + snugness + snyaptic + Snyder + so + soak + soaked + soaking + soaks + soap + soapbox + soaped + soapier + soapiest + soapiness + soaping + soaps + soapstone + soapsud + soapsuds + soapy + soar + soared + soaring + soars + sob + sobbed + sobbing + sobbingly + sober + sobered + sobering + soberly + soberness + sobers + sobriety + sobriquet + sobs + Soc + soccer + sociabilities + sociability + sociable + sociably + social + socialism + socialist + socialistic + socialists + socialite + socialization + socializations + socialize + socialized + socializes + socializing + socially + societal + Societe + societies + society + sociocultural + socioeconomic + sociological + sociologically + sociologist + sociologists + sociology + sociometry + sociopath + sock + socked + socket + sockets + sockeye + socking + socks + Socrates + Socratic + sod + soda + sodalities + sodality + sodded + sodden + sodium + sodomite + sodomy + sods + soever + sofa + sofas + soffit + Sofia + sofia + soft + softball + soften + softened + softener + softening + softens + softer + softest + softhearted + softie + softies + softly + softness + software + softwares + softwood + softy + soggier + soggiest + soggily + sogginess + soggy + soignee + soil + soiled + soiling + soils + soir + soiree + sojourn + sojourner + sojourners + Sol + solace + solaced + solacer + solacing + solar + solariia + solarium + sold + solder + soldered + solderer + soldier + soldiering + soldierly + soldiers + soldiery + sole + solecism + solecistic + soled + solely + solemn + solemnities + solemnity + solemnization + solemnize + solemnized + solemnizing + solemnly + solemnness + solenoid + soles + solicit + solicitation + solicited + soliciting + solicitor + solicitors + solicitous + solicitously + solicits + solicitude + solid + solidarities + solidarity + solidification + solidified + solidifies + solidify + solidifying + solidity + solidly + solidness + solids + soliloquies + soliloquize + soliloquized + soliloquizing + soliloquy + soling + solipsism + solitaire + solitaries + solitarily + solitary + soliton + solitude + solitudes + solo + soloist + Solomon + Solon + solos + solstice + solubility + soluble + solute + solution + solutions + solvable + solvate + solve + solved + solvency + solvent + solvents + solver + solvers + solves + solving + soma + somal + Somali + somatic + somber + somberly + sombre + sombrero + sombreros + some + somebodies + somebody + somebody'll + someday + somehow + someone + someone'll + someplace + Somers + somersault + Somerset + Somerville + something + sometime + sometimes + someway + someways + somewhat + somewhere + sommelier + Sommerfeld + somnambulant + somnambulate + somnambulated + somnambulating + somnambulism + somnambulist + somnolence + somnolent + somnolently + son + sonant + sonar + sonata + song + songbag + songbird + songbook + songfest + songful + songs + songster + songstress + songwriter + sonic + sonnet + sonneteer + sonnets + sonny + Sonoma + Sonora + sonores + sonority + sonorous + sonorously + sons + Sony + soon + sooner + soonest + soot + sooth + soothe + soothed + soother + soothes + soothing + soothsay + soothsayer + sootier + sootiest + sootiness + sooty + sop + sophia + Sophie + sophism + sophisticate + sophisticated + sophistication + sophistry + Sophoclean + Sophocles + sophomore + sophomores + sophomoric + soprano + sora + sorb + sorcerer + sorcerers + sorcery + sordid + sordidly + sordidness + sore + sorely + soreness + Sorensen + Sorenson + sorer + sores + sorest + sorghum + sorority + sorption + sorrel + sorrier + sorriest + sorrow + sorrowful + sorrowfully + sorrows + sorry + sort + sorted + sorter + sorters + sortie + sorting + sorts + sou + souffle + sough + sought + soul + soulful + souls + sound + sounded + sounder + soundest + sounding + soundings + soundly + soundness + soundproof + sounds + soup + souped + soups + sour + sourberry + source + sources + sourdough + soured + sourer + sourest + souring + sourly + sourness + sours + sourwood + Sousa + soutane + south + Southampton + southbound + southeast + southeastern + southern + southerner + southerners + southernmost + Southey + southland + southpaw + southward + southwest + southwestern + southwood + souvenir + sovereign + sovereigns + sovereignty + soviet + soviets + sovkhoz + sow + sowbelly + sown + sox + soy + soya + soybean + spa + space + spacecraft + spaced + spacer + spacers + spaces + spaceship + spaceships + spacesuit + spacetime + spacial + spacing + spacings + spacious + spade + spaded + spadefoot + spades + spading + spagetti + spaghetti + Spain + spain + spake + spalding + span + spandrel + spangle + Spaniard + spaniel + Spanish + spanish + spank + spanked + spanking + spankingly + spanks + spanned + spanner + spanners + spanning + spans + spar + spare + spared + sparely + spareness + sparer + spares + sparest + sparge + sparing + sparingly + spark + sparked + sparker + sparking + sparkle + sparkled + sparkler + sparkling + Sparkman + sparks + sparky + sparling + sparring + sparrow + sparrows + sparse + sparsely + sparseness + sparser + sparsest + sparsity + Sparta + spasm + spasmodic + spasmodical + spasmodically + spastic + spat + spate + spates + spathe + spatial + spatially + spatio + spatlum + spatted + spatter + spatterdock + spattered + spatting + spatula + Spaulding + spavin + spavined + spawn + spawned + spawning + spawns + spay + spayed + speak + speakable + speakeasy + speaker + speakers + speaking + speaks + spear + speared + spearhead + spearmint + spears + spec + special + specialist + specialists + speciality + specialization + specializations + specialize + specialized + specializes + specializing + specially + specials + specialties + specialty + speciation + specie + species + specifiable + specific + specifically + specification + specifications + specificity + specifics + specified + specifier + specifiers + specifies + specify + specifying + specimen + specimens + specious + speciously + speck + speckle + speckled + speckles + speckling + specks + specs + spectacle + spectacled + spectacles + spectacular + spectacularly + spectator + spectators + specter + specters + Spector + spectra + spectral + spectrally + spectre + spectrogram + spectrograms + spectrograph + spectrographic + spectrography + spectrometer + spectrophotometer + spectrophotometry + spectroscope + spectroscopic + spectroscopy + spectrum + spectrums + specular + speculate + speculated + speculates + speculating + speculation + speculations + speculative + speculator + speculators + sped + speech + speeches + speechified + speechify + speechifying + speechless + speechlessly + speechlessness + speed + speedboat + speeded + speeder + speeders + speedier + speediest + speedily + speeding + speedometer + speeds + speedup + speedups + speedway + speedwell + speedy + speleology + spell + spellbind + spellbinder + spellbinding + spellbound + spelldown + spelled + speller + spellers + spelling + spellings + spells + spelt + spelunker + Spencer + spencer + Spencerian + spend + spender + spenders + spending + spends + spendthrift + spent + sperm + spermaceti + spermatic + spermatophyte + spermatozoa + spermatozoon + Sperry + spew + spews + sphagnum + sphalerite + sphere + sphered + spheres + spheric + spherical + spherically + sphering + spheroid + spheroidal + spherule + sphincter + sphinges + sphinx + sphinxes + Spica + spice + spicebush + spiced + spices + spicier + spiciest + spicily + spiciness + spicing + spiculate + spicule + spicy + spider + spiders + spiderwort + spidery + spied + Spiegel + spiel + spieler + spies + spigot + spike + spiked + spikenard + spikes + spiking + spiky + spill + spilled + spiller + spilling + spills + spillway + spilt + spin + spinach + spinal + spinally + spindle + spindled + spindlier + spindliest + spindling + spindly + spine + spineless + spinelessly + spines + spinet + spinier + spiniest + spininess + spinnaker + spinner + spinneret + spinners + spinning + spinodal + spinoff + spins + spinster + spinsterhood + spiny + spiracle + spiraea + spiral + spiraled + spiraling + spiralled + spiralling + spirally + spire + spirea + spired + spires + spiring + spirit + spirited + spiritedly + spiriting + spiritless + spirits + spiritual + spiritualism + spiritualist + spiritualistic + spiritualities + spirituality + spiritualize + spiritualized + spiritualizing + spiritually + spirituals + spirituous + Spiro + spirochete + spit + spite + spited + spiteful + spitefully + spitefulness + spites + spitfire + spiting + spits + spitted + spitting + spittle + spittoon + spitz + spl + splash + splashdown + splashed + splashes + splashier + splashiest + splashing + splashy + splat + splatter + splay + splayfoot + spleen + spleenful + spleenish + spleenwort + splendid + splendidly + splendor + splendorous + splendour + splendrous + splenetic + splice + spliced + splicer + splicers + splices + splicing + splicings + spline + splines + splint + splinter + splintered + splinters + splintery + split + splits + splitter + splitters + splitting + splotch + splotchier + splotchiest + splotchy + splurge + splurged + splurging + splutter + spoil + spoilage + spoiled + spoiler + spoilers + spoiling + spoils + spoilsport + spoilt + Spokane + spoke + spoked + spoken + spokes + spokesman + spokesmen + spokesperson + spokeswoman + spokeswomen + spoliation + sponge + spongecake + sponged + sponger + spongers + sponges + spongier + spongiest + sponging + spongy + sponsor + sponsored + sponsoring + sponsors + sponsorship + spontaneities + spontaneity + spontaneous + spontaneously + spoof + spook + spookier + spookiest + spookiness + spooky + spool + spooled + spooler + spoolers + spooling + spools + spoon + spoonbill + spooned + spoonerism + spoonful + spooning + spoons + spoor + sporadic + sporadically + sporangigia + sporangium + spore + spored + spores + sporing + sport + sported + sportier + sportiest + sportiness + sporting + sportingly + sportive + sportively + sportiveness + sports + sportscast + sportscaster + sportsman + sportsmanlike + sportsmanship + sportsmen + sportswear + sportswoman + sportswomen + sportswriter + sportswriting + sporty + spot + spotless + spotlessly + spotlessness + spotlight + spots + spotted + spotter + spotters + spottier + spottiest + spottily + spottiness + spotting + spotty + spouse + spouses + spout + spouted + spouting + spouts + spp + Sprague + sprain + sprang + sprat + sprawl + sprawled + sprawling + sprawls + spray + sprayed + sprayer + spraying + sprays + spread + spreader + spreaders + spreading + spreadings + spreads + spreadsheet + spree + sprees + sprier + spriest + sprig + sprightlier + sprightliest + sprightliness + sprightly + sprigs + spring + springboard + springbok + springboks + springbuck + springe + springer + springers + Springfield + springier + springiest + springiness + springing + springs + springtail + springtime + springy + sprinkle + sprinkled + sprinkler + sprinklers + sprinkles + sprinkling + sprint + sprinted + sprinter + sprinters + sprinting + sprints + sprit + sprite + sprocket + Sproul + sprout + sprouted + sprouting + sprouts + spruce + spruced + sprucely + spruceness + sprucer + sprucest + sprucing + sprue + sprung + spry + spryer + spryest + spryly + spryness + spud + spudded + spudding + spume + spumed + spuming + spumoni + spun + spunch + spunk + spunkier + spunkiest + spunkily + spunkiness + spunky + spur + spurge + spurious + spuriously + spurluous + spurn + spurned + spurner + spurning + spurns + spurred + spurs + spurt + spurted + spurting + spurts + sputa + sputnik + sputter + sputtered + sputum + spy + spyglass + spying + sqrt + squab + squabble + squabbled + squabbles + squabbling + squad + squadron + squadrons + squads + squalid + squalidness + squall + squaller + squalls + squally + squalor + squamous + squander + square + squared + squarely + squareness + squarer + squares + squarest + squaring + squarish + squash + squashberry + squashed + squashier + squashiest + squashiness + squashing + squashy + squat + squats + squatted + squatter + squatting + squatty + squaw + squawbush + squawk + squawked + squawker + squawking + squawks + squawroot + squeak + squeaked + squeaker + squeakier + squeakiest + squeakily + squeaking + squeaks + squeaky + squeal + squealed + squealer + squealing + squeals + squeamish + squeamishness + squeegee + squeegeed + squeegeeing + squeeze + squeezed + squeezer + squeezes + squeezing + squelch + squelcher + squib + Squibb + squid + squiggle + squiggled + squiggling + squill + squinch + squint + squinted + squinting + squire + squired + squires + squiring + squirm + squirmed + squirmier + squirmiest + squirms + squirmy + squirrel + squirreled + squirreling + squirrelled + squirrelling + squirrels + squirrelsstagnate + squirt + squish + squishy + Sri + SSE + ssort + ssp + SST + sstor + SSW + St + stab + stabbed + stabbing + stabile + stabilities + stability + stabilization + stabilize + stabilized + stabilizer + stabilizers + stabilizes + stabilizing + stable + stabled + stableman + stablemen + stabler + stables + stablest + stabling + stably + stabs + staccato + stack + stacked + stacker + stacking + stacks + stackup + Stacy + stadia + stadium + staff + staffed + staffer + staffers + staffing + Stafford + staffs + stag + stage + stagecoach + stagecoaches + staged + stagehand + stager + stagers + stages + stagger + staggered + staggering + staggers + staging + stagnancy + stagnant + stagnantly + stagnate + stagnated + stagnating + stagnation + stags + stagy + Stahl + staid + staidly + staidness + stain + stained + staining + stainless + stains + stair + staircase + staircases + stairs + stairway + stairways + stairwell + stake + staked + stakes + staking + stalactite + stalagmite + stale + staled + stalemate + stalemated + stalemating + staleness + staler + stalest + Staley + Stalin + staling + stalk + stalked + stalking + stall + stalled + stalling + stallings + stallion + stalls + stalwart + stalwartly + stamen + stamens + Stamford + stamina + staminate + stammer + stammered + stammerer + stammering + stammers + stamp + stamped + stampede + stampeded + stampedes + stampeding + stamper + stampers + stamping + stamps + Stan + stance + stanch + stanchest + stanchion + stand + standard + standardised + standardization + standardize + standardized + standardizes + standardizing + standardly + standards + standback + standby + standbybys + standee + stander + standeth + standing + standings + Standish + standoff + standoffish + standout + standpoint + standpoints + stands + standstill + stanek + Stanford + stanford + Stanhope + stank + Stanley + stannic + stannous + Stanton + stanza + stanzaic + stanzas + staph + staphylococci + staphylococcus + staple + stapled + stapler + staples + Stapleton + stapling + star + starboard + starch + starched + starchy + stardom + stare + stared + starer + stares + starfish + stargaze + stargazed + stargazer + stargazing + staring + stark + Starkey + starkly + starkness + starless + starlet + starlight + starling + starlit + Starr + starred + starrier + starriest + starring + starry + stars + start + started + starter + starters + starting + startingno + startle + startled + startles + startling + starts + startup + startups + starvation + starve + starved + starveling + starves + starving + stash + stasis + state + stated + statehood + statelier + stateliest + stateliness + stately + statement + statements + Staten + stater + stateroom + states + stateside + statesman + statesmanlike + statesmanly + statesmanship + statesmen + statewide + static + statical + statically + statics + stating + station + stationarity + stationary + stationed + stationer + stationery + stationing + stationmaster + stations + statistic + statistical + statistically + statistician + statisticians + statistics + Statler + stator + statuaries + statuary + statue + statues + statuesque + statuesquely + statuesqueness + statuette + stature + status + statuses + statute + statutes + statutorily + statutoriness + statutory + Stauffer + staunch + staunchest + staunchly + staunchness + Staunton + stave + staved + staves + staving + stay + stayed + staying + stays + stddmp + stead + steadfast + steadfastly + steadfastness + steadied + steadier + steadies + steadiest + steadily + steadiness + steady + steadying + steak + steaks + steal + stealer + stealing + steals + stealth + stealthier + stealthiest + stealthily + stealthiness + stealthy + steam + steamboat + steamboats + steamed + steamer + steamers + steaming + steamroller + steams + steamship + steamships + steamy + stearate + stearic + Stearns + steatite + stebbins + steed + steel + Steele + steeled + steelers + steelhead + steelier + steeliest + steeliness + steeling + steelmake + steelmaker + steels + steely + steelyard + Steen + steenbok + steenboks + steep + steeped + steepen + steeper + steepest + steeping + steeple + steeplebush + steeplechase + steeplejack + steeples + steeply + steepness + steeps + steer + steerable + steerage + steered + steering + steers + steersman + steersmen + steeve + Stefan + Stegosaurus + stein + Steinberg + steinbok + steinboks + Steiner + stella + stellar + stellate + stem + stemmed + stemming + stems + stemware + stench + stenches + stencil + stenciled + stenciling + stencilled + stencilling + stencils + stenographer + stenographers + stenographic + stenographically + stenography + stenotype + stentorian + step + stepbrother + stepchild + stepchildren + Stephanie + stephanotis + Stephen + Stephenson + stepladder + stepmother + stepmothers + stepparent + steppe + stepped + stepper + stepping + steppingstone + steprelation + steps + stepsister + stepson + stepwise + steradian + stere + stereo + stereography + stereophonic + stereophonically + stereos + stereoscope + stereoscopic + stereoscopy + stereotype + stereotyped + stereotypes + stereotypic + stereotypical + stereotypically + stereotyping + sterile + sterility + sterilization + sterilizations + sterilize + sterilized + sterilizer + sterilizes + sterilizing + sterling + stern + sterna + sternal + Sternberg + sternly + sternness + Sterno + sterns + sternum + sternums + steroid + sterol + stertorous + stet + stethoscope + Stetson + stetted + stetting + Steuben + Steve + stevedore + Steven + Stevenson + stew + steward + stewardess + stewards + stewardship + Stewart + stewed + stews + stick + stickel + sticken + sticker + stickers + stickier + stickiest + stickily + stickiness + sticking + stickle + stickleback + stickler + stickpin + sticks + sticktight + stickup + sticky + stied + sties + stiff + stiffen + stiffener + stiffens + stiffer + stiffest + stiffly + stiffness + stiffs + stifle + stifled + stifles + stifling + stigma + stigmas + stigmata + stigmatic + stigmatization + stigmatize + stigmatized + stigmatizing + stile + stiles + stiletto + stilettoes + stilettos + still + stillbirth + stillborn + stilled + stiller + stillest + stillier + stilliest + stilling + stillness + stills + stillwater + stilly + stilt + stilted + stiltedly + stiltedness + stilts + stimulant + stimulants + stimulate + stimulated + stimulater + stimulates + stimulating + stimulation + stimulations + stimulative + stimulator + stimulatory + stimuli + stimulus + sting + stinger + stingier + stingiest + stingily + stinginess + stinging + stingray + stings + stingy + stink + stinker + stinkers + stinking + stinkpot + stinks + stinky + stint + stinter + stintingly + stipend + stipends + stipple + stippled + stippling + stipular + stipulate + stipulated + stipulates + stipulating + stipulation + stipulations + stipule + stir + Stirling + stirred + stirrer + stirrers + stirring + stirringly + stirrings + stirrup + stirs + stitch + stitched + stitcher + stitchery + stitches + stitching + stm + stoat + stochastic + stochastically + stock + stockade + stockaded + stockades + stockading + stockbroker + stocked + stocker + stockers + stockholder + stockholders + Stockholm + stockholm + stockier + stockiest + stockily + stockiness + stocking + stockings + stockman + stockmen + stockpile + stockpiled + stockpiling + stockroom + stocks + Stockton + stocky + stockyard + stodgier + stodgiest + stodgily + stodginess + stodgy + stogie + stogies + stogy + stoic + stoical + stoically + stoichiometry + stoicism + stoke + stoked + stoker + Stokes + stoking + stole + stolen + stoles + stolid + stolidity + stolidly + stolidness + stomach + stomachache + stomachal + stomached + stomacher + stomaches + stomaching + stomachs + stomp + stone + stonecrop + stonecutter + stonecutting + stoned + Stonehenge + stonemason + stonemasonry + stonemasons + stones + stonewall + stoneware + stonework + stonewort + stoney + stonier + stoniest + stonily + stoniness + stoning + stony + stood + stooge + stooged + stooging + stool + stoolie + stools + stoop + stooped + stooping + stoops + stop + stopband + stopcock + stopcocks + stopgap + stoplight + stopover + stoppable + stoppage + stopped + stopper + stoppers + stopping + stops + stopwatch + storage + storages + store + stored + storefront + storehouse + storehouses + storekeep + storekeeper + storeroom + stores + Storey + storeys + storied + stories + storing + stork + storks + storm + stormbound + stormed + stormier + stormiest + stormily + storminess + storming + storms + stormy + story + storyboard + storybook + storyteller + storytelling + stoup + stout + stouter + stoutest + stouthearted + stoutheartedly + stoutheartedness + stoutish + stoutly + stoutness + stove + stovepipe + stoves + stow + stowage + stowaway + stowed + strabismic + strabismus + straddle + straddled + straddler + straddling + strafe + strafed + strafing + straggle + straggled + straggler + stragglers + straggles + straggling + straggly + straight + straightaway + straighten + straightened + straightener + straightens + straighter + straightest + straightforward + straightforwardly + straightforwardness + straightforwards + straightfoward + straightness + straightway + strain + strained + strainer + strainers + straining + strains + strait + straiten + straitjacket + straits + strand + stranded + stranding + strands + strange + strangely + strangeness + stranger + strangers + strangest + strangle + strangled + stranglehold + strangler + stranglers + strangles + strangling + stranglings + strangulate + strangulated + strangulating + strangulation + strangulations + strap + strapless + strapped + straps + strata + stratagem + stratagems + strategic + strategical + strategically + strategies + strategist + strategists + strategy + Stratford + strati + stratification + stratifications + stratified + stratifies + stratify + stratifying + stratosphere + stratospheric + Stratton + stratum + stratums + stratus + Strauss + straw + strawberries + strawberry + strawflower + straws + stray + strayed + strays + streak + streaked + streaker + streaks + streaky + stream + streamed + streamer + streamers + streaming + streamline + streamlined + streamliner + streamlines + streamlining + streams + streamside + street + streetcar + streetcars + streeters + streets + streetwalker + streetwise + strength + strengthed + strengthen + strengthened + strengthener + strengthening + strengthens + strengths + strenuous + strenuously + strenuousness + strep + streptococci + streptococcus + streptomycin + stress + stressed + stresses + stressful + stressing + stretch + stretchable + stretched + stretcher + stretchers + stretches + stretching + strew + strewed + strewing + strewn + strews + striate + striated + striating + striation + stricken + Strickland + strict + stricter + strictest + strictly + strictness + stricture + strictures + stridden + stride + stridence + stridency + strident + stridently + strider + strides + striding + stridulating + stridulation + strife + strike + strikebreak + strikebreaker + strikebreaking + striker + strikers + strikes + striking + strikingly + string + stringboard + stringed + stringencies + stringency + stringent + stringently + stringer + stringers + stringier + stringiest + stringiness + stringing + strings + stringy + strip + stripe + striped + stripes + striping + stripling + stripped + stripper + strippers + stripping + strips + striptease + stripteaser + strive + strived + striven + strives + striving + strivings + strobe + strobed + strobes + stroboscopic + strode + stroke + stroked + stroker + strokers + strokes + stroking + stroll + strolled + stroller + strolling + strolls + Strom + Stromberg + strong + strongbox + stronger + strongest + stronghold + strongly + strongness + strongroom + strontium + strop + strophe + stropped + strove + struck + struct + structural + structurally + structure + structured + structureless + structurer + structures + structuring + strudel + struggle + struggled + struggler + struggles + struggling + strum + strummed + strummer + strumpet + strung + strut + struts + strutted + strutter + strutting + struttingly + strychnine + Stuart + stub + stubbed + stubbier + stubbiest + stubbiness + stubble + stubborn + stubbornly + stubbornness + stubby + stubs + stucco + stuccoed + stuccoes + stuccoing + stuccos + stuck + stud + studded + Studebaker + student + students + studhorse + studied + studies + studio + studios + studious + studiously + studiousness + studs + study + studying + stuff + stuffed + stuffier + stuffiest + stuffily + stuffiness + stuffing + stuffs + stuffy + stultification + stultified + stultify + stultifying + stumble + stumbled + stumbler + stumbles + stumbling + stump + stumpage + stumped + stumping + stumps + stumpy + stun + stung + stunk + stunned + stunning + stunningly + stunt + stunts + stupefaction + stupefied + stupefy + stupefying + stupendous + stupendously + stupid + stupider + stupidest + stupidities + stupidity + stupidly + stupidness + stupor + Sturbridge + sturdier + sturdiest + sturdily + sturdiness + sturdy + sturgeon + Sturm + stutter + stutterer + Stuttgart + Stuyvesant + sty + stye + Stygian + stying + style + styled + styler + stylers + styles + styli + styling + stylish + stylishly + stylishness + stylist + stylistic + stylistically + stylites + stylize + stylized + stylizing + stylus + styluses + stymie + stymied + stymieing + stymying + styptic + styrene + Styrofoam + Styx + suave + suavely + suaveness + suaver + suavest + suavity + sub + subadult + subaltern + subatomic + subbasement + subbed + subbranch + subchannel + subchannels + subclass + subclasses + subcommittee + subcommittees + subcompact + subcomponent + subcomponents + subcomputation + subcomputations + subconscious + subconsciously + subconsciousness + subcontinent + subcontract + subcontractor + subcript + subculture + subcultures + subcutaneous + subcutaneously + subcycle + subcycles + subdeacon + subdeb + subdirectories + subdirectory + subdisciplines + subdivide + subdivided + subdivides + subdividing + subdivision + subdivisions + subdomains + subdue + subdued + subdues + subduing + subet + subexpression + subexpressions + subfield + subfields + subfigures + subfile + subfiles + subgoal + subgoals + subgraph + subgraphs + subgroup + subgroups + subgum + subhead + subheading + subheadings + subhuman + subinterval + subintervals + subject + subjected + subjecting + subjection + subjective + subjectively + subjectivity + subjects + subjoin + subjugate + subjugated + subjugating + subjugation + subjugator + subjunctive + sublanguage + sublanguages + sublattices + sublayer + sublayers + sublease + subleased + subleasing + sublessee + sublessor + sublet + subletting + sublimate + sublimated + sublimating + sublimation + sublimations + sublime + sublimed + sublimely + sublimeness + subliminal + subliming + sublimity + sublist + sublists + submarginal + submarine + submariner + submariners + submarines + submatrix + submaxillary + submerge + submerged + submergence + submerges + submerging + submerse + submersed + submersible + submersing + submersion + submicroscopic + submission + submissions + submissive + submissively + submissiveness + submit + submits + submittal + submitted + submitting + submode + submodes + submodule + submodules + submultiplexed + subnanosecond + subnet + subnets + subnetwork + subnetworks + subnode + subnodes + subnormal + subnormality + suboptimal + suboptimally + suboptimization + suborbital + subordinate + subordinated + subordinately + subordinates + subordinating + subordination + suborn + subornation + subparameter + subparameters + subpart + subparts + subpena + subphases + subplot + subpoena + subpoenaed + subpoenaing + subpool + subpools + subpopulations + subproblem + subproblems + subprocess + subprocesses + subprogram + subprograms + subproject + subproof + subproofs + subqueues + subrange + subranges + subresults + subrogation + subroutine + subroutines + subroutining + subs + subschema + subschemas + subscribe + subscribed + subscriber + subscribers + subscribes + subscribing + subscript + subscripted + subscripting + subscription + subscriptions + subscripts + subsection + subsections + subsegment + subsegments + subsequence + subsequences + subsequent + subsequently + subservience + subservient + subserviently + subset + subsets + subsetting + subside + subsided + subsidence + subsides + subsidiaries + subsidiary + subsidies + subsiding + subsidization + subsidize + subsidized + subsidizer + subsidizes + subsidizing + subsidy + subsist + subsisted + subsistence + subsistent + subsisting + subsists + subslot + subslots + subsoil + subsonic + subspace + subspaces + substages + substance + substances + substandard + substanially + substantial + substantiality + substantially + substantiate + substantiated + substantiates + substantiating + substantiation + substantiations + substantival + substantive + substantively + substantivity + substation + substations + substituent + substitutability + substitutable + substitute + substituted + substitutes + substituting + substitution + substitutionary + substitutions + substrata + substrate + substrates + substratum + substratums + substring + substrings + substructure + substructures + subsume + subsumed + subsumes + subsuming + subsurface + subsystem + subsystems + subtask + subtasking + subtasks + subteen + subtenant + subterfuge + subterranean + subtitle + subtitled + subtitles + subtitling + subtle + subtleness + subtler + subtlest + subtleties + subtlety + subtly + subtotal + subtotalled + subtotalling + subtotals + subtract + subtracted + subtracter + subtracting + subtraction + subtractions + subtractive + subtractor + subtractors + subtracts + subtrahend + subtrahends + subtree + subtrees + subtropical + subtropics + subtype + subtypes + subunit + subunits + suburb + suburban + suburbanite + suburbanize + suburbanized + suburbanizing + suburbia + suburbs + subvention + subversion + subversions + subversive + subversively + subversiveness + subvert + subverted + subverter + subverting + subverts + subway + subways + succeed + succeeded + succeeding + succeeds + succesful + succesive + success + successes + successful + successfully + successfulness + succession + successions + successive + successively + successor + successors + succinct + succinctly + succinctness + succor + succotash + succour + succubus + succulence + succulency + succulent + succulently + succumb + succumbed + succumbing + succumbs + such + suchlike + suck + sucked + sucker + suckers + sucking + suckle + suckled + suckling + sucks + sucrose + suction + sud + Sudan + sudan + Sudanese + sudden + suddenly + suddenness + suds + sudsing + sudsy + sue + sued + suede + suer + sues + suet + suety + suey + Suez + suffer + sufferable + sufferance + suffered + sufferer + sufferers + suffering + sufferings + suffers + suffice + sufficed + suffices + sufficiency + sufficient + sufficiently + sufficing + suffix + suffixed + suffixer + suffixes + suffixing + suffocate + suffocated + suffocates + suffocating + suffocatingly + suffocation + Suffolk + suffragan + suffrage + suffragette + suffragist + suffuse + suffused + suffusing + suffusion + sugar + sugarcoat + sugared + sugaring + sugarings + sugarlike + sugarplum + sugarplums + sugars + sugary + suggest + suggestable + suggested + suggester + suggestibility + suggestible + suggesting + suggestion + suggestions + suggestive + suggestively + suggestiveness + suggests + suicidal + suicidally + suicide + suicides + suing + suit + suitability + suitable + suitableness + suitably + suitcase + suitcases + suite + suited + suiters + suites + suiting + suitor + suitors + suits + sukiyaki + sulfa + sulfanilamide + sulfate + sulfated + sulfating + sulfide + sulfite + sulfonamide + sulfur + sulfuric + sulfurous + sulk + sulked + sulkier + sulkies + sulkiest + sulkily + sulkiness + sulking + sulks + sulky + sullen + sullenly + sullenness + sullied + Sullivan + sully + sullying + sulphate + sulphur + sulphured + sulphuric + sultan + sultana + sultanate + sultaness + sultans + sultrier + sultriest + sultriness + sultry + sum + sumac + sumach + Sumatra + Sumeria + summand + summands + summaries + summarily + summarised + summarization + summarizations + summarize + summarized + summarizes + summarizing + summary + summate + summation + summations + summed + summer + summerhouse + summers + summertime + summery + summing + summit + summitry + summon + summoned + summoner + summoners + summoning + summons + summonses + Sumner + sump + sumptuous + sumptuously + sums + Sumter + sun + sunbathe + sunbathed + sunbather + sunbathing + sunbeam + sunbeams + sunbonnet + sunburn + sunburned + sunburning + sunburnt + sunburst + sundae + Sunday + sunday + sundays + sunder + sundew + sundial + sundown + sundries + sundry + sunfish + sunflower + sung + sunglass + sunglasses + sunk + sunken + sunlamp + sunless + sunlight + sunlit + sunned + sunnier + sunniest + sunnily + sunniness + sunning + sunny + Sunnyvale + sunrise + suns + sunscreen + sunset + sunshade + sunshine + sunshiny + sunspot + sunspots + sunstroke + sunstruck + suntan + suntanned + suntanning + sunup + SUNY + sup + super + superabundance + superabundant + superabundantly + superannuate + superannuated + superb + superblock + superbly + superbness + supercharge + supercharged + supercharging + supercilious + superciliously + supercomputer + supercomputers + superego + superegos + supererogation + supererogatory + superficial + superficialities + superficiality + superficially + superfluities + superfluity + superfluous + superfluously + supergene + supergroup + supergroups + superheat + superhighway + superhuman + superhumanly + superimpose + superimposed + superimposes + superimposing + superintend + superintendant + superintendence + superintendent + superintendents + superior + superiority + superiors + superlative + superlatively + superlatives + superlunary + superman + supermarket + supermarkets + supermen + supermini + superminis + supernal + supernally + supernatant + supernatural + supernaturalism + supernaturalist + supernaturally + supernova + supernovae + supernovas + supernumeraries + supernumerary + superpose + superposed + superposes + superposing + superposition + superpower + supersaturate + supersaturated + supersaturating + supersaturation + superscribe + superscribed + superscribing + superscript + superscripted + superscripting + superscription + superscripts + supersede + superseded + supersedence + supersedes + superseding + supersensitive + superset + supersets + supersonic + supersonically + supersonics + superstar + superstition + superstitions + superstitious + superstitiously + superstructure + superuser + supervene + supervened + supervening + supervention + supervise + supervised + supervises + supervising + supervision + supervisor + supervisors + supervisory + supine + supinely + supped + supper + supperless + suppers + supplant + supplanted + supplanter + supplanting + supplants + supple + supplely + supplement + supplemental + supplementary + supplementation + supplemented + supplementing + supplements + suppleness + suppliant + supplicant + supplicate + supplicated + supplicating + supplication + supplicator + supplicatory + supplied + supplier + suppliers + supplies + supply + supplying + support + supportable + supported + supporter + supporters + supporting + supportingly + supportive + supportively + supports + supposable + suppose + supposed + supposedly + supposes + supposing + supposition + suppositional + suppositionally + suppositions + suppositories + suppository + suppresion + suppress + suppressed + suppressen + suppresses + suppressible + suppressing + suppression + suppressor + suppressors + suppurate + suppurated + suppurating + suppuration + suppurative + supra + supranational + suprarenal + supremacies + supremacist + supremacy + supreme + supremely + supremities + supremity + supressed + suprising + surah + surcease + surcharge + surcharged + surcharging + surcingle + surcoat + sure + surely + sureness + surer + surest + sureties + surety + suretyship + surf + surface + surfaced + surfaceness + surfaces + surfacing + surfactant + surfboard + surfboarder + surfeit + surfer + surfing + surge + surged + surgeon + surgeons + surgeries + surgery + surges + surgical + surgically + surging + surinam + surjection + surjective + surlier + surliest + surlily + surliness + surly + surmise + surmised + surmises + surmising + surmount + surmountable + surmounted + surmounting + surmounts + surname + surnamed + surnames + surnaming + surpass + surpassed + surpasses + surpassing + surpassingly + surplice + surpliced + surplus + surplusage + surpluses + surprise + surprised + surprises + surprising + surprisingly + surreal + surrealism + surrealist + surrealistic + surrealistically + surrender + surrendered + surrendering + surrenders + surreptitious + surreptitiously + surrey + surreys + surrogate + surrogated + surrogates + surrogating + surround + surrounded + surrounding + surroundings + surrounds + surtax + surtout + surveillance + surveillant + survey + surveyed + surveying + surveyor + surveyors + surveys + survival + survivals + survive + survived + survives + surviving + survivor + survivors + survivorship + Sus + Susan + Susanne + susceptance + susceptibilities + susceptibility + susceptible + susceptibly + sushi + Susie + suspect + suspected + suspecting + suspects + suspend + suspended + suspender + suspenders + suspending + suspends + suspense + suspenses + suspension + suspensions + suspensive + suspensor + suspensories + suspensory + suspicion + suspicions + suspicious + suspiciously + suspiciousness + Sussex + sustain + sustainable + sustained + sustaining + sustains + sustenance + Sutherland + sutler + Sutton + suture + sutured + sutures + suturing + Suzanne + suzerain + suzerainties + suzerainty + Suzuki + svc + svelte + SW + swab + swabbed + swabbing + swabby + swaddle + swaddled + swaddling + swag + swage + swaged + swagged + swagger + swaggered + swaggering + swagging + swaging + Swahili + swain + swains + swallow + swallowed + swallowing + swallows + swallowtail + swam + swami + swamis + swamp + swamped + swampier + swampiest + swampiness + swamping + swampland + swamps + swampy + swan + swank + swankier + swankiest + swanky + swanlike + swans + Swanson + swap + swapped + swapping + swaps + sward + swarm + swarmed + swarming + swarms + swart + swarthier + swarthiest + swarthiness + Swarthmore + Swarthout + swarthy + swash + swashbuckler + swashbuckling + swastika + swat + swatch + swath + swathe + swathed + swathing + swatted + swatter + sway + swayback + swaybacked + swayed + swaying + Swaziland + swear + swearer + swearing + swears + swearword + sweat + sweatband + sweated + sweater + sweaters + sweatier + sweatiest + sweating + sweats + sweatshirt + sweatshop + sweaty + Swede + swede + Sweden + sweden + Swedish + swedish + Sweeney + sweep + sweeper + sweepers + sweeping + sweepingly + sweepings + sweeps + sweepstake + sweepstakes + sweet + sweetbread + sweetbreads + sweetbriar + sweetbrier + sweeten + sweetened + sweetener + sweeteners + sweetening + sweetenings + sweetens + sweeter + sweetest + sweetheart + sweethearts + sweetish + sweetly + sweetmeat + sweetness + sweets + swell + swelled + swellheaded + swellheadedness + swelling + swellings + swells + swelt + swelter + sweltering + sweltrier + sweltriest + sweltry + Swenson + swept + sweptback + swerve + swerved + swerves + swerving + swift + swifter + swiftest + swiftly + swiftness + swig + swigged + swigger + swigging + swill + swim + swimmer + swimmers + swimming + swimmingly + swims + swimsuit + swindle + swindled + swindler + swindling + swine + swing + swingable + swinger + swingers + swinging + swings + swingy + swinish + swinishly + swipe + swiped + swiping + swirl + swirled + swirling + swirly + swish + swished + swishy + swiss + switch + switchback + switchblade + switchboard + switchboards + switched + switcher + switchers + switches + switchgear + switching + switchings + switchman + switchmen + Switzer + Switzerland + switzerland + swivel + swiveled + swiveling + swivelled + swivelling + swizzle + swob + swobbed + swobbing + swollen + swoon + swoop + swooped + swooping + swoops + swop + swopped + swopping + sword + swordfish + swordgrass + swordplay + swords + swordsman + swordsmanship + swordsmen + swordtail + swore + sworn + swum + swung + sybarite + sybaritic + Sybil + sycamore + sycophancies + sycophancy + sycophant + sycophantic + Sydney + sydney + syed + syenite + syftn + Sykes + sylistically + syllabi + syllabic + syllabicate + syllabicated + syllabicating + syllabication + syllabification + syllabified + syllabify + syllabifying + syllable + syllables + syllabus + syllabuses + syllogism + syllogisms + syllogistic + Sylow + sylph + sylphlike + sylvan + Sylvania + Sylvester + Sylvia + sym + symbiosis + symbiotic + symbol + symbolic + symbolical + symbolically + symbolics + symbolism + symbolist + symbolization + symbolize + symbolized + symbolizes + symbolizing + symbols + symmetric + symmetrical + symmetrically + symmetries + symmetry + sympathetic + sympathetically + sympathies + sympathize + sympathized + sympathizer + sympathizers + sympathizes + sympathizing + sympathizingly + sympathy + sympatric + symphonic + symphonies + symphony + symphysis + symplectic + symposia + symposisia + symposisiums + symposium + symposiums + symptom + symptomatic + symptoms + symtab + syn + synagogue + synapse + synapses + synaptic + sync + synch + synchronisation + synchronism + synchronizable + synchronization + synchronize + synchronized + synchronizer + synchronizers + synchronizes + synchronizing + synchronous + synchronously + synchrony + synchrotron + syncline + syncopate + syncopated + syncopating + syncopation + syndic + syndicate + syndicated + syndicates + syndicating + syndication + syndrome + syndromes + synergism + synergisms + synergistic + synergy + Synge + synod + synonomous + synonomously + synonym + synonymies + synonymous + synonymously + synonyms + synonymy + synopses + synopsis + synopsize + synopsized + synopsizing + synoptic + syntactially + syntactic + syntactical + syntactically + syntax + syntaxes + syntheses + synthesis + synthesize + synthesized + synthesizer + synthesizers + synthesizes + synthesizing + synthetic + synthetically + synthetics + syphilis + syphilitic + syphoning + Syracuse + Syria + syringa + syringe + syringes + syrinx + syrinxes + syrringed + syrringing + syrup + syrupy + sysin + sysout + system + systematic + systematically + systematics + systematize + systematized + systematizes + systematizing + systemic + systemically + systemize + systemized + systemizing + systems + systemwide + systole + systolic + syzygy + Szilard + t + t's + TA + tab + tabanid + tabard + tabaret + tabasco + tabbed + tabbies + tabby + tabernacle + tabernacles + tabes + tabescent + tabla + tablature + table + tableau + tableaus + tableaux + tablecloth + tablecloths + tabled + tablehopped + tablehopping + tableland + tablemount + tables + tablespoon + tablespoonful + tablespoonfuls + tablespoons + tablet + tablets + tableware + tabling + tabloid + taboo + taboos + tabor + taboret + taborin + tabour + tabs + tabu + tabula + tabular + tabulate + tabulated + tabulates + tabulating + tabulation + tabulations + tabulator + tabulators + tacamahac + tacet + tach + tache + tachinid + tachisme + tachistoscope + tachometer + tachometers + tachometry + tachycardia + tachygraph + tachygraphy + tachylite + tachylyte + tachymeter + tachysterol + tacit + tacitly + taciturn + taciturnity + Tacitus + tack + tacked + tacker + tackier + tackiest + tackiness + tacking + tackle + tackled + tackler + tackles + tackling + tacks + tacky + taco + Tacoma + taconite + tacos + tact + tactful + tactfully + tactfulness + tactic + tactical + tactician + tactics + tactile + taction + tactless + tactlessly + tactlessness + tactual + tad + tadpole + tadpoles + tael + taenia + taeniacide + taeniasis + tafferel + taffeta + taffrail + taffy + taft + tag + tagged + tagger + tagging + tagmeme + tagmemics + tags + Tahiti + Tahoe + taiga + tail + tailboard + tailed + tailfan + tailgate + tailgated + tailgater + tailgating + tailing + taille + tailless + taillight + tailor + tailorbird + tailored + tailoring + tailors + tailpiece + tailpipe + tailrace + tails + tailsheet + tailspin + tailwind + taint + tainted + Taipei + Taiwan + take + taken + takeoff + takeover + taker + takers + takes + taking + takings + talc + talcked + talcking + talcum + tale + talebearer + talebearing + talent + talented + talents + tales + talisman + talismanic + talismans + talk + talkative + talkatively + talkativeness + talked + talker + talkers + talkie + talkier + talkiest + talking + talks + talky + tall + Tallahassee + taller + tallest + tallied + tallies + tallish + tallness + tallow + tallowy + tally + tallyho + tallyhos + tallying + Talmud + talon + talus + tam + tamable + tamale + tamarack + tamarin + tamarind + tambour + tambourine + tame + tameable + tamed + tamely + tameness + tamer + tames + tamest + taming + Tammany + tamp + Tampa + tamper + tampered + tamperer + tampering + tampers + tampon + tan + tanager + Tanaka + Tananarive + tanbark + tandem + tang + tangelo + tangelos + tangency + tangent + tangential + tangentially + tangents + tangerine + tangibility + tangible + tangibly + tangle + tangled + tangling + tango + tangoed + tangoing + tangos + tangy + tanh + tank + tankard + tanker + tankers + tankful + tankfuls + tanks + tanned + tanner + tanneries + tanners + tannery + tannest + tannin + tansies + tansy + tantalization + tantalize + tantalized + tantalizer + tantalizing + tantalizingly + tantalum + Tantalus + tantamount + tantawy + tantrum + tantrums + Tanya + Tanzania + tao + tap + tapa + tape + tapecopy + taped + tapedrives + tapeline + tapemarks + tapemove + taper + tapered + tapering + tapers + tapes + tapestried + tapestries + tapestry + tapestrying + tapeworm + taping + tapings + tapioca + tapir + tapis + tappa + tapped + tapper + tappers + tappet + tapping + taproom + taproot + taproots + taps + tar + tara + tarantara + tarantella + tarantula + tarantulae + tarantulas + Tarbell + tardier + tardiest + tardily + tardiness + tardy + tare + target + targeted + targeting + targets + tariff + tariffs + tarnish + tarnishable + tarnished + taro + tarot + tarpaper + tarpaulin + tarpon + tarragon + tarred + tarried + tarry + tarrying + Tarrytown + tarsal + tarsi + tarsus + tart + tartan + tartar + tartaric + Tartary + tartly + tartness + tarts + Tarzan + task + tasked + tasking + taskmaster + tasks + Tasmania + Tass + tassel + tasseled + tasseling + tassels + taste + tastebuds + tasted + tasteful + tastefully + tastefulness + tasteless + tastelessly + tastelessness + taster + tasters + tastes + tastier + tastiest + tastiness + tasting + tastings + tasty + tat + tate + tater + tatted + tatter + tatterdemalion + tattered + tattle + tattled + tattler + tattletale + tattling + tattoo + tattooed + tattooer + tattooing + tattoos + tatty + tau + taught + taunt + taunted + taunter + taunting + taunts + taupe + Taurus + taut + tautly + tautness + tautological + tautologically + tautologies + tautology + tavern + taverna + taverns + tawdrier + tawdriest + tawdrily + tawdriness + tawdry + tawnier + tawniest + tawny + tax + taxable + taxation + taxed + taxes + taxi + taxicab + taxicabs + taxidermist + taxidermy + taxied + taxiing + taximeter + taxing + taxir + taxis + taxiway + taxonomic + taxonomically + taxonomist + taxonomy + taxpayer + taxpayers + taxpaying + Taylor + tdr + tea + teaberries + teaberry + teacart + teach + teachable + teacher + teachers + teaches + teaching + teachings + teacup + teacupful + teacupfuls + teahouse + teak + teakettle + teakwood + teal + team + teamed + teaming + teammate + teams + teamster + teamwork + teapot + teapots + tear + teardrop + teared + tearful + tearfully + tearier + teariest + tearing + tearoom + tears + teary + teas + tease + teased + teasel + teaser + teases + teasing + teaspoon + teaspoonful + teaspoonfuls + teaspoons + teat + tech + technetium + technic + technical + technicalities + technicality + technically + technician + technicians + Technion + technique + techniques + technocracy + technocrat + technologic + technological + technologically + technologies + technologist + technologists + technology + tectonic + tecum + Ted + Teddy + tedious + tediously + tediousness + tedium + tee + teeing + teem + teemed + teeming + teems + teen + teenage + teenaged + teenager + teenagers + teenier + teeniest + teens + teensy + teeny + teepee + tees + teet + teeter + teeth + teethe + teethed + teethes + teething + teetotal + teetotaler + teetotaller + Teflon + teflon + Tegucigalpa + Teheran + Tehran + tektite + Tektronix + Tel + telecast + telecasted + telecaster + telecasting + telecommunicate + telecommunication + telecommunications + teleconference + Teledyne + Telefunken + telegram + telegrams + telegraph + telegraphed + telegrapher + telegraphers + telegraphic + telegraphing + telegraphs + telegraphy + telekinesis + telemeter + telemetry + teleological + teleologically + teleology + teleost + telepathic + telepathically + telepathist + telepathy + telephone + telephoned + telephoner + telephoners + telephones + telephonic + telephoning + telephony + telephoto + telephotograph + telephotographic + telephotography + teleprinter + teleprocessing + teleprompter + teleran + telescope + telescoped + telescopes + telescopic + telescoping + teletex + teletext + telethon + teletype + teletypes + teletypesetting + teletypewrite + teletypewriter + televise + televised + televises + televising + television + televisions + televisor + televisors + Telex + telex + tell + teller + tellers + telling + tellingly + tells + telltale + tellurium + telly + temblor + temerity + temp + temper + tempera + temperament + temperamental + temperamentally + temperaments + temperance + temperate + temperately + temperateness + temperature + temperatures + tempered + tempering + tempers + tempest + tempestuous + tempestuously + tempestuousness + tempi + template + templates + temple + temples + templet + Templeton + tempo + temporal + temporally + temporaries + temporarily + temporary + temporization + temporize + temporized + temporizer + temporizing + tempos + tempt + temptation + temptations + tempted + tempter + tempters + tempting + temptingly + temptress + tempts + tempura + ten + tenability + tenable + tenably + tenacious + tenaciously + tenacity + tenancies + tenancy + tenant + tenantless + tenantries + tenantry + tenants + tend + tended + tendencies + tendency + tender + tenderfeet + tenderfoot + tenderfoots + tenderhearted + tenderize + tenderized + tenderizer + tenderizing + tenderloin + tenderly + tenderness + tenders + tending + tendinous + tendon + tendril + tends + tenebrous + tenement + tenements + teneral + tenet + tenfold + Tenneco + Tennessee + tennessee + Tenney + tennis + Tennyson + tenon + tenor + tenors + tenpins + tens + tense + tensed + tensely + tenseness + tenser + tenses + tensest + tensile + tensility + tensing + tension + tensioning + tensions + tensor + tensors + tenspot + tent + tentacle + tentacled + tentacles + tentative + tentatively + tentativeness + tented + tenterhook + tenth + tenths + tenting + tents + tenuity + tenuous + tenuously + tenuousness + tenure + tenured + tepee + tepid + tepidity + tepidly + tepidness + tequila + teratogenic + teratology + terbium + tercel + tercentenaries + tercentenary + Teresa + term + termagant + terman + termed + terminable + terminal + terminalis + terminally + terminals + terminate + terminated + terminates + terminating + termination + terminations + terminator + terminators + terming + termini + terminologies + terminology + terminus + terminuses + termite + termolecular + terms + termwise + tern + ternary + terpene + terpenes + Terpsichore + terpsichorean + Terra + terrace + terraced + terraces + terracing + terrain + terrains + terramycin + terrapin + terrariia + terrariiums + terrarium + terrazzo + Terre + terrestrial + terrestrially + terrestrials + terrible + terribly + terrier + terriers + terries + terrific + terrifically + terrified + terrifies + terrify + terrifying + terrifyingly + territorality + territorial + territorialism + territoriality + territorially + territories + territory + terror + terrorism + terrorist + terroristic + terrorists + terrorize + terrorized + terrorizer + terrorizes + terrorizing + terrors + terry + terse + tersely + terseness + terser + tersest + tertiaries + tertiary + Tess + tessellate + tessellated + tessellating + test + testability + testable + testament + testamentary + testaments + testate + testator + testatrices + testatrix + tested + tester + testers + testes + testicle + testicles + testicular + testier + testiest + testified + testifier + testifiers + testifies + testify + testifying + testily + testimonial + testimonies + testimony + testiness + testing + testings + testis + testosterone + tests + testy + tetanus + tete + tether + tethered + tethering + tetrachloride + tetrafluoride + tetragonal + tetrahedra + tetrahedral + tetrahedron + tetrahedrons + tetralogies + tetralogy + tetrameter + tetramethylsilane + tetravalent + Teutonic + Texaco + Texan + Texas + texas + texases + text + textbook + textbooks + textile + textiles + Textron + texts + textual + textually + textural + texture + textured + textures + texturing + Thai + Thailand + thalami + thalamus + Thalia + thallium + thallophyte + than + thank + thanked + thankful + thankfully + thankfulness + thanking + thankless + thanklessly + thanklessness + thanks + thanksgiving + thanksgivings + that + that'd + that'll + thatch + thatches + thatching + thatchy + thats + thaw + thawed + thawing + thaws + Thayer + the + Thea + theater + theaters + theatre + theatres + theatric + theatrical + theatrically + theatricals + theberge + Thebes + thee + theft + thefts + their + theirs + theism + theist + theistic + Thelma + them + thematic + theme + themes + themselves + then + thence + thenceforth + thenceforward + theocracies + theocracy + theocratic + theodolite + Theodore + Theodosian + theologian + theological + theologically + theologies + theology + theorem + theorems + theoretic + theoretical + theoretically + theoretician + theoreticians + theories + theorist + theorists + theorization + theorizations + theorize + theorized + theorizer + theorizers + theorizes + theorizies + theorizing + theory + theosophic + theosophical + theosophies + theosophist + theosophy + therapeutic + therapeutical + therapeutically + therapeutics + therapies + therapist + therapists + therapy + there + there'd + there'll + thereabout + thereabouts + thereafter + thereat + thereby + therefor + therefore + therefrom + therein + thereinto + thereof + thereon + Theresa + thereto + theretofore + thereunder + thereunto + thereupon + therewith + therewithal + thermal + thermalization + thermalize + thermalized + thermalizes + thermalizing + thermally + thermionic + thermistor + thermo + thermodynamic + thermodynamics + Thermofax + thermometer + thermometers + thermos + thermostat + thermostatically + thermostats + thesauri + thesaurus + thesauruses + these + theses + Theseus + thesis + thespian + theta + Thetis + thew + thews + they + they'd + they'll + they're + they've + thiamin + thiamine + thick + thicken + thickener + thickening + thickens + thicker + thickest + thicket + thickets + thickish + thickly + thickness + thicknesses + thickset + thief + thieve + thieved + thieveries + thievery + thieves + thieving + thievish + thigh + thighbone + thighs + thimble + thimbleful + thimblefuls + thimbles + Thimbu + thin + thine + thing + things + think + thinkable + thinkably + thinker + thinkers + thinking + thinks + thinly + thinned + thinner + thinners + thinness + thinnest + thinnish + thiocyanate + thiopental + thiouracil + third + thirdly + thirds + thirst + thirsted + thirstier + thirstiest + thirstily + thirstiness + thirsts + thirsty + thirteen + thirteens + thirteenth + thirties + thirtieth + thirty + this + this'll + thistle + thistledown + thistly + thither + tho + thole + tholepin + Thomas + Thomistic + Thompson + Thomson + thong + Thor + thoraces + thoracic + thorax + thoraxes + Thoreau + thoriate + thorium + thorn + thornier + thorniest + thorns + Thornton + thorny + thorough + thoroughbred + thoroughfare + thoroughfares + thoroughgoing + thoroughly + thoroughness + Thorpe + Thorstein + those + thou + though + thought + thoughtful + thoughtfully + thoughtfulness + thoughtless + thoughtlessly + thoughtlessness + thoughts + thousand + thousandfold + thousands + thousandth + thraldom + thrall + thralldom + thrash + thrashed + thrasher + thrashes + thrashing + thread + threadbare + threaded + threader + threaders + threading + threadlike + threads + threat + threaten + threatened + threatening + threateningly + threatens + threats + three + threefold + threes + threescore + threesome + threonine + thresh + thresher + threshold + thresholds + threw + thrice + thrift + thriftier + thriftiest + thriftily + thriftiness + thriftless + thrifty + thrill + thrilled + thriller + thrillers + thrilling + thrillingly + thrills + thrips + thrive + thrived + thriven + thrives + thriving + thro + throat + throated + throatier + throatiest + throatiness + throats + throaty + throb + throbbed + throbbing + throbs + throe + throes + thrombin + thrombosis + throne + thrones + throng + throngs + throttle + throttled + throttles + throttling + through + throughout + throughput + throughway + throve + throw + throwaway + throwback + thrower + throwing + thrown + throws + thru + thrum + thrummed + thrush + thrust + thrusted + thruster + thrusters + thrusting + thrusts + Thruway + Thuban + thud + thudded + thuds + thug + thuggee + thugs + Thule + thulium + thumb + thumbed + thumbing + thumbnail + thumbs + thumbscrew + thumbtack + thump + thumped + thumper + thumping + thunder + thunderbolt + thunderbolts + thunderclap + thundercloud + thundered + thunderer + thunderers + thunderflower + thunderhead + thundering + thunderous + thunderously + thunders + thundershower + thundershowers + thunderstorm + thunderstorms + thunderstricken + thunderstruck + Thurman + Thursday + thursday + thursdays + thus + thusly + thwack + thwart + thwarted + thwarting + thwarts + thy + thyme + thymine + thymus + thyratron + thyroglobulin + thyroid + thyroidal + thyronine + thyrotoxic + thyroxine + thyself + ti + tiara + Tiber + tibet + Tibetan + tibia + tibiae + tibias + tic + tick + ticked + ticker + tickers + ticket + tickets + ticking + tickle + tickled + tickler + tickles + tickling + ticklish + ticks + ticktock + tics + tid + tidal + tidally + tidbit + tidbits + tiddledywinks + tiddlywinks + tide + tided + tideland + tides + tidewater + tidied + tidier + tidiest + tidily + tidiness + tiding + tidings + tidy + tidying + tie + tieback + tied + Tientsin + tier + tiers + ties + tiff + Tiffany + tift + tiger + tigereye + tigerish + tigers + tight + tighten + tightened + tightener + tighteners + tightening + tightenings + tightens + tighter + tightest + tightfisted + tightfitting + tightly + tightness + tightrope + tights + tightwad + tiglon + tigress + Tigris + til + tilde + tilden + tile + tiled + tiler + tiles + tiling + till + tillable + tillage + tilled + tiller + tillers + tilling + tills + tilt + tilted + tilth + tilting + tilts + Tim + timbal + timbale + timber + timbered + timbering + timberland + timberline + timbers + timbre + time + timed + timekeeper + timeless + timelessly + timelessness + timelier + timeliest + timeliness + timely + timeout + timeouts + timepiece + timer + timers + times + timescale + timeserver + timeserving + timeshare + timeshares + timesharing + timestamp + timestamps + timetable + timetables + timetrp + timeworn + Timex + timid + timidity + timidly + timidness + timing + timings + Timon + timorous + timorously + timorousnous + timothy + timpani + timpanist + tin + Tina + tinbergen + tincture + tinctured + tincturing + tinder + tinderbox + tine + tined + tinfoil + ting + tinge + tinged + tingeing + tingle + tingled + tingles + tinglier + tingliest + tingling + tingly + tinier + tiniest + tinily + tininess + tinker + tinkered + tinkerer + tinkering + tinkers + tinkle + tinkled + tinkles + tinklier + tinkliest + tinkling + tinkly + tinned + tinner + tinnier + tinniest + tinnily + tinniness + tinny + tins + tinsel + tinseled + tinseling + tinselly + tinsmith + tint + tinted + tinter + tinting + tintinnabulation + tints + tintype + tiny + Tioga + tip + tipoff + tipped + tipper + Tipperary + tippers + tipping + tipple + tippled + tippler + tippling + tippy + tips + tipsier + tipsiest + tipsily + tipster + tipsy + tiptoe + tiptoed + tiptoeing + tiptop + tirade + Tirana + tire + tired + tiredly + tiredness + tireless + tirelessly + tirelessness + tires + tiresome + tiresomely + tiresomeness + tiring + tissue + tissues + tit + Titan + titanate + titanic + titanium + titans + tithe + tithed + tither + tithes + tithing + titian + titillate + titillated + titillater + titillating + titillation + title + titled + titleholder + titles + titling + titmice + titmouse + titrate + tits + titter + titters + tittle + titular + Titus + tizzies + tizzy + TN + TNT + to + toad + toadied + toadies + toads + toadstool + toady + toadying + toadyism + toast + toasted + toaster + toasting + toastmaster + toasts + tobacco + tobacconist + tobaccos + Tobago + toboggan + tobogganer + tobogganist + Toby + toccata + tocsin + today + today'll + todays + Todd + toddies + toddle + toddled + toddler + toddlers + toddling + toddy + toe + toed + TOEFL + toehold + toeing + toenail + toenails + toes + toffee + toffy + tofile + tofu + tog + toga + togae + togaed + togas + together + togetherness + togging + toggle + toggled + toggles + toggling + Togo + togs + toil + toiled + toiler + toilers + toilet + toiletries + toiletry + toilets + toilette + toiling + toils + toilsome + toilworn + tokamak + toke + token + tokenism + tokens + Tokyo + tokyo + told + tole + Toledo + tolerability + tolerable + tolerably + tolerance + tolerances + tolerant + tolerantly + tolerate + tolerated + tolerates + tolerating + toleration + toll + tolled + toller + tollgate + tollhouse + tolls + Tolstoy + toluene + Tom + tomahawk + tomahawks + tomato + tomatoes + tomb + tomboy + tomboyish + tombs + tombstone + tomcat + tome + tomfooleries + tomfoolery + Tomlinson + Tommie + tommy + tommyrot + tomography + tomorrow + tomorrows + Tompkins + tomtit + ton + tonal + tonalities + tonality + tonally + tone + toned + toneless + tonelessly + toner + tones + tong + tongs + tongue + tongued + tongues + tonguing + Toni + tonic + tonics + tonight + toning + tonk + tonnage + tons + tonsil + tonsillectomies + tonsillectomy + tonsillitis + tonsorial + tonsure + tonsured + tonsuring + tony + too + toodle + took + tool + tooled + tooler + toolers + tooling + toolkit + toolmake + toolmaker + tools + toolsmith + toot + tooth + toothache + toothbrush + toothbrushes + toothed + toothless + toothpaste + toothpick + toothpicks + toothsome + toothsomely + toothsomeness + tootle + top + topaz + topcoat + Topeka + toper + topgallant + topic + topical + topically + topics + topknot + topless + topmast + topmost + topnotch + topocentric + topographic + topographical + topographies + topography + topological + topologies + topologize + topology + topped + topper + topple + toppled + topples + toppling + tops + topsail + topsoil + Topsy + toque + tor + tora + torah + torch + torchbearer + torches + torchlight + tore + toreador + tori + torment + tormented + tormenter + tormenters + tormenting + tormentor + torn + tornadic + tornado + tornadoes + tornados + toroid + toroidal + Toronto + torpedo + torpedoed + torpedoes + torpedoing + torpid + torpidity + torpidly + torpidness + torpor + torque + torr + Torrance + torrent + torrential + torrentially + torrents + torrid + torridly + torsi + torsion + torsional + torsionally + torso + torsos + tort + torte + tortilla + tortoise + tortoises + tortoiseshell + tortoni + tortuosities + tortuosity + tortuous + tortuously + torture + tortured + torturer + torturers + tortures + torturing + torus + toruses + tory + Toshiba + toss + tossed + tosses + tossing + tossup + tot + total + totaled + totaling + totalisator + totalitarian + totalitarianism + totalities + totalitizer + totality + totalizator + totalizer + totalled + totaller + totallers + totalling + totally + totals + tote + toted + totem + totemic + totemism + toting + totted + totter + tottered + tottering + totters + tottery + totting + toucan + touch + touchability + touchable + touchdown + touched + toucher + touches + touchier + touchiest + touchily + touchiness + touching + touchingly + touchstone + touchy + tough + toughen + tougher + toughest + toughly + toughness + tour + toured + touring + tourism + tourist + tourists + tourmaline + tournament + tournaments + tourney + tourneys + tourniquet + tours + tousle + tousled + tousling + tout + tow + toward + towards + towboat + towed + towel + toweled + toweling + towelled + towelling + towels + tower + towered + towering + towers + towhead + towheaded + towhee + towline + town + townhouse + towns + Townsend + townsendi + township + townships + townsman + townsmen + townspeople + towpath + towrope + toxemia + toxemic + toxic + toxicity + toxicologist + toxicology + toxin + toxins + toy + toyed + toying + Toyota + toys + trac + trace + traceable + traceback + traced + tracer + traceries + tracers + tracery + traces + trachea + tracheal + trachecheae + trachecheas + tracheotomies + tracheotomy + tracing + tracings + track + trackage + tracked + tracker + trackers + tracking + trackless + tracks + tract + tractability + tractable + tractably + traction + tractive + tractor + tractors + tracts + Tracy + trade + traded + trademark + trademarks + tradeoff + tradeoffs + trader + traders + trades + tradesman + tradesmen + tradeswoman + tradeswomen + trading + tradition + traditional + traditionally + traditions + traduce + traduced + traducer + traducing + traffic + trafficked + trafficker + traffickers + trafficking + traffics + trag + tragedian + tragedienne + tragedies + tragedy + tragic + tragical + tragically + tragicomic + trail + trailed + trailer + trailers + trailhead + trailing + trailings + trails + trailside + train + trainable + trained + trainee + trainees + traineeship + trainer + trainers + training + trainman + trainmen + trains + traipse + traipsed + traipsing + trait + traitor + traitorous + traitors + traits + trajectories + trajectory + tram + tramcar + trammel + trammeled + trammeling + tramp + tramped + tramping + trample + trampled + trampler + tramples + trampling + trampoline + tramps + tramway + trance + trances + tranquil + tranquiler + tranquilest + tranquility + tranquilization + tranquilize + tranquilized + tranquilizer + tranquilizing + tranquillity + tranquillization + tranquillize + tranquillizer + tranquilly + transact + transaction + transactions + transactor + transalpine + transaminase + transatlantic + transceive + transceiver + transceivers + transcend + transcended + transcendence + transcendency + transcendent + transcendental + transcendentalism + transcendentalist + transcendentally + transcending + transcends + transconductance + transcontinental + transcribe + transcribed + transcriber + transcribers + transcribes + transcribing + transcript + transcription + transcriptions + transcripts + transducer + transduction + transect + transects + transept + transfer + transferability + transferable + transferal + transferals + transferee + transference + transferor + transferrable + transferral + transferred + transferrer + transferrers + transferrin + transferring + transferrins + transfers + transfiguration + transfigure + transfigured + transfiguring + transfinite + transfix + transform + transformable + transformation + transformational + transformations + transformed + transformer + transformers + transforming + transforms + transfusable + transfuse + transfused + transfusing + transfusion + transgeneration + transgenerations + transgress + transgressed + transgression + transgressions + transgressor + transience + transiency + transient + transiently + transients + transistor + transistorize + transistorized + transistorizing + transistors + transit + Transite + transition + transitional + transitioned + transitions + transitive + transitively + transitiveness + transitivity + transitorily + transitory + translatability + translatable + translate + translated + translates + translating + translation + translational + translations + translator + translators + transliterate + transliterated + transliterating + transliteration + translocated + translocation + translocations + translucence + translucency + translucent + transmigrate + transmigrated + transmigrating + transmigration + transmissible + transmission + transmissions + transmit + transmits + transmittable + transmittal + transmittance + transmitted + transmitter + transmitters + transmitting + transmogrification + transmogrify + transmutation + transmute + transmuted + transmuting + transoceanic + transom + transpacific + transparencies + transparency + transparent + transparently + transpiration + transpire + transpired + transpires + transpiring + transplant + transplantation + transplanted + transplanting + transplants + transponder + transponders + transport + transportability + transportable + transportation + transported + transporter + transporters + transporting + transports + transposable + transpose + transposed + transposes + transposing + transposition + transpositions + transput + transsexual + transship + transshipment + transshipped + transshipping + transubstantiation + transuranic + transversal + transverse + transvestite + Transylvania + trap + trapdoor + trapeze + trapezium + trapezoid + trapezoidal + trapezoids + trappabilities + trappability + trappable + trapped + trapper + trappers + trapping + trappings + traps + trapshooter + trapshooting + trash + trashier + trashiest + trashy + Trastevere + trauma + traumas + traumata + traumatic + traumatize + traumatized + traumatizing + travail + travel + traveled + traveler + travelers + traveling + travelings + travelled + traveller + travelling + travelog + travelogue + travels + traversable + traversal + traversals + traverse + traversed + traverses + traversing + travertine + travestied + travesties + travesty + travestying + Travis + trawl + trawler + tray + trays + treacheries + treacherous + treacherously + treacherousness + treachery + treacle + tread + treaded + treading + treadle + treadmill + treads + treason + treasonable + treasonably + treasonous + treasure + treasured + treasurer + treasures + treasuries + treasuring + treasury + treat + treated + treaties + treating + treatise + treatises + treatment + treatments + treats + treaty + treble + trebled + trebling + tree + treed + treeing + treeless + trees + treetop + treetops + trefoil + trek + trekked + treks + trellis + tremble + trembled + trembles + trembling + tremendous + tremendously + tremolo + tremolos + tremor + tremors + tremulous + tremulously + tremulousness + trench + trenchancy + trenchant + trenchantly + trenchcoats + trencher + trencherman + trenchermen + trenches + trend + trendier + trendiest + trendiness + trending + trends + trendy + Trenton + trepanned + trepanning + trephine + trephined + trephining + trepidation + trespass + trespassed + trespasser + trespassers + trespasses + trespassing + tress + tresses + trestle + Trevelyan + trey + triable + triad + trial + trials + triangle + triangles + triangular + triangularly + triangulate + triangulated + triangulating + triangulation + Triangulum + Trianon + Triassic + triatomic + tribal + tribalism + tribe + tribes + tribesman + tribesmen + tribulate + tribulation + tribulations + tribunal + tribunals + tribune + tribunes + tributaries + tributary + tribute + tributes + trice + triced + tricentennial + triceps + Triceratops + triceratops + trichina + trichinae + Trichinella + trichinosis + trichloroacetic + trichloroethane + trichotomous + trichotomy + trichrome + tricing + trick + tricked + trickeries + trickery + trickier + trickiest + trickiness + tricking + trickle + trickled + trickles + trickling + tricks + trickster + tricky + tricolor + tricorn + tricot + tricycle + trident + tridiagonal + tried + triennial + triennially + trier + triers + tries + trifle + trifled + trifler + trifles + trifling + trifluoride + trifocal + trifocals + trig + trigger + triggered + triggering + triggers + trigonal + trigonometric + trigonometry + trigram + trigrams + trihedral + trilateral + trill + trilled + trillion + trillions + trillionth + trillium + trilobite + trilogies + trilogy + trim + trimer + trimester + trimly + trimmed + trimmer + trimmers + trimmest + trimming + trimmings + trimness + trims + trimscript + trimscripts + trimucronatus + Trinidad + trinitarian + trinities + trinitrotoluene + trinity + trinket + trinkets + trio + triode + trios + trioxide + trip + tripartite + tripe + triphammer + triphenylphosphine + triple + tripled + triples + triplet + triplets + Triplett + triplex + triplicate + triplicated + triplicating + tripling + triply + tripod + tripoli + tripped + trips + triptych + trisect + trisection + trisodium + Tristan + tristate + trisyllable + trite + tritely + triteness + triter + tritest + tritiated + tritium + triton + triumf + triumph + triumphal + triumphant + triumphantly + triumphed + triumphing + triumphs + triumvir + triumvirate + triumviri + triumvirs + triune + trivalent + trivet + trivia + trivial + trivialities + triviality + trivializing + trivially + trivium + trochaic + troche + trochee + trod + trodden + troglodyte + troika + Trojan + troll + trolley + trolleys + trollop + trolls + trombone + trombonist + trompe + troop + trooper + troopers + troops + trope + trophic + trophies + trophy + tropic + tropical + tropically + tropics + tropism + tropopause + troposphere + tropospheric + trot + trots + trotted + troubadour + trouble + troubled + troublemaker + troublemakers + troubles + troubleshoot + troubleshooter + troubleshooters + troubleshooting + troubleshoots + troublesome + troublesomely + troubling + trough + trounce + trounced + trouncing + troupe + trouped + trouper + trouping + trouser + trousers + trousseau + trousseaus + trousseaux + trout + Troutman + trouts + trow + trowel + troweled + troweling + trowelled + trowelling + trowels + troy + trpset + trt + truancies + truant + truants + truce + truck + trucked + trucker + truckers + trucking + truckle + truckled + truckling + trucks + truculence + truculency + truculent + truculently + trudge + trudged + trudging + Trudy + true + trued + trueing + trueness + truer + trues + truest + truffle + truffles + truing + truism + truisms + truly + Truman + Trumbull + trump + trumped + trumperies + trumpery + trumpet + trumpeter + trumps + truncate + truncated + truncates + truncating + truncation + truncations + truncheon + trundle + trundled + trundling + trunk + trunks + trunnion + truss + trust + trusted + trustee + trustees + trusteeship + trustful + trustfully + trustfulness + trustier + trusties + trustiest + trusting + trustingly + trusts + trustworthier + trustworthiest + trustworthiness + trustworthy + trusty + truth + truthful + truthfully + truthfulness + truths + TRW + try + trying + tryout + trypodendron + trypsin + tryst + trysting + trytophan + tsar + tsarina + tss + tsunami + tsunamis + TTL + TTY + tub + tuba + tubbed + tubbier + tubbiest + tubbiness + tubbing + tubby + tube + tuber + tubercle + tubercular + tuberculin + tuberculosis + tuberculous + tuberous + tubers + tubes + tubing + tubs + tubular + tubule + tuck + tucked + tucker + tucking + tucks + Tucson + Tudor + Tuesday + tuesday + tuesdays + tuff + tuft + tufts + tug + tugboat + tugged + tugging + tugs + tuition + Tulane + tularaemia + tularemia + tulip + tulips + tulle + Tulsa + tum + tumble + tumbled + tumbledown + tumbler + tumblers + tumbles + tumbleweed + tumbling + tumbrel + tumbril + tumescence + tumescent + tumid + tumidity + tummies + tummy + tumor + tumors + tumour + tumult + tumults + tumultuous + tumultuously + tun + tuna + tunable + tunas + tundra + tune + tuneable + tuned + tuneful + tunefully + tuner + tuners + tunes + tuneup + tung + tungstate + tungsten + tunic + tunicate + tunicates + tunics + tuning + Tunis + Tunisia + tunnel + tunneled + tunneler + tunneling + tunnelled + tunneller + tunnelling + tunnels + tunnies + tunny + tupelo + tuple + tuples + turban + turbans + turbid + turbidity + turbinate + turbine + turbofan + turbojet + turboprop + turbot + turbots + turbulence + turbulency + turbulent + turbulently + tureen + turf + turfs + turgid + turgidity + turgidly + Turin + Turing + turing + turk + turkey + turkeys + Turkish + turmeric + turmoil + turmoils + turn + turnable + turnabout + turnaround + turnbuckle + turncoat + turndown + turned + turner + turners + turnery + turning + turnings + turnip + turnips + turnkey + turnkeys + turnoff + turnout + turnover + turnpike + turns + turnstile + turnstone + turntable + turpentine + turpitude + turquoise + turret + turrets + turtle + turtleback + turtledove + turtleneck + turtles + turves + turvy + Tuscaloosa + Tuscan + Tuscany + Tuscarora + tusk + Tuskegee + tussle + tussled + tussling + tussock + tussocky + tut + tutelage + tutelary + tutor + tutored + tutorial + tutorials + tutoring + tutors + Tuttle + tutu + tux + tuxedo + tuxedos + TV + TVA + TWA + twaddle + twain + twang + twangy + twas + tweak + tweed + tweedier + tweediest + tweediness + tweedle + tweedled + tweedling + tweedy + tweet + tweeter + tweeze + tweezers + twelfth + twelve + twelves + twenties + twentieth + twenty + twerp + twice + twiddle + twiddled + twiddling + twig + twiggier + twiggiest + twigging + twiggy + twigs + twilight + twilights + twill + twin + twine + twined + twiner + twinge + twinged + twinging + twinight + twining + twinkle + twinkled + twinkler + twinkles + twinkling + twins + twirl + twirled + twirler + twirling + twirls + twirly + twist + twisted + twister + twisters + twisting + twists + twisty + twit + twitch + twitched + twitching + twitchy + twitted + twitter + twittered + twittering + twitters + two + twofold + Twombly + twopence + twopenny + twos + twosome + TWX + twyver + TX + txt + Tyburn + tycoon + tying + tyke + Tyler + tympana + tympani + tympanic + tympanist + tympanum + tympanums + type + typecast + typecasting + typed + typeface + typeless + typeout + types + typescript + typeset + typesetter + typesetting + typewrite + typewriter + typewriters + typewriting + typewritten + typewrote + typhoid + Typhon + typhoon + typhus + typic + typical + typically + typicalness + typified + typifies + typify + typifying + typing + typist + typists + typo + typographer + typographic + typographical + typographically + typography + typology + typos + tyrannic + tyrannical + tyrannically + tyrannicide + tyrannies + tyrannize + tyrannized + tyrannizing + Tyrannosaurus + tyrannous + tyranny + tyrant + tyrants + tyro + tyros + tyrosine + Tyson + tzar + tzarina + u + u's + U.S + U.S.A + ubc + ubiety + ubiquitous + ubiquitously + ubiquity + UCLA + ucla + udder + udo + ufologist + Uganda + ugh + ugli + uglier + ugliest + uglify + ugliness + ugly + uhlan + uintahite + uintaite + UK + ukase + Ukraine + Ukrainian + ukulele + ulama + Ulan + ulcer + ulcerate + ulcerated + ulcerating + ulceration + ulcerous + ulcers + ulema + ullage + Ullman + ulna + ulnae + ulnar + ulnas + ulotrichous + Ulster + ulterior + ultima + ultimata + ultimate + ultimately + ultimatum + ultimatums + ultimo + ultimogeniture + ultra + ultrahigh + ultraism + ultramicrometer + ultramicroscope + ultramicroscopic + ultramontane + ultramundane + ultranationalism + ultrared + ultrasonics + ultravirus + ulu + ululate + ululated + ululating + Ulysses + umbel + umbellate + umbelliferous + umbellule + umber + umbilical + umbilicate + umbilication + umbilici + umbilicus + umbiliform + umbo + umbra + umbrae + umbrage + umbrageous + umbras + umbrella + umbrellas + umbrette + umiack + umiak + umist + umlaut + umload + ummps + ump + umpirage + umpire + umpired + umpires + umpiring + umpteen + umpteenth + UN + unabated + unabbreviated + unable + unabridged + unacceptability + unacceptable + unacceptably + unaccommodated + unaccompanied + unaccomplished + unaccountable + unaccountably + unaccustomed + unachievable + unacknowledged + unadjusted + unadorned + unadulterated + unadvised + unadvisedly + unaesthetically + unaffected + unaffectedly + unaffectedness + unafraid + unaided + unalienability + unalienable + unaligned + unallocated + unalterably + unaltered + unambiguous + unambiguously + unambitious + unanalyzable + unanimity + unanimous + unanimously + unannounced + unanswered + unanticipated + unapproachable + unappropriated + unapt + unarm + unarmed + unary + unasked + unassailable + unassigned + unassuming + unassumingly + unattached + unattacked + unattainability + unattainable + unattended + unattractive + unattractively + unau + unauthorized + unavailability + unavailable + unavailing + unavoidable + unavoidably + unaware + unawareness + unawares + unbacked + unbaked + unbalance + unbalanced + unballasted + unbar + unbarred + unbarring + unbated + unbearable + unbeatable + unbeaten + unbecoming + unbeknown + unbeknownst + unbelief + unbelievable + unbelievably + unbeliever + unbelieving + unbend + unbending + unbendingly + unbent + unbiased + unbiassed + unbind + unbinding + unbinds + unbitted + unblessed + unblest + unblock + unblocked + unblocking + unblocks + unblooded + unblushing + unbodied + unbolt + unborn + unbosom + unbound + unbounded + unbowed + unbreakable + unbridled + unbroken + unbuffered + unbundle + unburden + uncancelled + uncanny + uncapitalized + uncaught + unceremonious + unceremoniously + uncertain + uncertainly + uncertainties + uncertainty + unchangeable + unchanged + unchanging + uncharacterized + unchecked + unchristian + uncircumcised + uncivil + uncivilly + unclad + unclaimed + unclassifiable + unclassified + uncle + unclean + uncleanliness + uncleanly + uncleanness + unclear + uncleared + uncles + uncloak + unclosed + unclothe + unclothed + unclothing + uncoil + uncomfortable + uncomfortably + uncommitted + uncommon + uncommonly + uncommunicative + uncompleted + uncomplicated + uncompromising + uncomputable + unconcern + unconcerned + unconcernedly + unconditional + unconditionally + unconfirmed + unconnected + unconscionable + unconscionably + unconscious + unconsciously + unconsciousness + unconstitutional + unconstitutionality + unconstrained + uncontrollability + uncontrollable + uncontrollably + uncontrolled + unconventional + unconventionally + unconverted + unconvinced + unconvincing + uncoordinated + uncork + uncorrectable + uncorrected + uncorrelated + uncountable + uncountably + uncounted + uncouple + uncoupled + uncoupling + uncouth + uncouthly + uncouthness + uncover + uncovered + uncovering + uncovers + unction + unctuous + unctuously + unctuousness + uncut + undamaged + undaunted + undauntedly + undecayed + undecidable + undecided + undecidedly + undecipherable + undeclared + undecomposable + undefinability + undefined + undeleted + undeniable + undeniably + under + underachieve + underachieved + underachievement + underachiever + underachievers + underachieving + underage + underarm + underbrush + undercarriage + undercharge + undercharged + undercharging + underclassman + underclassmen + underclothes + underclothing + undercoat + undercoating + undercover + undercurrent + undercut + undercutting + underdeveloped + underdog + underdone + underemphasize + underemployed + underestimate + underestimated + underestimates + underestimating + underestimation + underflow + underflowed + underflowing + underflows + underfoot + undergarment + undergo + undergoes + undergoing + undergone + undergos + undergrads + undergraduate + undergraduates + underground + undergrowth + underhand + underhanded + underhandedly + underhandedness + underlain + underlie + underlielay + underlies + underline + underlined + underlines + underling + underlings + underlining + underlinings + underloaded + underlying + undermine + undermined + undermines + undermining + undermost + underneath + undernourish + undernourished + undernourishment + underpants + underpass + underpin + underpinned + underpinning + underpinnings + underpins + underplay + underplayed + underplaying + underplays + underprivileged + underrate + underrated + underrating + underrepresentation + underrepresented + underscore + underscored + underscores + underscoring + undersea + underseas + undersecretaries + undersecretary + undersell + underselling + undershirt + undershot + underside + undersign + undersigned + undersize + undersized + underslung + undersold + understaffed + understand + understandability + understandable + understandably + understanding + understandingly + understandings + understands + understate + understated + understatement + understating + understood + understudied + understudies + understudy + understudying + undertake + undertaken + undertaker + undertakers + undertakes + undertaking + undertakings + underthings + undertone + undertook + undertow + underused + undervalue + undervalued + undervaluing + underwater + underway + underwear + underweight + underwent + underworld + underwrite + underwriter + underwriters + underwrites + underwriting + underwritten + underwrote + undescribably + undesirability + undesirable + undetectable + undetected + undetermined + undeveloped + undflow + undid + undies + undimensioned + undiminished + undirected + undisciplined + undiscovered + undisplayed + undisturbed + undivided + undo + undoable + undocumented + undoes + undoing + undoings + undone + undoubtably + undoubted + undoubtedly + undrained + undress + undressed + undresses + undressing + undue + undulant + undulate + undulated + undulating + undulation + undulatory + unduly + undying + unearth + unearthed + unearthing + unearthliness + unearthly + unearths + uneasier + uneasiest + uneasily + uneasiness + uneasy + uneconomic + uneconomical + uneducated + unembellished + unemployable + unemployed + unemployment + unenclosed + unencrypted + unending + unenlightening + unequal + unequaled + unequalled + unequally + unequivocal + unequivocally + unerring + unerringly + UNESCO + unessential + unevaluated + uneven + unevenly + unevenness + uneventful + unexampled + unexceptionable + unexceptionably + unexcused + unexpanded + unexpected + unexpectedly + unexpectedness + unexpecteds + unexpired + unexplained + unexplored + unextended + unfailing + unfailingly + unfair + unfairly + unfairness + unfaithful + unfaithfully + unfaithfulness + unfamiliar + unfamiliarity + unfamiliarly + unfavorable + unfeeling + unfeelingly + unfeigned + unfeminine + unfenced + unfettered + unfiltered + unfinished + unfit + unfitness + unfitted + unfitting + unflagging + unflappable + unflavored + unflinching + unflinchingly + unfold + unfolded + unfolding + unfolds + unforeseen + unforgeable + unforgiving + unformatted + unfortunate + unfortunately + unfortunates + unfounded + unfreeze + unfreezes + unfriendliness + unfriendly + unfrock + unfulfilled + unfunded + unfurl + ungainliness + ungainly + ungentlemanly + ungodliness + ungodly + ungovernable + ungoverned + ungracious + ungraciously + ungraciousness + ungrammatical + ungrasp + ungrateful + ungratefully + ungratefulness + ungreased + ungrounded + unguarded + unguardedly + unguent + unguided + ungulate + unhallowed + unhand + unhappier + unhappiest + unhappily + unhappiness + unhappy + unharmed + unhealthier + unhealthiest + unhealthiness + unhealthy + unheard + unheeded + unhesitatingly + unhinge + unhinged + unhinging + unhistoric + unhistorical + unholier + unholiest + unholy + unhook + unhorse + unhorsed + unhorsing + unhygenic + uniaxial + unicameral + unicellular + unicorn + unicorns + unicycle + unidentified + unidimensional + unidirectional + unidirectionality + unidirectionally + unifiable + unification + unifications + unified + unifier + unifiers + unifies + uniform + uniformed + uniformities + uniformity + uniformly + uniforms + unify + unifying + unilateral + unilluminating + unimaginable + unimodal + unimpeachable + unimpeachably + unimpeded + unimplemented + unimportance + unimportant + unindented + uninformative + uninhabited + uninhibited + uninitialized + uninitiated + uninominal + uninstalled + uninsulated + uninsured + unintelligible + unintended + unintentional + unintentionally + uninteresting + uninterestingly + uninterpreted + uninterruptable + uninterrupted + uninterruptedly + unintialized + union + unionism + unionist + unionization + unionize + unionized + unionizer + unionizers + unionizes + unionizing + unions + uniplex + unipolar + uniprocessor + uniprocessor unix + unique + uniquely + uniqueness + Uniroyal + unisex + unison + unit + unital + unitarian + unitary + unite + united + unites + unities + uniting + unitive + unitize + unitized + unitizing + units + unity + Univac + univalent + univalve + univalves + univariate + universal + universality + universalize + universalized + universalizing + universally + universals + universe + universes + universities + university + univoltine + Unix + unix + unjust + unjustified + unjustly + unjustness + unkempt + unkemptness + unkind + unkindly + unkindness + unknowable + unknowing + unknowingly + unknown + unknowns + unl + unlabelled + unlace + unlaced + unlacing + unlatch + unlatched + unlawful + unlawfully + unlawfulness + unlearn + unlearned + unleash + unleashed + unleashes + unleashing + unless + unlettered + unlike + unlikelihood + unlikely + unlikeness + unlimber + unlimited + unlink + unlinked + unlinking + unlinks + unload + unloaded + unloading + unloads + unlock + unlocked + unlocking + unlocks + unloose + unloosed + unloosen + unloosing + unluckier + unluckiest + unluckily + unlucky + unmade + unmake + unmaking + unman + unmanageable + unmanageably + unmanly + unmanned + unmannerliness + unmannerly + unmanning + unmarked + unmarried + unmask + unmasked + unmatched + unmeaning + unmentionable + unmerciful + unmercifully + unmistakable + unmistakably + unmitigated + unmodified + unmoral + unmoved + unmuzzle + unmuzzled + unmuzzling + unn + unnamed + unnatural + unnaturally + unnaturalness + unneccessary + unnecessarily + unnecessary + unneeded + unnerve + unnerved + unnerves + unnerving + unnormalized + unnoticed + unnumber + unnumbered + unobjective + unobservable + unobserved + unobtainable + unoccupied + unofficial + unofficially + unopened + unoptimized + unordered + unorganized + unpack + unpacked + unpacking + unpacks + unpaid + unpaired + unpalatable + unparalleled + unparametrized + unparsed + unparser + unpeeled + unpermit + unpermits + unpermitted + unpin + unpinned + unpinning + unplanned + unpleasant + unpleasantly + unpleasantness + unplug + unplumbed + unpolarized + unpolluted + unpopular + unpopularity + unpracticed + unprecedented + unpredictability + unpredictable + unpredictably + unprepared + unprepossessing + unprescribed + unpreserved + unprimed + unprincipled + unprintable + unprocessed + unprofessional + unprofessionally + unprofitable + unprofitably + unprojected + unpromised + unpromising + unprotected + unprovability + unprovable + unproven + unpublished + unpurified + unqualified + unqualifiedly + unquestionable + unquestionably + unquestioned + unquiet + unquote + unquoted + unravel + unraveled + unraveling + unravelled + unravelling + unravels + unreachable + unread + unreadable + unreal + unrealistic + unrealistically + unrealities + unreality + unreasonable + unreasonableness + unreasonably + unreasoning + unreasoningly + unrecoded + unrecognizable + unrecognized + unreconstructed + unrecoverable + unreel + unreferenced + unrefined + unregenerate + unregulated + unrelated + unrelenting + unreliability + unreliable + unremitting + unreported + unrepresentable + unrepresented + unreserved + unreservedly + unresolvable + unresolved + unresponsive + unrest + unrestrained + unrestricted + unrestrictedly + unrestrictive + unrewarded + unrighteous + unripe + unrivaled + unrivalled + unroll + unrolled + unrolling + unrolls + unruffled + unrulier + unruliest + unruliness + unruly + unsaddle + unsaddled + unsaddling + unsafe + unsafely + unsaid + unsanitary + unsatisfactory + unsatisfiability + unsatisfiable + unsatisfied + unsatisfying + unsaturated + unsavoriness + unsavory + unsay + unsaying + unscathed + unscheduled + unscramble + unscrambled + unscrambling + unscrew + unscrupulous + unscrupulously + unseal + unseasonable + unseat + unseeded + unseemliness + unseemly + unseen + unselected + unselfish + unselfishly + unselfishness + unsent + unset + unsettle + unsettled + unsettling + unsex + unshackle + unshackled + unshackling + unshaken + unshared + unsheathe + unsheathed + unsheathing + unshifted + unsightless + unsightly + unsigned + unskilled + unskillful + unskillfully + unskillfulness + unslotted + unsnap + unsnapped + unsnapping + unsnarl + unsociable + unsold + unsolicited + unsolvable + unsolved + unsophisticated + unsophistication + unsorted + unsound + unsoundly + unsoundness + unsparing + unsparingly + unspeakable + unspeakably + unspecifiable + unspecified + unsplit + unstable + unstably + unstated + unsteadier + unsteadiness + unsteady + unstop + unstopped + unstopping + unstrap + unstrapped + unstrapping + unstriped + unstructured + unstrung + unstudied + unsubscripted + unsubstantial + unsuccessful + unsuccessfully + unsuitable + unsuited + unsung + unsupervised + unsupported + unsure + unsurprising + unsurprisingly + unsuspecting + unsweetened + unsynchronized + untagged + untangle + untangled + untangling + untapped + untaught + untenable + unterminated + untested + unthankful + unthinkable + unthinkably + unthinking + unthinkingly + unthreaded + untidier + untidiest + untidily + untidiness + untidy + untie + untied + untieing + unties + until + untimeliness + untimely + untitled + unto + untold + untouchable + untouchables + untouched + untoward + untrained + untranslated + untreated + untried + untrimmed + untrue + untruly + untruth + untruthful + untruthfully + untruthfulness + untutored + untwine + untwined + untwining + untwist + untying + unupdated + unusable + unusably + unused + unusual + unusually + unusualness + unutterable + unutterably + unvarnished + unvarying + unveil + unveiled + unveiling + unveils + unverified + unviolated + unvoiced + unwanted + unwarily + unwarranted + unwary + unweighted + unwelcome + unwell + unwholesome + unwholesomely + unwholesomeness + unwieldiness + unwieldy + unwilling + unwillingly + unwillingness + unwind + unwinder + unwinders + unwinding + unwinds + unwise + unwisely + unwiser + unwisest + unwitting + unwittingly + unwonted + unwontedly + unworthier + unworthiest + unworthily + unworthiness + unworthy + unwound + unwrap + unwrapped + unwrapping + unwraps + unwritten + unyoke + unyoked + unyoking + unzip + unzipped + unzipping + up + upbeat + upbraid + upbring + upbringing + upcome + upcoming + upcountry + updatable + update + updated + updater + updates + updating + updraft + upend + upgrade + upgraded + upgrades + upgrading + upheaval + upheld + uphill + uphold + upholder + upholders + upholding + upholds + upholster + upholstered + upholsterer + upholsteries + upholstering + upholsters + upholstery + upkeep + upland + uplands + uplift + uplink + uplinks + upload + upon + upped + upper + uppercase + upperclassman + upperclassmen + uppercut + uppercutting + uppermost + upping + uppish + uppity + upraise + upraised + upraising + uprear + upright + uprightly + uprightness + uprise + uprising + uprisings + upriver + uproar + uproarious + uproariously + uproot + uprooted + uprooting + uproots + ups + upset + upsets + upsetting + upshot + upshots + upside + upsilon + upslope + upstage + upstaged + upstaging + upstair + upstairs + upstand + upstanding + upstart + upstate + upstater + upstream + upsurge + upsurged + upsurging + upswing + upswinging + upswung + uptake + uptight + Upton + uptown + uptrend + upturn + upturned + upturning + upturns + upward + upwardly + upwards + upwelling + upwind + uqv + uracil + urania + uranium + Uranus + uranyl + urban + Urbana + urbane + urbanite + urbanity + urbanization + urbanize + urbanized + urbanizing + urchin + urchins + urea + uremia + uremic + ureter + urethane + urethra + urethrae + urethral + urethras + urge + urged + urgencies + urgent + urgently + urges + urging + urgings + Uri + uric + urinal + urinalysis + urinary + urinate + urinated + urinates + urinating + urination + urine + Uris + urn + urns + urologist + urology + Ursa + ursine + Ursula + Ursuline + Uruguay + uruguay + us + USA + usability + usable + usableness + usably + USAF + usage + usages + USC + USC&GS + USDA + use + useable + used + useful + usefully + usefulness + useless + uselessly + uselessness + usenet + user + users + uses + USGS + usher + ushered + ushering + ushers + USIA + using + USN + USPS + USSR + usual + usually + usurer + usuries + usurious + usurp + usurpation + usurped + usurper + usury + UT + Utah + utah + utensil + utensils + uteri + uterine + uterus + Utica + utile + utilitarian + utilitarianism + utilities + utility + utilization + utilizations + utilize + utilized + utilizes + utilizing + utlilized + utmost + utopia + utopian + utopians + Utrecht + utter + utterance + utterances + uttered + uttering + utterly + uttermost + utters + uucpnet + uvulae + uvular + uvulas + uxorious + v + v's + VA + vacancies + vacancy + vacant + vacantly + vacate + vacated + vacates + vacating + vacation + vacationed + vacationer + vacationers + vacationing + vacationist + vacationland + vacations + vaccinal + vaccinate + vaccinated + vaccinating + vaccination + vaccine + vaccinia + vacillant + vacillate + vacillated + vacillating + vacillation + vacua + vacuities + vacuity + vacuo + vacuolate + vacuolation + vacuole + vacuous + vacuously + vacuua + vacuum + vacuumed + vacuuming + vade + vadose + Vaduz + vagabond + vagabondage + vagabonds + vagal + vagaries + vagarious + vagary + vagi + vagina + vaginae + vaginal + vaginas + vaginate + vaginitis + vagodepressor + vagotomy + vagotonia + vagotropic + vagrancies + vagrancy + vagrant + vagrantly + vague + vaguely + vagueness + vaguer + vaguest + vagus + vahini + Vail + vain + vainglorious + vainglory + vainly + vainness + vair + valance + valanced + vale + valediction + valedictorian + valedictories + valedictory + valence + valences + valencies + valency + valens + valent + valentine + valentines + valerate + valerian + Valerie + Valery + vales + valet + valets + valetudinarian + valeur + valgus + Valhalla + valiance + valiancy + valiant + valiantly + valid + validate + validated + validates + validating + validation + validities + validity + validly + validness + valine + valise + Valkyrie + vallation + vallecula + Valletta + valley + valleys + Valois + valonia + valor + valorization + valorize + valorous + valour + Valparaiso + valuable + valuables + valuably + valuate + valuation + valuations + value + valued + valueless + valuer + valuers + values + valuing + valuta + valvate + valve + valveless + valves + valvular + valvule + valvulitis + vamoose + vamoosed + vamoosing + vamose + vamosed + vamosing + vamp + vampire + vampirism + van + vanadate + vanadic + vanadinite + vanadium + vanadous + Vance + Vancouver + vanda + vandal + vandalism + vandalize + vandalized + vandalizes + vandalizing + Vandenberg + Vanderbilt + Vanderpoel + vane + vanes + vang + vanguard + vanilla + vanillic + vanillin + vanish + vanished + vanisher + vanishes + vanishing + vanishingly + vanities + vanity + vanquish + vanquished + vanquisher + vanquishes + vanquishing + vans + vantage + vanward + vapid + vapidities + vapidity + vapidly + vapidness + vapor + vaporetto + vaporific + vaporimeter + vaporing + vaporish + vaporization + vaporize + vaporized + vaporizer + vaporizing + vaporous + vapors + vapory + vapour + vaquero + vaqueros + var + vara + varactor + variabilities + variability + variable + variableness + variables + variably + variac + variadic + variagles + Varian + variance + variances + variant + variantly + variants + variate + variates + variation + variational + variations + varicella + varicellate + varices + varicocele + varicolored + varicose + varicosis + varicosity + varicotomy + varied + variegate + variegated + variegating + variegation + varier + varies + varietal + varieties + variety + variform + varing + variocuopler + variola + variolar + variole + variolite + varioloid + variolous + variometer + variorum + various + variously + varistor + Varitype + varix + varlet + varletry + varment + varmint + varna + varnish + varnishes + varsiter + varsities + varsity + varus + varve + vary + varying + varyings + vas + vascular + vasculum + vase + vasectomies + vasectomy + vases + vasoconstrictor + vasodilator + vasoinhibitor + vasomotor + vasopressin + vasopressor + vasospasm + vasotomy + vasovagal + Vasquez + vassal + vassalage + Vassar + vast + vaster + vastest + vastitude + vastly + vastness + vasty + vat + vatic + Vatican + vaticinal + vaticinate + vats + vatted + vatting + vaudeville + Vaudois + Vaughan + Vaughn + vault + vaulted + vaulter + vaulting + vaults + vaunt + vaunted + vaunty + vav + vavasor + vaward + vax + veal + vector + vectorial + vectorization + vectorizing + vectors + Veda + vedalia + vedette + vee + veer + veered + veeries + veering + veers + veery + Vega + vegetable + vegetables + vegetal + vegetarian + vegetarianism + vegetarians + vegetate + vegetated + vegetates + vegetating + vegetation + vegetative + vegetatively + vegeterianism + vehemence + vehemency + vehement + vehemently + vehicle + vehicles + vehicular + veil + veiled + veiling + veils + vein + veined + veining + veinlet + veins + veinstone + veinule + veiny + vela + velamen + velar + velarium + velarize + Velasquez + velate + veld + veldt + velicate + velitation + velites + Vella + velleity + vellum + velocipede + velocities + velocity + velodrome + velour + velours + veloute + velum + velure + velutinous + velvet + velveteen + velvety + vena + venal + venality + venatic + venation + vend + vendace + vendee + vender + vendetta + vendible + vending + vendition + vendor + vendors + veneer + veneering + venemous + venepuncture + venerability + venerable + venerably + venerate + venerated + venerating + veneration + venereal + venereology + venery + venesection + Venetian + Veneto + Venezuela + venezuela + vengeance + vengeful + vengefully + vengefulness + venial + venially + Venice + venin + venipuncture + venire + venireman + veniremen + venison + venom + venomous + venomously + venose + venosity + venous + vent + ventage + ventail + vented + venter + ventiduct + ventifact + ventilate + ventilated + ventilates + ventilating + ventilation + ventilator + ventilatory + venting + ventral + ventrally + ventricle + ventricles + ventricose + ventricular + ventriculus + ventriloquial + ventriloquism + ventriloquist + ventriloquize + ventrodorsal + ventrolateral + vents + venture + ventured + venturer + venturers + ventures + venturesome + venturi + venturing + venturings + venturous + venue + venule + Venus + Venusian + Vera + veracious + veraciously + veracities + veracity + veranda + verandah + verandas + veratridine + veratrine + veratrum + verb + verbal + verbalism + verbalist + verbalization + verbalize + verbalized + verbalizes + verbalizing + verbally + verbatim + verbena + verbenol + verbiage + verbid + verbify + verbose + verbosely + verboseness + verbs + verdancy + verdant + Verde + Verdi + verdict + verdigris + verditer + verdure + verdurous + verge + verged + verger + verges + verging + verglas + veridic + veridical + verier + veriest + verifiability + verifiable + verification + verifications + verified + verifier + verifiers + verifies + verify + verifying + verily + verisimilar + verisimilitude + veritable + veritably + verities + verity + Verlag + vermeil + vermicelli + vermicide + vermiculite + vermiform + vermilion + vermin + verminous + Vermont + vermont + vermouth + Verna + vernacular + vernal + Verne + vernier + Vernon + Verona + Veronica + versa + Versailles + versatec + versatile + versatilely + versatility + verse + versed + verses + versification + versified + versifier + versify + versifying + versing + version + versions + versus + vertebra + vertebrae + vertebral + vertebras + vertebrate + vertebrates + vertex + vertexes + vertical + vertically + verticalness + vertices + vertiginous + vertigo + verve + very + vesicate + vesicated + vesicating + vesication + vesicle + vesicular + vesiculate + vesper + vessel + vessels + vest + vestal + vested + vestibule + vestige + vestiges + vestigial + vestment + vestries + vestry + vestryman + vestrymen + vests + vet + vetch + veteran + veterans + veterinarian + veterinarians + veterinaries + veterinary + veto + vetoed + vetoer + vetoes + vetoing + vex + vexation + vexatious + vexed + vexedly + vexes + vexing + vi + via + viabilities + viability + viable + viably + viaduct + vial + vials + viand + vibes + vibrancy + vibrant + vibrantly + vibraphone + vibrate + vibrated + vibrating + vibration + vibrational + vibrations + vibrato + vibrator + vibratory + vibratos + viburnum + vicar + vicarage + vicariate + vicarious + vicariously + vicariousness + vicarship + vice + vicegerency + vicegerent + viceless + viceregal + viceroy + viceroyship + vices + Vichy + vichyssoise + vicinage + vicinal + vicinities + vicinity + vicious + viciously + viciousness + vicissitude + vicissitudes + Vicksburg + Vicky + victal + victim + victimization + victimize + victimized + victimizer + victimizers + victimizes + victimizing + victims + victor + Victoria + victories + victorious + victoriously + victoriousness + victors + victory + victrola + victual + victualed + victualer + victualing + victualled + victualling + victuals + Vida + video + videophone + videotape + videotapes + videotex + vie + vied + Vienna + vienna + Viennese + Vientiane + vier + vies + Viet + Vietnam + Vietnamese + view + viewable + viewed + viewer + viewers + viewfinder + viewing + viewpoint + viewpoints + views + vigil + vigilance + vigilant + vigilante + vigilantes + vigilantist + vigilantly + vignette + vignetted + vignettes + vignetting + vigor + vigorous + vigorously + vigorousness + vigors + vii + viii + Viking + vile + vilely + vileness + vilification + vilifications + vilified + vilifier + vilifies + vilify + vilifying + villa + village + villager + villagers + villages + villain + villainess + villainies + villainous + villainously + villainousness + villains + villainy + villas + villein + vim + vinaigrette + Vincent + vinci + vincibility + vincible + vindicate + vindicated + vindicating + vindication + vindicator + vindictive + vindictively + vindictiveness + vine + vinegar + vinegary + vines + vineyard + vineyards + viniculture + Vinson + vintage + vintner + vinyl + viol + viola + violable + violably + violate + violated + violates + violating + violation + violations + violator + violators + violence + violent + violently + violet + violets + violin + violinist + violinists + violins + violist + violoncellist + violoncello + violoncellos + viper + viperish + viperous + vipers + virago + viragoes + viragos + viral + vireo + vireos + Virgil + virgin + virginal + virginally + Virginia + virginia + virginity + virgins + Virgo + virgule + virile + virility + virion + virologist + virology + virtu + virtual + virtually + virtue + virtues + virtuosi + virtuosities + virtuosity + virtuoso + virtuosos + virtuous + virtuously + virtuousness + virulence + virulent + virus + viruses + vis + visa + visaed + visage + visaing + visas + viscera + visceral + viscid + viscoelastic + viscometer + viscose + viscosities + viscosity + viscount + viscountess + viscounts + viscous + viscus + vise + vised + Vishnu + visibilities + visibility + visible + visibleness + visibly + Visigoth + vising + vision + visionaries + visionary + visions + visit + visitant + visitation + visitations + visited + visiting + visitor + visitors + visits + visor + visored + visors + vista + vistaed + vistas + visual + visualization + visualize + visualized + visualizer + visualizes + visualizing + visually + vita + vitae + vital + vitalities + vitality + vitalization + vitalize + vitalized + vitalizing + vitally + vitals + vitamin + vitaminic + vite + vithayasai + vitiate + vitiated + vitiating + vitiation + vitiator + viticulture + Vito + vitreous + vitrifaction + vitrifiable + vitrification + vitrified + vitrify + vitrifying + vitrine + vitriol + vitriolic + vitro + vituperance + vituperate + vituperated + vituperating + vituperation + vituperative + viva + vivace + vivacious + vivaciously + vivaciousness + vivacity + Vivaldi + vivariia + vivariiums + vivarium + Vivian + vivid + vividly + vividness + vivification + vivified + vivify + vivifying + viviparity + viviparous + viviparously + vivisect + vivisection + vivisectionist + vivo + vixen + vixenish + viz + vizier + vizir + vizor + Vladimir + Vladivostok + vlsi + vmintegral + vmsize + vocable + vocabularian + vocabularies + vocabulary + vocal + vocalic + vocalisations + vocalist + vocalizable + vocalization + vocalizations + vocalize + vocalized + vocalizes + vocalizing + vocally + vocals + vocate + vocation + vocational + vocationally + vocations + vocative + voces + vociferant + vociferate + vociferated + vociferating + vociferation + vociferous + vociferously + vociferousness + vodka + Vogel + vogue + voguish + voice + voiceband + voiced + voiceless + voicer + voicers + voices + voicing + void + voidable + voided + voider + voiding + voids + voile + vol + volatile + volatiles + volatilities + volatility + volatilization + volatilize + volatilized + volatilizing + volcanic + volcanically + volcanism + volcano + volcanoes + volcanos + vole + voles + volition + volitional + Volkswagen + volley + volleyball + volleyballs + volleyed + volleyer + volleying + volleys + Volstead + volt + Volta + voltage + voltages + voltaic + Voltaire + voltameter + voltammeter + Volterra + voltmeter + volts + volubility + voluble + volubly + volume + volumes + volumetric + volumetrical + voluminosity + voluminous + voluminously + voluntarily + voluntary + voluntaryism + volunteer + volunteered + volunteering + volunteers + voluptuaries + voluptuary + voluptuous + voluptuously + voluptuousness + volute + Volvo + vomit + vomited + vomiting + vomits + von + voodoo + voodooism + voodooist + voodooistic + voodoos + voracious + voraciously + voraciousness + voracity + vortex + vortexes + vortices + vorticity + Voss + votaries + votarist + votary + vote + voted + voter + voters + votes + voting + votive + vouch + voucher + vouchers + vouches + vouching + vouchsafe + vouchsafed + vouchsafing + Vought + vow + vowed + vowel + vowels + vower + vowing + vows + voyage + voyaged + voyager + voyagers + voyages + voyaging + voyagings + voyeur + voyeurism + Vreeland + VT + vucom + vucoms + Vulcan + vulcanite + vulcanization + vulcanize + vulcanized + vulcanizing + vulgar + vulgarian + vulgarism + vulgarities + vulgarity + vulgarization + vulgarize + vulgarized + vulgarizer + vulgarizing + vulgarly + vulgarness + vulnerabilities + vulnerability + vulnerable + vulnerably + vulpine + vulture + vultures + vulturous + vulva + vulvae + vulvas + vying + vyrnwy + w + w's + WA + Waals + Wabash + wabble + wabbled + wabbling + WAC + wack + wacke + wackier + wackiest + wackily + wackiness + wacky + Waco + wad + wadded + wadder + wadding + waddle + waddled + waddler + waddling + waddy + wade + waded + wader + wades + wadi + wadies + wading + wadis + Wadsworth + wady + wafer + wafers + waff + waffle + waffled + waffles + waffling + waflib + waft + waftage + wafter + wafture + wag + wage + waged + wager + wagerer + wagers + wages + wagged + wagger + waggery + wagging + waggish + waggishly + waggle + waggled + waggling + waggon + waging + Wagner + wagon + wagonage + wagoneer + wagoner + wagonette + wagonload + wagons + wags + wagtail + wah + wahine + Wahl + wahlund + wahoo + waif + waifs + wail + wailed + wailful + wailfully + wailing + wails + wain + wainscot + wainscoted + wainscoting + wainscotted + wainscotting + Wainwright + waist + waistband + waistcloth + waistcoat + waistcoats + waistline + waists + wait + Waite + waited + waiter + waiters + waiting + waitress + waitresses + waits + waive + waived + waiver + waiverable + waives + waiving + wake + waked + Wakefield + wakeful + wakefulness + wakeless + waken + wakened + wakening + wakerife + wakerobin + wakes + wakeup + waking + Walcott + Walden + Waldo + Waldorf + Waldron + wale + waled + wales + Walgreen + waling + walk + walkaway + walked + walker + walkers + walkie + walking + walkingstick + walkout + walkover + walks + walkway + wall + wallabies + wallaby + Wallace + wallah + wallaroo + wallboard + walled + Waller + wallet + wallets + walleye + walleyed + wallflower + walling + Wallis + wallop + walloper + walloping + wallow + wallowed + wallowing + wallows + wallpaper + walls + wally + walnut + walnuts + Walpole + walrus + walruses + Walsh + Walt + Walter + Waltham + Walton + waltz + waltzed + waltzer + waltzes + waltzing + wamble + wampum + wan + wand + wander + wandered + wanderer + wanderers + wandering + wanderings + wanderlust + wanders + wane + waned + wanely + wanes + Wang + wangle + wangled + wangler + wangling + wanigan + waning + wanion + wanly + wanner + wannest + want + wanted + wanting + wanton + wantonly + wantonness + wants + wapato + wapentake + wapiti + Wappinger + war + warble + warbled + warbler + warbles + warbling + ward + warded + warden + wardens + warder + wardress + wardrobe + wardrobes + wardroom + wards + wardship + ware + warehouse + warehoused + warehouseman + warehousemen + warehouses + warehousing + wareroom + wares + warfare + warfarin + warhead + warhorse + warier + wariest + warily + wariness + Waring + warison + warlike + warlock + warlord + warm + warmblooded + warmed + warmer + warmers + warmest + warmhearted + warmheartedly + warming + warmish + warmly + warmness + warmonger + warmouth + warms + warmth + warmup + warn + warned + warner + warning + warningly + warnings + warns + warp + warpath + warped + warper + warping + warplane + warps + warrant + warrantable + warranted + warrantee + warranter + warranties + warranting + warrantor + warrants + warranty + warred + warren + warrener + warring + warrior + warriors + wars + Warsaw + warsaw + warship + warships + warsle + wart + wartier + wartiest + wartime + wartlike + warts + warty + Warwick + wary + was + wash + washable + washbasin + washboard + washbowl + Washburn + washcloth + washday + washed + washer + washerman + washermen + washers + washerwoman + washerwomen + washes + washier + washiest + washing + washings + Washington + washington + washout + washrag + washroom + washstand + washtub + washwoman + washwomen + washy + wasn + wasn't + wasp + waspier + waspiest + waspish + waspishly + waspishness + wasplike + wasps + waspy + wassail + wassailer + Wasserman + wast + wastage + waste + wastebasket + wasted + wasteful + wastefully + wastefulness + wasteland + wastepaper + waster + wastes + wastewater + wasting + wastrel + Watanabe + watch + watchband + watchcase + watchdog + watched + watcher + watchers + watches + watchful + watchfully + watchfulness + watching + watchings + watchmake + watchmaker + watchmaking + watchman + watchmen + watchtower + watchword + watchwords + water + waterage + waterbed + waterborne + waterbrain + waterbuck + waterbucks + Waterbury + watercolor + watercolorist + watercourse + watercraft + watercress + watercycle + watered + waterfall + waterfalls + waterfinder + waterfowl + waterfront + Watergate + waterglass + Waterhouse + wateriness + watering + waterings + waterish + waterleaf + waterless + waterlilies + waterlilly + waterlily + waterline + waterlogged + Waterloo + watermain + Waterman + watermanship + watermark + watermarked + watermelon + waterpower + waterproof + waterproofing + waters + waterscape + watershed + waterside + waterspout + watertight + Watertown + waterway + waterways + waterweed + waterworks + waterworn + watery + watfiv + Watkins + Watson + watt + wattage + wattle + wattlebird + wattled + wattling + wattmeter + waul + wave + waved + waveform + waveforms + wavefront + wavefronts + waveguide + waveguides + wavelength + wavelengths + wavelet + wavelike + wavellite + wavenumber + waver + wavered + wavering + waveringly + wavers + wavery + waves + wavier + waviest + waviness + waving + wavy + wawl + wax + waxberry + waxbill + waxed + waxen + waxer + waxers + waxes + waxier + waxiest + waxiness + waxing + waxwing + waxwork + waxworks + waxy + way + waybill + wayfarer + wayfaring + waygoing + waylaid + waylay + waylayer + waylaying + Wayne + ways + wayside + wayward + waywardly + waywardness + wayworn + we + we'd + we'll + we're + we've + weak + weaken + weakened + weakening + weakens + weaker + weakest + weakfish + weaklier + weakliest + weakliness + weakling + weaklings + weakly + weakness + weaknesses + weal + weald + wealth + wealthier + wealthiest + wealthiness + wealths + wealthy + wean + weaned + weaning + weanling + weapon + weaponry + weapons + wear + wearable + wearer + wearied + wearier + weariest + weariful + wearily + weariness + wearing + wearisome + wearisomely + wearproof + wears + weary + wearying + weasand + weasel + weaselly + weasels + weather + weatherbeaten + weatherboard + weatherboarding + weathercock + weathercocks + weathered + weatherglass + weathering + weatherly + weatherman + weathermen + weatherproof + weathers + weatherstrip + weatherstripped + weatherstripping + weatherworn + weave + weaved + weaver + weaverbird + weavers + weaves + weaving + web + Webb + webbed + webby + weber + webfeet + webfoot + webs + Webster + webworm + webworn + WECo + wed + wedded + wedding + weddings + wedeln + wedge + wedged + wedges + wedging + wedgy + wedlock + Wednesday + wednesday + wednesdays + weds + wee + weed + weeded + weeder + weedier + weediest + weeding + weedkiller + weedlike + weeds + weedy + week + weekday + weekdays + weekend + weekender + weekends + weeklies + weekling + weekly + weeknight + weeks + ween + weenie + weenies + weeny + weep + weeped + weeper + weepier + weepiest + weeping + weeps + weepy + weer + weest + weever + weevil + weevilly + weevily + weft + Wehr + Wei + Weierstrass + weigela + weigh + weighed + weighing + weighings + weighs + weight + weighted + weightier + weightiest + weightiness + weighting + weightings + weightless + weightlessness + weights + weighty + Weinberg + Weinstein + weir + weird + weirdly + weirdness + Weiss + weka + Welch + welcome + welcomed + welcomes + welcoming + weld + welded + welder + welders + welding + Weldon + welds + welfare + welfarism + welkin + well + wellbeing + wellborn + welldoing + welled + Weller + Welles + Wellesley + wellhead + welling + wellington + wells + wellspring + welsh + welsher + welt + welter + welterweight + wen + wench + wenches + wend + wended + Wendell + wending + wends + Wendy + went + wentletrap + wept + were + weren + weren't + werewolf + werewolves + wergeld + Werner + wernerite + wert + Werther + werwolf + weskit + Wesley + Wesleyan + west + westbound + Westchester + wester + westerly + western + westerner + westerners + westernism + westernization + westernize + westernized + westernizing + westernmost + Westfield + westham + westing + Westinghouse + Westminster + Weston + westward + westwardly + westwards + wet + wetback + wether + wetland + wetly + wetness + wets + wettability + wettable + wetted + wetter + wettest + wetting + wettish + Weyerhauser + whack + whacked + whackier + whackiest + whacking + whacks + whacky + whale + whaleback + whaleboat + whalebone + whaled + whaleman + whalemen + Whalen + whaler + whales + whaling + wham + whammed + whammies + whammy + whan + whang + whangee + whap + whapper + wharf + wharfage + wharfinger + wharfs + Wharton + wharve + wharves + what + what'd + what're + whatever + Whatley + whatnot + whatsoever + whaup + wheal + wheat + wheatear + wheaten + Wheatstone + wheatworm + whee + wheedle + wheedled + wheedler + wheedling + wheel + wheelbarrow + wheelbase + wheelchair + wheeled + wheeler + wheelers + wheelhouse + wheeling + wheelings + wheelman + wheels + wheelwork + wheelwright + wheen + wheeze + wheezed + wheezier + wheeziest + wheezing + wheezy + Whelan + whelk + Wheller + whelm + whelp + when + whence + whencesoever + whenever + whensoever + where + where'd + where're + whereabout + whereabouts + whereas + whereat + whereby + wherefore + wherefrom + wherein + whereinto + whereof + whereon + wheresoever + wherethrough + whereto + whereunto + whereupon + wherever + wherewith + wherewithal + wherries + wherry + whet + whether + whetstone + whetted + whew + whey + wheyey + wheyface + which + whichever + whichsoever + whicker + whid + whiff + whiffet + whiffle + whiffler + whiffletree + whig + while + whiled + whiles + whiling + whilom + whilst + whim + whimbrel + whimper + whimpered + whimperer + whimpering + whimpers + whims + whimsey + whimseys + whimsic + whimsical + whimsicalities + whimsicality + whimsically + whimsies + whimsy + whin + whinchat + whine + whined + whiner + whines + whiney + whinier + whiniest + whining + whinnied + whinnies + whinny + whinnying + whiny + whip + whipcord + whiplash + whiplike + whipoorwill + Whippany + whipped + whipper + whippers + whippersnapper + whippet + whipping + whippings + Whipple + whippletree + whippoorwill + whips + whipsaw + whipstall + whipstitch + whir + whirl + whirled + whirler + whirligig + whirling + whirlpool + whirlpools + whirls + whirlwind + whirlybird + whirr + whirred + whirring + whirry + whish + whisk + whisked + whisker + whiskered + whiskers + whiskey + whiskeys + whiskies + whisking + whisks + whisper + whispered + whisperer + whispering + whisperings + whispers + whist + whistle + whistleable + whistled + whistler + whistlers + whistles + whistling + whit + Whitaker + Whitcomb + white + whitebait + whitebeard + whitecap + whitecaps + whiteface + whitefish + Whitehall + whitehead + Whitehorse + whitely + whiten + whitened + whitener + whiteners + whiteness + whitening + whitens + whiteout + whiter + whites + whitesmith + whitespace + whitest + whitetail + whitethroat + whitewall + whitewash + whitewashed + whitewing + whitewood + whither + whithersoever + whitherward + whiting + whitish + whitleather + Whitlock + whitlow + Whitman + Whitney + Whittaker + Whittier + whittle + whittled + whittles + whittling + whiz + whizz + whizzed + whizzes + whizzing + who + who'd + who'll + whoa + whodunit + whoever + whole + wholehearted + wholeheartedly + wholeheartedness + wholeness + wholes + wholesale + wholesaled + wholesaler + wholesalers + wholesaling + wholesome + wholesomely + wholesomeness + wholism + wholly + whom + whomever + whomp + whomsoever + whoop + whooped + whoopee + whooper + whooping + whoops + whoosh + whop + whopped + whopper + whore + whored + whoredom + whorehouse + whoremonger + whores + whoreson + whoring + whorish + whorl + whorled + whorls + whortleberry + whose + whosesoever + whosever + whoso + whosoever + whump + whup + why + whys + WI + Wichita + wick + wicked + wickedly + wickedness + wicker + wickerwork + wicket + wicketkeeper + wicking + wickiup + wicks + wicopy + wide + wideawake + wideband + widely + widen + widened + widener + wideness + widening + widens + wider + widespread + widespreading + widest + widgeon + widget + widow + widowed + widower + widowers + widows + width + widths + widthwise + wied + wield + wielded + wielder + wielding + wields + wieldy + wiener + wienerwurst + Wier + wierd + wife + wifeless + wifely + wig + wigan + wigeon + wigged + wiggery + wigging + Wiggins + wiggle + wiggled + wiggler + wigglier + wiggliest + wiggling + wiggly + wiggy + wight + Wightman + wiglet + wigmake + wigs + wigwag + wigwagged + wigwagging + wigwam + Wilbur + Wilcox + wilcoxon + wild + wildcat + wildcats + wildcatted + wildcatter + wildcatting + wildebeest + wildebeeste + wilder + wilderness + wildest + wildfire + wildflower + wildflowers + wildfowl + wilding + wildlife + wildling + wildly + wildness + wildwood + wile + wiled + wiles + Wiley + Wilfred + wilful + Wilhelm + Wilhelmina + wilier + wiliest + wilily + wiliness + wiling + Wilkes + Wilkie + Wilkins + Wilkinson + will + Willa + Willard + willble + willed + willemite + willet + willful + willfully + willfulness + William + Williamsburg + Williamson + Willie + willies + willing + willingly + willingness + Willis + williwaw + Willoughby + willow + willows + willowy + willpower + wills + willy + willywaw + Wilma + Wilmington + Wilshire + Wilson + wilt + wilted + wilting + wilts + wily + wimble + wimple + wimpled + wimpling + win + wince + winced + winces + winceyette + winch + Winchester + wincing + wind + windage + windbag + windblown + windbreak + windburn + winded + winder + winders + windfall + windflaw + windflower + windgall + windhover + windier + windiest + windily + windiness + winding + windjammer + windlass + windless + windlestraw + windmill + windmills + window + windowing + windowless + windowpane + windows + windowsill + windpipe + windproof + windrow + winds + windshield + windsock + Windsor + windstorm + windstream + windsurf + windup + windward + windy + wine + winebibber + wined + wineglass + wineglasses + winegrowing + winemake + winemaster + winer + wineries + winers + winery + wines + wineskin + winetasting + Winfield + wing + wingate + wingback + winged + winging + winglet + wingman + wingmen + wingover + wings + wingspan + wingspread + wingtip + winier + winiest + Winifred + wining + wink + winked + winker + winking + winkle + winks + winner + winners + Winnetka + Winnie + winning + winningly + winnings + Winnipeg + Winnipesaukee + winnow + wino + winos + wins + Winslow + winsome + winsomely + Winston + winter + winterberry + winterbourne + wintered + winterfeed + wintergreen + wintering + winterize + winterized + winterizing + winterkill + winterly + winters + wintertime + wintery + Winthrop + wintrier + wintriest + wintry + winy + winze + wipe + wiped + wiper + wipers + wipes + wiping + wipstock + wire + wired + wiredraw + wirehair + wireless + wireman + wiremen + wirephoto + wirer + wires + wiretap + wiretapped + wiretapper + wiretappers + wiretapping + wiretaps + wirework + wireworks + wireworm + wirier + wiriest + wiriness + wiring + wiry + Wisconsin + wisconsin + wisdom + wisdoms + wise + wiseacre + wisecrack + wised + wisely + wiseness + wisenheimer + wisent + wiser + wisest + wish + wishbone + wished + wisher + wishers + wishes + wishful + wishfully + wishfulness + wishing + wishy + wisking + wisp + wispier + wispiest + wisps + wispy + wist + wistaria + wisteria + wistful + wistfully + wistfulness + wit + witan + witch + witchcraft + witcheries + witchery + witches + witching + witenagemot + witenagemote + with + withal + withdaw + withdraw + withdrawal + withdrawals + withdrawing + withdrawn + withdraws + withdrew + withe + wither + withering + witherite + withers + withershins + withheld + withhold + withholder + withholders + withholding + withholdings + withholds + within + withindoors + without + withoutdoors + withstand + withstanding + withstands + withstood + withy + witless + witlessly + witlessness + witling + witness + witnessed + witnesses + witnessing + wits + Witt + witted + witticism + wittier + wittiest + wittily + wittiness + wittingly + witty + wive + wived + wives + wiving + wizard + wizardry + wizards + wizen + wizened + wjc + woad + woadwaxen + wobble + wobbled + wobblier + wobbliest + wobbling + wobbly + woe + woebegone + woeful + woefully + woefulness + wok + woke + Wolcott + wold + wolf + wolfberry + Wolfe + Wolff + wolffish + Wolfgang + wolfhound + wolfish + wolfram + wolframite + wolfsbane + wollastonite + wolve + wolverine + wolves + woman + womanhood + womanish + womanize + womanized + womanizer + womanizing + womankind + womanlike + womanliness + womanly + womb + wombat + wombs + women + womenfolk + womenfolks + womera + won + won't + wonder + wondered + wonderful + wonderfully + wonderfulness + wondering + wonderingly + wonderland + wonderment + wonders + wonderstruck + wonderwork + wondrous + wondrously + Wong + wonk + wonky + wont + wonted + woo + wood + Woodard + woodbin + woodbine + Woodbury + woodcarver + woodcarving + woodchat + woodchuck + woodchucks + woodcock + woodcocks + woodcraft + woodcraftsman + woodcut + woodcutter + woodcutting + wooded + wooden + woodenhead + woodenheaded + woodenly + woodenness + woodenware + woodgrain + woodhen + woodier + woodiest + woodiness + woodland + Woodlawn + woodlot + woodlots + woodman + woodmen + woodnote + woodpeck + woodpecker + woodpeckers + woodpile + woodrow + woodruff + woods + woodshed + woodsia + woodside + woodsier + woodsiest + woodsman + woodsmen + woodsy + woodward + woodwaxen + woodwind + woodwork + woodworking + woodworm + woody + woodyard + wooed + wooer + woof + woofed + woofer + woofers + woofing + woofs + wooing + wool + woolen + woolf + woolfell + woolgather + woolgatherer + woolgathering + woolgrower + woollen + woollier + woollies + woolliest + woollike + woolliness + woolly + woolpack + wools + woolsack + woolshed + Woolworth + wooly + woomera + woorali + woordbook + woos + Wooster + woozier + wooziest + woozily + wooziness + woozy + wop + Worcester + word + wordage + worded + wordier + wordiest + wordily + wordiness + wording + wordless + wordplay + words + Wordsworth + wordy + wore + work + workability + workable + workably + workaday + workbag + workbench + workbenches + workbook + workbooks + workbox + workday + worked + worker + workers + workfile + workfolk + workforce + workhorse + workhorses + workhouse + working + workingman + workingmen + workings + workingwoman + workingwomen + workingwonan + workload + workman + workmanly + workmanship + workmen + workout + workpeople + workpiece + workplace + workroom + works + worksheet + worksheets + workshop + workshops + workspace + workstation + workstations + worktable + workweek + workwoman + world + worldbeater + worldlier + worldliest + worldliness + worldling + worldly + worlds + worldwide + worm + wormed + wormhole + wormier + wormiest + worming + wormlike + wormroot + worms + wormseed + wormwood + wormy + worn + worried + worrier + worriers + worries + worriment + worrisome + worry + worrying + worryingly + worrywart + worrywort + worse + worsen + worship + worshiped + worshiper + worshipful + worshiping + worshipped + worshipper + worshipping + worships + worst + worsted + wort + worth + worthier + worthies + worthiest + worthily + worthiness + Worthington + worthless + worthlessly + worthlessness + worths + worthwhile + worthwhileness + worthy + Wotan + would + wouldn + wouldn't + wouldst + wound + wounded + wounding + wounds + woundwort + wove + woven + wow + wowser + wrack + wraith + wrangle + wrangled + wrangler + wrangling + wrap + wraparound + wrapped + wrapper + wrappers + wrapping + wrappings + wraps + wrapt + wrapup + wrasse + wrath + wrathful + wrathfully + wrathfulness + wreak + wreaks + wreath + wreathe + wreathed + wreathes + wreathing + wreaths + wreck + wreckage + wrecked + wrecker + wreckers + wrecking + wrecks + wren + wrench + wrenched + wrenches + wrenching + wrens + wrest + wrestle + wrestled + wrestler + wrestles + wrestling + wrestlings + wretch + wretched + wretchedly + wretchedness + wretches + wrick + wrier + wriest + wriggle + wriggled + wriggler + wriggles + wriggling + wriggly + wright + Wrigley + wring + wringed + wringer + wringing + wrings + wrinkle + wrinkled + wrinkles + wrinklier + wrinkliest + wrinkling + wrinkly + wrist + wristband + wristlet + wristlock + wrists + wristwatch + wristwatches + writ + writable + write + writer + writers + writes + writeup + writeups + writhe + writhed + writhes + writhing + writing + writings + writs + written + wrong + wrongdoer + wrongdoing + wronged + wrongfile + wrongful + wrongfully + wrongfulness + wrongheaded + wrongheadedly + wrongheadedness + wronging + wrongly + wrongness + wrongs + Wronskian + wrote + wroth + wrought + wrung + wry + wryly + wryneck + wryness + Wu + Wuhan + wulfenite + wunderbar + wurst + WV + WY + Wyandotte + Wyatt + wye + Wyeth + Wylie + Wyman + Wyner + wynn + wynne + Wyoming + wyoming + wyvern + x + x's + xanthate + xanthein + xanthene + xanthic + xanthoma + xanthone + xanthophyll + xanthous + xanthrochroid + Xavier + xctl + xebec + xenia + xenogamy + xenogenesis + xenolith + xenomorphic + xenon + xenophobia + xerarch + xeric + xerographic + xerography + xerophilous + xerophthalmia + xerophyte + xerosere + xerosis + xerothermic + xerox + Xerxes + xi + xiphisternum + xiphoid + xiphosuran + xref + xylan + xylem + xylene + xylidine + xylograph + xylography + xyloid + xylophagous + xylophone + xylose + xylotomous + xylotomy + xyster + xyz + y + y's + yabber + yacht + yachting + yachtsman + yachtsmen + yagi + yah + yahrzeit + yak + Yakima + Yale + yale + Yalta + yam + Yamaha + yamalka + yamen + yammer + yamulka + yang + yank + yanked + Yankee + yanking + yanks + Yankton + Yaounde + yap + yapock + yapok + yapping + Yaqui + yard + yardage + yardarm + yardbird + yardland + yardman + yardmaster + yards + yardstick + yardsticks + yare + yarmalke + Yarmouth + yarmulke + yarn + yarns + yarovize + yarrow + yashmac + yashmak + yatagan + yataghan + Yates + yatter + yaupon + yaw + yawl + yawn + yawner + yawning + yawp + yaws + ycleped + yclept + ye + yea + Yeager + yeah + yean + yeanling + yeaoman + year + yearbook + yearling + yearlong + yearly + yearn + yearned + yearning + yearnings + years + yeas + yeasayer + yeast + yeastier + yeastiest + yeasts + yeasty + Yeats + yegg + yell + yelled + yeller + yelling + yellow + yellowbird + yellowcake + yellowed + yellower + yellowest + yellowhammer + yellowing + yellowish + Yellowknife + yellowlegs + yellowness + yellows + Yellowstone + yellowtail + yellowthroat + yellowweed + yellowwood + yellowy + yelp + yelped + yelping + yelps + Yemen + yen + yenned + yenning + yenta + yente + yeoman + yeomanly + yeomanry + yeomen + yes + yeses + yeshiva + yessed + yessing + yester + yesterday + yesterdays + yesterevening + yestermorning + yesternight + yesteryear + yestreen + yet + yeti + yew + Yiddish + yield + yielded + yielding + yields + yin + yip + yipe + yipped + yippie + yipping + ylem + YMCA + yod + yodel + yodeled + yodeler + yodeling + yodelled + yodeller + yodelling + Yoder + yodh + yoga + yogh + yoghurt + yogi + yogic + yogin + yogis + yogurt + yohimbine + yoicks + yoke + yoked + yokefellow + yokel + yokes + yoking + Yokohama + Yokuts + yolk + yolked + yolks + yolky + yon + yond + yonder + yoni + Yonkers + yore + York + york + yorker + yorkers + Yorktown + Yosemite + Yost + you + you'd + you'll + you're + you've + young + youngberry + younger + youngest + youngish + youngling + youngly + youngness + youngster + youngsters + Youngstown + your + yours + yourself + yourselves + youth + youthes + youthful + youthfully + youthfulness + youths + yow + yowl + Ypsilanti + ytterbia + ytterbic + ytterbium + ytterbous + yttria + yttric + yttrium + yuan + Yucatan + yucca + yuck + Yugoslav + Yugoslavia + yugoslavia + yugoslavian + yuh + yuk + yukata + Yuki + yukked + yukking + Yukon + yule + yuletide + yummier + yummiest + yummy + yurt + Yves + Yvette + YWCA + z + z's + zabaglione + Zachary + zag + zagging + Zagreb + Zaire + Zambia + zamia + zaminder + Zan + zanier + zanies + zaniest + zanily + zaniness + zany + Zanzibar + zap + zapped + zaratite + zareba + zareeba + zarf + zarzuela + zax + zayin + zazen + zeal + Zealand + zealand + zealot + zealotry + zealous + zealously + zealousness + zebec + zebeck + zebra + zebras + zebrass + zebu + zed + zedoary + zee + Zeiss + Zellerbach + Zen + zenana + zenith + zeolite + zephyr + zeppelin + zero + zeroed + zeroes + zeroeth + zeroing + zeros + zeroth + zest + zestful + zesty + zeta + zeugma + Zeus + zibeline + zibet + zibeth + Ziegler + zig + zigamorph + zigging + ziggurat + zigzag + zigzagged + zigzagging + zilch + zillah + zillion + zillions + Zimmerman + zinc + zincate + zincenite + zinciferous + zincify + zincite + zincography + zincoid + zing + zinger + zinnia + Zion + zip + zipped + zipper + zippier + zippiest + zippy + zips + zircon + zirconate + zirconia + zirconium + zither + zitzit + zitzith + zloty + zoantharian + zoanthropy + zodiac + zodiacal + Zoe + zoea + zoisite + Zomba + zombi + zombie + zonal + zonally + zonary + zonate + zonation + zone + zoned + zones + zoning + zonule + zoo + zoochemistry + zooflagellate + zoogamete + zoogenic + zoogeography + zoogloea + zoogrpahy + zooid + zooidal + zoolatry + zoological + zoologically + zoologist + zoology + zoom + zoomed + zoometry + zooming + zoomorphic + zoomorphism + zooms + zoonosis + zooparasite + zoophagus + zoophilous + zoophism + zoophobia + zoophyte + zoophytic + zooplankton + zoos + zoosporangium + zoospore + zoosterol + zootomy + zori + zoril + zorille + zoris + Zorn + Zoroaster + Zoroastrian + zoster + zounds + zoysia + zucchini + zucchinis + zuchetto + Zurich + zurich + zwieback + zwitterion + zygapophysis + zygodactyl + zygogenesis + zygoid + zygoma + zygomatic + zygomorphic + zygospore + zygote + zygotene + zymase + zyme + zymogen + zymogenesis + zymogenic + zymology + zymolysis + zymometer + zymosis + zymotic + zymurgy Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/words-small.awk diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/words-small.awk:1.1 *** /dev/null Mon Feb 23 11:06:11 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/INPUT/words-small.awk Mon Feb 23 11:06:00 2004 *************** *** 0 **** --- 1,25144 ---- + 10th + 1st + 2nd + 3rd + 4th + 5th + 6th + 7th + 8th + 9th + a + AAA + AAAS + Aarhus + Aaron + AAU + ABA + Ababa + aback + abacus + abalone + abandon + abase + abash + abate + abater + abbas + abbe + abbey + abbot + Abbott + abbreviate + abc + abdicate + abdomen + abdominal + abduct + Abe + abed + Abel + Abelian + Abelson + Aberdeen + Abernathy + aberrant + aberrate + abet + abetted + abetting + abeyance + abeyant + abhorred + abhorrent + abide + Abidjan + Abigail + abject + ablate + ablaze + able + ablution + Abner + abnormal + Abo + aboard + abode + abolish + abolition + abominable + abominate + aboriginal + aborigine + aborning + abort + abound + about + above + aboveboard + aboveground + abovementioned + abrade + Abraham + Abram + Abramson + abrasion + abrasive + abreact + abreast + abridge + abridgment + abroad + abrogate + abrupt + abscess + abscissa + abscissae + absence + absent + absentee + absenteeism + absentia + absentminded + absinthe + absolute + absolution + absolve + absorb + absorbent + absorption + absorptive + abstain + abstention + abstinent + abstract + abstracter + abstractor + abstruse + absurd + abuilding + abundant + abusable + abuse + abusive + abut + abutted + abutting + abysmal + abyss + Abyssinia + AC + academe + academia + academic + academician + academy + Acadia + acanthus + Acapulco + accede + accelerate + accelerometer + accent + accentual + accentuate + accept + acceptant + acceptor + access + accessible + accession + accessory + accident + accidental + accipiter + acclaim + acclamation + acclimate + accolade + accommodate + accompaniment + accompanist + accompany + accomplice + accomplish + accord + accordant + accordion + accost + account + accountant + Accra + accredit + accreditate + accreditation + accretion + accrual + accrue + acculturate + accumulate + accuracy + accurate + accusation + accusative + accusatory + accuse + accustom + ace + acerbic + acerbity + acetate + acetic + acetone + acetylene + ache + achieve + Achilles + aching + achromatic + acid + acidic + acidulous + Ackerman + Ackley + acknowledge + acknowledgeable + ACM + acme + acolyte + acorn + acoustic + acquaint + acquaintance + acquiesce + acquiescent + acquire + acquisition + acquisitive + acquit + acquittal + acquitting + acre + acreage + acrid + acrimonious + acrimony + acrobacy + acrobat + acrobatic + acronym + acropolis + across + acrylate + acrylic + ACS + act + Actaeon + actinic + actinide + actinium + actinolite + actinometer + activate + activation + activism + Acton + actor + actress + Acts + actual + actuarial + actuate + acuity + acumen + acute + acyclic + ad + Ada + adage + adagio + Adair + Adam + adamant + Adams + Adamson + adapt + adaptation + adaptive + add + added + addend + addenda + addendum + addict + Addis + Addison + addition + additional + additive + addle + address + addressee + Addressograph + adduce + Adelaide + Adele + Adelia + Aden + adenine + adenoma + adenosine + adept + adequacy + adequate + adhere + adherent + adhesion + adhesive + adiabatic + adieu + adipic + Adirondack + adjacent + adject + adjectival + adjective + adjoin + adjoint + adjourn + adjudge + adjudicate + adjunct + adjust + adjutant + Adkins + Adler + administer + administrable + administrate + administratrix + admiral + admiralty + admiration + admire + admissible + admission + admit + admittance + admitted + admitting + admix + admixture + admonish + admonition + ado + adobe + adolescent + Adolph + Adolphus + Adonis + adopt + adoption + adoptive + adore + adorn + adposition + adrenal + adrenaline + Adrian + Adriatic + Adrienne + adrift + adroit + adsorb + adsorbate + adsorption + adsorptive + adulate + adult + adulterate + adulterous + adultery + adulthood + advance + advantage + advantageous + advent + adventitious + adventure + adventurous + adverb + adverbial + adversary + adverse + advert + advertise + advice + advisable + advise + advisee + advisor + advisory + advocacy + advocate + Aegean + aegis + Aeneas + Aeneid + aeolian + Aeolus + aerate + aerial + Aerobacter + aerobic + aerodynamic + aerogene + aeronautic + aerosol + aerospace + Aeschylus + aesthete + aesthetic + afar + affable + affair + affect + affectate + affectation + affectionate + afferent + affiance + affidavit + affiliate + affine + affinity + affirm + affirmation + affirmative + affix + afflict + affluence + affluent + afford + afforest + afforestation + affricate + affront + Afghan + Afghanistan + aficionado + afield + afire + aflame + afloat + afoot + aforementioned + aforesaid + aforethought + afoul + afraid + afresh + Africa + afro + aft + aftereffect + afterglow + afterimage + afterlife + aftermath + afternoon + afterthought + afterward + afterword + again + against + Agamemnon + agate + Agatha + agave + age + Agee + agenda + agent + agglomerate + agglutinate + agglutinin + aggravate + aggregate + aggression + aggressive + aggressor + aggrieve + aghast + agile + aging + agitate + agleam + Agnes + Agnew + agnomen + agnostic + ago + agone + agony + agouti + agrarian + agree + agreeable + agreed + agreeing + agribusiness + Agricola + agricultural + agriculture + agrimony + ague + Agway + ah + ahead + ahem + Ahmadabad + Ahmedabad + ahoy + aid + Aida + aide + Aides + Aiken + ail + ailanthus + aile + Aileen + aileron + aim + ain't + Ainu + air + airborne + aircraft + airdrop + airedale + Aires + airfare + airfield + airflow + airfoil + airframe + airlift + airline + airlock + airmail + airman + airmass + airmen + airpark + airplane + airport + airspace + airspeed + airstrip + airtight + airway + airy + aisle + Aitken + ajar + Ajax + AK + Akers + akin + Akron + AL + ala + Alabama + Alabamian + alabaster + alacrity + alai + Alameda + Alamo + Alan + alan + alarm + Alaska + alb + alba + albacore + Albania + Albanian + Albany + albatross + albeit + Alberich + Albert + Alberta + Alberto + Albrecht + Albright + album + albumin + Albuquerque + Alcestis + alchemy + Alcmena + Alcoa + alcohol + alcoholic + alcoholism + Alcott + alcove + Aldebaran + aldehyde + Alden + alder + alderman + aldermen + Aldrich + aldrin + ale + Alec + Aleck + aleph + alert + alewife + Alex + Alexander + Alexandra + Alexandre + Alexandria + Alexei + Alexis + alfalfa + Alfonso + alfonso + Alfred + Alfredo + alfresco + alga + algae + algaecide + algal + algebra + algebraic + Algenib + Alger + Algeria + Algerian + Algiers + alginate + Algol + Algonquin + algorithm + algorithmic + Alhambra + Ali + alia + alias + alibi + Alice + Alicia + alien + alienate + alight + align + alike + alimony + aliphatic + aliquot + Alison + Alistair + alive + alizarin + alkali + alkaline + alkaloid + alkane + alkene + all + Allah + Allan + allay + allegate + allegation + allege + Allegheny + allegiant + allegoric + allegory + Allegra + allegro + allele + allemand + Allen + Allentown + allergic + allergy + alleviate + alley + alleyway + alliance + allied + alligator + Allis + Allison + alliterate + allocable + allocate + allot + allotropic + allotted + allotting + allow + allowance + alloy + allspice + Allstate + allude + allure + allusion + allusive + alluvial + alluvium + ally + allyl + Allyn + alma + Almaden + almagest + almanac + almighty + almond + almost + aloe + aloft + aloha + alone + along + alongside + aloof + aloud + alp + alpenstock + Alpert + alpha + alphabet + alphabetic + alphameric + alphanumeric + Alpheratz + Alphonse + alpine + Alps + already + Alsatian + also + Alsop + Altair + altar + alter + alterate + alteration + altercate + alterman + altern + alternate + althea + although + altimeter + altitude + alto + altogether + Alton + altruism + altruist + alum + alumina + aluminate + alumna + alumnae + alumni + alumnus + alundum + Alva + Alvarez + alveolar + alveoli + alveolus + Alvin + alway + always + alyssum + am + A&M + AMA + Amadeus + amalgam + amalgamate + amanita + amanuensis + amaranth + Amarillo + amass + amateur + amateurish + amatory + amaze + Amazon + ambassador + amber + ambiance + ambidextrous + ambient + ambiguity + ambiguous + ambition + ambitious + ambivalent + amble + ambling + ambrose + ambrosia + ambrosial + ambulant + ambulate + ambulatory + ambuscade + ambush + Amelia + ameliorate + amen + amend + amende + Amerada + America + American + Americana + Americanism + americium + Ames + Ameslan + amethyst + amethystine + Amherst + ami + amicable + amid + amide + amidst + amigo + amino + aminobenzoic + amiss + amity + Amman + Ammerman + ammeter + ammo + ammonia + ammoniac + ammonium + ammunition + amnesia + Amoco + amoeba + amoebae + amok + among + amongst + amoral + amorous + amorphous + amort + Amos + amount + amp + amperage + ampere + ampersand + Ampex + amphetamine + amphibian + amphibious + amphibole + amphibology + amphioxis + ample + amplifier + amplify + amplitude + amply + amputate + amputee + amra + Amsterdam + Amtrak + amulet + amuse + Amy + amy + amygdaloid + an + ana + Anabaptist + Anabel + anachronism + anachronistic + anaconda + anaerobic + anaglyph + anagram + Anaheim + analeptic + analgesic + analogous + analogue + analogy + analyses + analysis + analyst + analytic + anamorphic + anaplasmosis + anarch + anarchic + anarchy + Anastasia + anastigmat + anastigmatic + anastomosis + anastomotic + anathema + Anatole + anatomic + anatomy + ancestor + ancestral + ancestry + anchor + anchorage + anchorite + anchoritism + anchovy + ancient + ancillary + and + Andean + Andersen + Anderson + Andes + andesine + andesite + andiron + Andorra + Andover + Andre + Andrea + Andrei + Andrew + Andrews + Andromache + Andromeda + Andy + anecdotal + anecdote + anemone + anent + anew + angel + Angela + Angeles + angelfish + angelic + Angelica + Angelina + Angeline + Angelo + anger + Angie + angiosperm + angle + Angles + Anglican + Anglicanism + angling + Anglo + Anglophobia + Angola + Angora + angry + angst + angstrom + anguish + angular + Angus + anharmonic + Anheuser + anhydride + anhydrite + anhydrous + ani + aniline + animadversion + animadvert + animal + animate + animism + animosity + anion + anionic + anise + aniseikonic + anisotropic + anisotropy + Anita + Ankara + ankle + Ann + Anna + annal + Annale + Annalen + annals + Annapolis + Anne + anneal + Annette + annex + Annie + annihilate + anniversary + annotate + announce + annoy + annoyance + annual + annuity + annul + annular + annuli + annulled + annulling + annulus + annum + annunciate + anode + anodic + anomalous + anomaly + anomie + anonymity + anonymous + anorexia + anorthic + anorthite + anorthosite + another + Anselm + Anselmo + ANSI + answer + ant + antacid + Antaeus + antagonism + antagonist + antagonistic + antarctic + Antarctica + Antares + ante + anteater + antebellum + antecedent + antedate + antelope + antenna + antennae + anterior + anteroom + anthem + anther + anthology + Anthony + anthracite + anthracnose + anthropogenic + anthropology + anthropomorphic + anthropomorphism + anti + antic + anticipate + anticipatory + Antietam + antigen + Antigone + antigorite + antimony + Antioch + antipasto + antipathy + antiperspirant + antiphonal + antipode + antipodean + antipodes + antiquarian + antiquary + antiquated + antique + antiquity + antisemite + antisemitic + antisemitism + antithetic + antler + Antoine + Antoinette + Anton + Antonio + Antony + antonym + Antwerp + anus + anvil + anxiety + anxious + any + anybody + anybody'd + anyhow + anyone + anyplace + anything + anyway + anywhere + aorta + apace + A&P + apache + apart + apartheid + apathetic + apathy + apatite + ape + aperiodic + aperture + apex + aphasia + aphasic + aphelion + aphid + aphorism + Aphrodite + apices + apiece + aplomb + apocalypse + apocalyptic + Apocrypha + apocryphal + apogee + Apollo + Apollonian + apologetic + apologia + apology + apostate + apostle + apostolic + apostrophe + apothecary + apothegm + apotheosis + Appalachia + appall + appanage + apparatus + apparel + apparent + apparition + appeal + appear + appearance + appeasable + appease + appellant + appellate + append + appendage + appendices + appendix + apperception + appertain + appetite + Appian + applaud + applause + apple + Appleby + applejack + Appleton + appliance + applicable + applicant + applicate + application + applied + applique + apply + appoint + appointe + appointee + apport + apportion + apposite + apposition + appraisal + appraise + appreciable + appreciate + apprehend + apprehension + apprehensive + apprentice + apprise + approach + approbation + appropriable + appropriate + approval + approve + approximable + approximant + approximate + Apr + apricot + April + apron + apropos + APS + apse + apt + aptitude + aqua + aquarium + Aquarius + aquatic + aqueduct + aqueous + Aquila + Aquinas + AR + Arab + arabesque + Arabia + Arabic + Araby + Arachne + arachnid + arbiter + arbitrage + arbitrary + arbitrate + arboreal + arboretum + arbutus + arc + arcade + Arcadia + arcana + arcane + arccos + arccosine + arch + archae + archaic + archaism + archangel + archbishop + archdiocese + archenemy + Archer + archery + archetype + archetypical + archfool + Archibald + Archimedes + arching + archipelago + architect + architectonic + architectural + architecture + archival + archive + arcing + arclength + arcsin + arcsine + arctan + arctangent + arctic + Arcturus + Arden + ardency + ardent + arduous + are + area + areaway + areawide + arena + arenaceous + aren't + Arequipa + Ares + Argentina + argillaceous + arginine + Argive + argo + argon + Argonaut + Argonne + argot + argue + argument + argumentation + argumentative + Argus + arhat + Ariadne + Arianism + arid + Aries + arise + arisen + aristocracy + aristocrat + aristocratic + Aristotelean + Aristotelian + Aristotle + arithmetic + Arizona + ark + Arkansan + Arkansas + Arlen + Arlene + Arlington + arm + armada + armadillo + Armageddon + armament + Armata + armature + armchair + Armco + Armenia + Armenian + armful + armhole + armillaria + armistice + armload + armoire + Armonk + Armour + armpit + Armstrong + army + Arnold + aroma + aromatic + arose + around + arousal + arouse + ARPA + arpeggio + arrack + Arragon + arraign + arrange + arrangeable + array + arrear + arrest + Arrhenius + arrival + arrive + arrogant + arrogate + arrow + arrowhead + arrowroot + arroyo + arsenal + arsenate + arsenic + arsenide + arsine + arson + art + Artemis + artemisia + arterial + arteriole + arteriolosclerosis + arteriosclerosis + artery + artful + arthritis + Arthur + artichoke + article + articulate + articulatory + Artie + artifact + artifice + artificial + artillery + artisan + artistry + Arturo + artwork + arty + Aruba + arum + aryl + a's + as + asbestos + ascend + ascendant + ascension + ascent + ascertain + ascetic + asceticism + ascomycetes + ascribe + ascription + aseptic + asexual + ash + ashame + ashamed + ashen + Asher + Asheville + Ashland + Ashley + ashman + ashmen + Ashmolean + ashore + ashtray + ashy + Asia + Asiatic + aside + Asilomar + asinine + ask + askance + askew + asleep + asocial + asparagine + asparagus + aspartic + aspect + aspen + asperity + aspersion + asphalt + aspheric + asphyxiate + aspidistra + aspirant + aspirate + aspire + aspirin + asplenium + ass + assai + assail + assailant + Assam + assassin + assassinate + assault + assay + assemblage + assemble + assent + assert + assess + assessor + asset + assiduity + assiduous + assign + assignation + assignee + assimilable + assimilate + assist + assistant + associable + associate + assonant + assort + assuage + assume + assumption + assurance + assure + Assyria + Assyriology + Astarte + astatine + aster + asteria + asterisk + asteroid + asteroidal + asthma + astigmat + astigmatic + astigmatism + ASTM + astonish + Astor + Astoria + astound + astraddle + astral + astray + astride + astringent + astrology + astronaut + astronautic + astronomer + astronomic + astronomy + astrophysical + astrophysicist + astrophysics + astute + Asuncion + asunder + asylum + asymmetry + asymptote + asymptotic + asynchronous + asynchrony + at + Atalanta + atavism + atavistic + Atchison + ate + Athabascan + atheism + atheist + Athena + Athenian + Athens + athlete + athletic + athwart + Atkins + Atkinson + Atlanta + atlantes + Atlantic + atlantic + Atlantica + Atlantis + atlas + atmosphere + atmospheric + atom + atomic + atonal + atone + atop + Atreus + atrium + atrocious + atrocity + atrophic + atrophy + Atropos + AT&T + attach + attache + attack + attain + attainder + attempt + attend + attendant + attendee + attention + attentive + attenuate + attest + attestation + attic + Attica + attire + attitude + attitudinal + attorney + attract + attribute + attribution + attributive + attrition + attune + Atwater + Atwood + atypic + Auberge + Aubrey + auburn + Auckland + auction + auctioneer + audacious + audacity + audible + audience + audio + audiotape + audiovisual + audit + audition + auditor + auditorium + auditory + Audrey + Audubon + Auerbach + Aug + Augean + augend + auger + augite + augment + augmentation + augur + august + Augusta + Augustan + Augustine + Augustus + auk + aunt + auntie + aura + aural + Aurelius + aureomycin + auric + Auriga + aurochs + aurora + Auschwitz + auspices + auspicious + austenite + austere + Austin + Australia + Australis + australite + Austria + authentic + authenticate + author + authoritarian + authoritative + autism + autistic + auto + autobiography + autoclave + autocollimate + autocorrelate + autocracy + autocrat + autocratic + autograph + automat + automata + automate + automatic + automaton + automobile + automorphic + automorphism + automotive + autonomic + autonomous + autonomy + autopsy + autosuggestible + autotransformer + autumn + autumnal + auxiliary + avail + avalanche + avarice + avaricious + Ave + avenge + Aventine + avenue + aver + average + averred + averring + averse + aversion + avert + avertive + Avery + Avesta + aviary + aviate + aviatrix + avid + avionic + Avis + Aviv + avocado + avocate + avocation + avocet + Avogadro + avoid + avoidance + Avon + avow + avowal + avuncular + await + awake + awaken + award + aware + awash + away + awe + awesome + awful + awhile + awkward + awl + awn + awoke + awry + ax + axe + axes + axial + axiology + axiom + axiomatic + axis + axisymmetric + axle + axolotl + axon + aye + Ayers + Aylesbury + AZ + azalea + Azerbaijan + azimuth + azimuthal + Aztec + Aztecan + azure + b + babbitt + babble + Babcock + babe + Babel + baboon + baby + babyhood + Babylon + Babylonian + babysat + babysit + babysitter + babysitting + baccalaureate + baccarat + Bacchus + Bach + bachelor + bacilli + bacillus + back + backboard + backbone + backdrop + backfill + backgammon + background + backhand + backlash + backlog + backorder + backpack + backplane + backplate + backscatter + backside + backspace + backstage + backstitch + backstop + backtrack + backup + backward + backwater + backwood + backyard + bacon + bacteria + bacterial + bacterium + bad + bade + Baden + badge + badinage + badland + badminton + Baffin + baffle + bag + bagatelle + bagel + baggage + bagging + baggy + Baghdad + Bagley + bagpipe + bah + Bahama + Bahrein + bail + Bailey + bailiff + bainite + Baird + bait + bake + Bakelite + Bakersfield + bakery + Bakhtiari + baklava + Baku + balance + Balboa + balcony + bald + baldpate + Baldwin + baldy + bale + baleen + baleful + Balfour + Bali + Balinese + balk + Balkan + balky + ball + ballad + Ballard + ballast + balled + ballerina + ballet + balletic + balletomane + ballfield + balloon + ballot + ballroom + ballyhoo + balm + balmy + balsa + balsam + Baltic + Baltimore + Baltimorean + balustrade + Balzac + bam + Bamako + Bamberger + Bambi + bamboo + ban + Banach + banal + banana + Banbury + band + bandage + bandgap + bandit + bandpass + bandstand + bandstop + bandwagon + bandwidth + bandy + bane + baneberry + baneful + bang + bangkok + Bangladesh + bangle + Bangor + Bangui + banish + banister + banjo + bank + bankrupt + bankruptcy + Banks + banquet + banshee + bantam + banter + Bantu + Bantus + baptism + baptismal + Baptist + Baptiste + baptistery + bar + barb + Barbados + Barbara + barbarian + barbaric + barbarism + barbarous + barbecue + barbell + barber + barberry + barbital + barbiturate + Barbour + barbudo + Barcelona + Barclay + bard + bare + barefaced + barefoot + barfly + bargain + barge + baritone + barium + bark + barkeep + barley + Barlow + barn + Barnabas + barnacle + Barnard + Barnes + Barnet + Barnett + Barney + Barnhard + barnstorm + barnyard + barometer + baron + baroness + baronet + baronial + barony + baroque + Barr + barrack + barracuda + barrage + barre + barrel + barren + Barrett + barrette + barricade + barrier + Barrington + barrow + Barry + Barrymore + Barstow + Bart + bartend + bartender + barter + Barth + Bartholomew + Bartlett + Bartok + Barton + barycentric + basal + basalt + base + baseball + baseband + baseboard + Basel + baseline + baseman + basemen + baseplate + basepoint + bash + bashaw + bashful + basic + basidiomycetes + basil + basilar + basilisk + basin + basis + bask + basket + basketball + basophilic + bass + Bassett + bassi + bassinet + basso + basswood + bastard + baste + bastion + bat + Batavia + batch + Batchelder + bate + bateau + Bateman + bater + Bates + bath + bathe + bathos + bathrobe + bathroom + bathtub + Bathurst + batik + baton + Bator + batt + battalion + Battelle + batten + battery + battle + battlefield + battlefront + battleground + batwing + bauble + baud + Baudelaire + Bauer + Bauhaus + Bausch + bauxite + Bavaria + bawd + bawdy + bawl + Baxter + bay + bayberry + Bayda + bayed + Bayesian + Baylor + bayonet + Bayonne + bayou + Bayport + Bayreuth + bazaar + be + beach + beachcomb + beachhead + beacon + bead + beadle + beady + beak + beam + bean + bear + bearberry + beard + Beardsley + bearish + beast + beastie + beat + beaten + beater + beatific + beatify + beatitude + beatnik + Beatrice + beau + Beaujolais + Beaumont + Beauregard + beauteous + beautiful + beautify + beauty + beaux + beaver + bebop + becalm + became + because + Bechtel + beck + Becker + becket + Beckman + beckon + Becky + becloud + become + bed + bedazzle + bedbug + bedevil + bedfast + Bedford + bedim + bedimmed + bedimming + bedlam + bedpost + bedraggle + bedridden + bedrock + bedroom + bedside + bedspread + bedspring + bedstraw + bedtime + bee + Beebe + beebread + beech + Beecham + beechwood + beef + beefsteak + beefy + beehive + been + beep + beer + beet + Beethoven + beetle + befall + befallen + befell + befit + befitting + befog + befogging + before + beforehand + befoul + befuddle + beg + began + beget + begetting + beggar + beggary + begging + begin + beginner + beginning + begonia + begotten + begrudge + beguile + begun + behalf + behave + behavioral + behead + beheld + behest + behind + behold + beige + Beijing + being + Beirut + bel + Bela + belate + belch + Belfast + belfry + Belgian + Belgium + Belgrade + belie + belief + belies + believe + belittle + bell + Bella + belladonna + Bellamy + Bellatrix + bellboy + belle + bellflower + bellhop + bellicose + belligerent + Bellingham + Bellini + bellman + bellmen + bellow + bellum + bellwether + belly + bellyache + bellyfull + Belmont + Beloit + belong + belove + below + Belshazzar + belt + Beltsville + belvedere + belvidere + belying + BEMA + bemadden + beman + bemoan + bemuse + Ben + bench + benchmark + bend + Bender + Bendix + beneath + Benedict + Benedictine + benediction + Benedikt + benefactor + benefice + beneficent + beneficial + beneficiary + benefit + Benelux + benevolent + Bengal + Bengali + benight + benign + Benjamin + Bennett + Bennington + Benny + Benson + bent + Bentham + benthic + Bentley + Benton + Benz + Benzedrine + benzene + Beograd + Beowulf + beplaster + bequeath + bequest + berate + Berea + bereave + bereft + Berenices + Beresford + beret + berg + bergamot + Bergen + Bergland + Berglund + Bergman + Bergson + Bergstrom + beribbon + beriberi + Berkeley + berkelium + Berkowitz + Berkshire + Berlin + Berlioz + Berlitz + Berman + Bermuda + Bern + Bernadine + Bernard + Bernardino + Bernardo + berne + Bernet + Bernhard + Bernice + Bernie + Berniece + Bernini + Bernoulli + Bernstein + Berra + berry + berserk + Bert + berth + Bertha + Bertie + Bertram + Bertrand + Berwick + beryl + beryllium + beseech + beset + besetting + beside + besiege + besmirch + besotted + bespeak + bespectacled + bespoke + Bess + Bessel + Bessemer + Bessie + best + bestial + bestir + bestirring + bestow + bestowal + bestseller + bestselling + bestubble + bet + beta + betatron + betel + Betelgeuse + beth + bethel + Bethesda + Bethlehem + bethought + betide + betoken + betony + betray + betrayal + betrayer + betroth + betrothal + Betsey + Betsy + Bette + bettor + Betty + between + betwixt + bevel + beverage + Beverly + bevy + bewail + beware + bewhisker + bewilder + bewitch + bey + beyond + bezel + bhoy + Bhutan + Bialystok + bianco + bias + biaxial + bib + bibb + Bible + biblical + bibliography + bibliophile + bicameral + bicarbonate + bicentennial + bicep + biceps + bichromate + bicker + biconcave + biconnected + bicycle + bid + biddable + bidden + biddy + bide + bidiagonal + bidirectional + bien + biennial + biennium + bifocal + bifurcate + big + Bigelow + Biggs + bigot + bigotry + biharmonic + bijection + bijective + bijouterie + bike + bikini + bilabial + bilateral + bilayer + bile + bilge + bilharziasis + bilinear + bilingual + bilk + bill + billboard + billet + billfold + billiard + Billie + Billiken + Billings + billion + billionth + billow + billy + Biltmore + bimetallic + bimetallism + Bimini + bimodal + bimolecular + bimonthly + bin + binary + binaural + bind + bindery + bindle + bindweed + bing + binge + Bingham + Binghamton + bingle + Bini + binocular + binomial + binuclear + biochemic + biography + biology + Biometrika + biometry + biopsy + biota + biotic + biotite + bipartisan + bipartite + biplane + bipolar + biracial + birch + bird + birdbath + birdie + birdlike + birdseed + birdwatch + birefringent + Birgit + Birmingham + birth + birthday + birthplace + birthright + biscuit + bisect + bisexual + bishop + bishopric + Bismarck + Bismark + bismuth + bison + bisque + Bissau + bistable + bistate + bit + bitch + bite + bitnet + bitt + bitten + bittern + bitternut + bitterroot + bittersweet + bitumen + bituminous + bitwise + bivalve + bivariate + bivouac + biz + bizarre + Bizet + blab + black + blackball + blackberry + blackbird + blackboard + blackbody + Blackburn + blacken + Blackfeet + blackjack + blackmail + Blackman + blackout + blacksmith + Blackstone + Blackwell + bladder + bladdernut + bladderwort + blade + Blaine + Blair + Blake + blame + blameworthy + blanc + blanch + Blanchard + Blanche + bland + blandish + blank + blanket + blare + blaspheme + blasphemous + blasphemy + blast + blastula + blat + blatant + blather + Blatz + blaze + blazon + bleach + bleak + bleary + bleat + bled + bleed + Bleeker + blemish + blend + Blenheim + bless + blest + blew + blight + blimp + blind + blindfold + blink + Blinn + blip + bliss + blissful + blister + blithe + blitz + blizzard + bloat + blob + bloc + Bloch + block + blockade + blockage + blockhouse + blocky + bloke + Blomberg + Blomquist + blond + blonde + blood + bloodbath + bloodhound + bloodline + bloodroot + bloodshed + bloodshot + bloodstain + bloodstone + bloodstream + bloody + bloom + Bloomfield + Bloomington + bloop + blossom + blot + blotch + blouse + blow + blowback + blowfish + blown + blowup + blubber + bludgeon + blue + blueback + blueberry + bluebill + bluebird + bluebonnet + bluebook + bluebush + bluefish + bluegill + bluegrass + bluejacket + blueprint + bluestocking + bluet + bluff + bluish + Blum + Blumenthal + blunder + blunt + blur + blurb + blurry + blurt + blush + bluster + blustery + blutwurst + Blvd + Blythe + BMW + boa + boar + board + boardinghouse + boast + boastful + boat + boathouse + boatload + boatman + boatmen + boatswain + boatyard + bob + Bobbie + bobbin + bobble + bobby + bobcat + bobolink + Boca + bock + bocklogged + bode + bodhisattva + bodice + bodied + Bodleian + body + bodybuild + bodybuilder + bodybuilding + bodyguard + Boeing + Boeotia + Boeotian + bog + bogey + bogeymen + bogging + boggle + boggy + Bogota + bogus + bogy + Bohemia + Bohr + boil + Bois + Boise + boisterous + bold + boldface + bole + boletus + bolivar + Bolivia + bolo + Bologna + bolometer + Bolshevik + Bolshevism + Bolshevist + Bolshoi + bolster + bolt + Bolton + Boltzmann + bomb + bombard + bombast + bombastic + Bombay + bombproof + bon + bona + bonanza + Bonaparte + Bonaventure + bond + bondage + bondholder + bondsman + bondsmen + bone + bonfire + bong + bongo + Boniface + bonito + Bonn + bonnet + Bonneville + Bonnie + bonus + bony + bonze + boo + booby + boogie + book + bookbind + bookcase + bookend + bookie + bookish + bookkeep + booklet + bookmobile + bookplate + bookseller + bookshelf + bookshelves + bookstore + booky + boolean + boom + boomerang + boon + Boone + boor + boorish + boost + boot + Bootes + booth + bootleg + bootlegged + bootlegger + bootlegging + bootstrap + bootstrapped + bootstrapping + booty + booze + bop + borate + borax + Bordeaux + bordello + Borden + border + borderland + borderline + bore + Borealis + Boreas + boredom + Borg + boric + Boris + born + borne + Borneo + boron + borosilicate + borough + Borroughs + borrow + Bosch + Bose + bosom + boson + bosonic + boss + Boston + Bostonian + Boswell + botanic + botanist + botany + botch + botfly + both + bothersome + Botswana + bottle + bottleneck + bottom + bottommost + botulin + botulism + Boucher + bouffant + bough + bought + boulder + boule + boulevard + bounce + bouncy + bound + boundary + bounty + bouquet + Bourbaki + bourbon + bourgeois + bourgeoisie + bourn + boustrophedon + bout + boutique + bovine + bow + Bowditch + Bowdoin + bowel + Bowen + bowfin + bowie + bowl + bowline + bowman + bowmen + bowstring + box + boxcar + boxwood + boxy + boy + boyar + Boyce + boycott + Boyd + boyfriend + boyhood + boyish + Boyle + Boylston + BP + brace + bracelet + bracken + bracket + brackish + bract + brad + Bradbury + Bradford + Bradley + Bradshaw + Brady + brae + brag + Bragg + braggart + bragging + Brahmaputra + Brahms + Brahmsian + braid + Braille + brain + Brainard + brainchild + brainchildren + brainstorm + brainwash + brainy + brake + brakeman + bramble + bran + branch + brand + Brandeis + Brandenburg + brandish + Brandon + Brandt + brandy + brandywine + Braniff + brant + brash + Brasilia + brass + brassiere + brassy + bratwurst + Braun + bravado + brave + bravery + bravo + bravura + brawl + bray + brazen + brazier + Brazil + Brazilian + Brazzaville + breach + bread + breadboard + breadfruit + breadroot + breadth + breadwinner + break + breakage + breakaway + breakdown + breakfast + breakoff + breakpoint + breakthrough + breakup + breakwater + bream + breast + breastplate + breastwork + breath + breathe + breathtaking + breathy + breccia + bred + breech + breeches + breed + breeze + breezy + Bremen + bremsstrahlung + Brenda + Brendan + Brennan + Brenner + Brent + Brest + brethren + Breton + Brett + breve + brevet + brevity + brew + brewery + Brewster + Brian + briar + bribe + bribery + Brice + brick + brickbat + bricklay + bricklayer + bricklaying + bridal + bride + bridegroom + bridesmaid + bridge + bridgeable + bridgehead + Bridgeport + Bridget + Bridgetown + Bridgewater + bridgework + bridle + brief + briefcase + brig + brigade + brigadier + brigantine + Briggs + Brigham + bright + brighten + Brighton + brilliant + Brillouin + brim + brimful + brimstone + Brindisi + brindle + brine + bring + brink + brinkmanship + briny + Brisbane + brisk + bristle + Bristol + Britain + Britannic + Britannica + britches + British + Briton + Brittany + Britten + brittle + broach + broad + broadcast + broaden + broadloom + broadside + Broadway + brocade + broccoli + brochure + Brock + brockle + Broglie + broil + broke + broken + brokerage + Bromfield + bromide + bromine + Bromley + bronchi + bronchial + bronchiolar + bronchiole + bronchitis + bronchus + bronco + Brontosaurus + Bronx + bronze + bronzy + brood + broody + brook + Brooke + Brookhaven + Brookline + Brooklyn + brookside + broom + broomcorn + broth + brothel + brother + brotherhood + brought + brouhaha + brow + browbeaten + brown + Browne + Brownell + Brownian + brownie + brownish + browse + Bruce + brucellosis + Bruckner + Bruegel + bruise + bruit + Brumidi + brunch + brunette + Brunhilde + Bruno + Brunswick + brunt + brush + brushfire + brushlike + brushwork + brushy + brusque + Brussels + brutal + brute + Bryan + Bryant + Bryce + Bryn + bryophyta + bryophyte + bryozoa + b's + BSTJ + BTL + BTU + bub + bubble + Buchanan + Bucharest + Buchenwald + Buchwald + buck + buckaroo + buckboard + bucket + bucketfull + buckeye + buckhorn + buckle + Buckley + Bucknell + buckshot + buckskin + buckthorn + buckwheat + bucolic + bud + Budapest + Budd + Buddha + Buddhism + Buddhist + buddy + budge + budget + budgetary + Budweiser + Buena + Buenos + buff + buffalo + buffet + bufflehead + buffoon + bug + bugaboo + bugeyed + bugging + buggy + bugle + Buick + build + buildup + built + builtin + Bujumbura + bulb + bulblet + Bulgaria + bulge + bulk + bulkhead + bulky + bull + bulldog + bulldoze + bullet + bulletin + bullfinch + bullfrog + bullhead + bullhide + bullish + bullock + bullseye + bullwhack + bully + bullyboy + bulrush + bulwark + bum + bumble + bumblebee + bump + bumptious + bun + bunch + Bundestag + bundle + Bundoora + bundy + bungalow + bungle + bunk + bunkmate + bunny + Bunsen + bunt + Bunyan + buoy + buoyant + burbank + Burch + burden + burdensome + burdock + bureau + bureaucracy + bureaucrat + bureaucratic + buret + burette + burg + burgeon + burgess + burgher + burglar + burglarproof + burglary + Burgundian + Burgundy + burial + buried + Burke + burl + burlap + burlesque + burley + Burlington + burly + Burma + Burmese + burn + Burnett + Burnham + burnish + burnout + Burnside + burnt + burp + Burr + burro + Burroughs + burrow + bursitis + burst + bursty + Burt + Burton + Burtt + Burundi + bury + bus + busboy + Busch + buses + bush + bushel + bushmaster + Bushnell + bushwhack + bushy + business + businessman + businessmen + buss + bust + bustard + bustle + busy + but + butadiene + butane + butch + butchery + butene + buteo + butler + butt + butte + butterball + buttercup + butterfat + Butterfield + butterfly + buttermilk + butternut + buttery + buttock + button + buttonhole + buttonweed + buttress + Buttrick + butyl + butyrate + butyric + buxom + Buxtehude + Buxton + buy + buyer + buzz + Buzzard + buzzer + buzzing + buzzsaw + buzzword + buzzy + by + bye + Byers + bygone + bylaw + byline + bypass + bypath + byproduct + Byrd + Byrne + byroad + Byron + Byronic + bystander + byte + byway + byword + Byzantine + Byzantium + c + CA + cab + cabal + cabana + cabaret + cabbage + cabdriver + cabin + cabinet + cabinetmake + cabinetry + cable + Cabot + cacao + cachalot + cache + cackle + CACM + cacophonist + cacophony + cacti + cactus + cadaver + cadaverous + caddis + caddy + cadent + cadenza + cadet + Cadillac + cadmium + cadre + Cady + Caesar + cafe + cafeteria + cage + cagey + Cahill + cahoot + caiman + Cain + Caine + cairn + Cairo + cajole + cake + Cal + Calais + calamitous + calamity + calamus + calcareous + calcify + calcine + calcite + calcium + calculable + calculate + calculi + calculus + Calcutta + Calder + caldera + Caldwell + Caleb + calendar + calendrical + calf + calfskin + Calgary + Calhoun + caliber + calibrate + calibre + calico + California + californium + caliper + caliph + caliphate + calisthenic + Calkins + call + calla + Callaghan + Callahan + caller + calligraph + calligraphy + calliope + Callisto + callous + callus + calm + caloric + calorie + calorimeter + Calumet + calumniate + calumny + Calvary + calve + Calvert + Calvin + Calvinist + calypso + cam + camaraderie + camber + Cambodia + Cambrian + cambric + Cambridge + Camden + came + camel + camelback + camellia + camelopard + Camelot + cameo + camera + cameraman + cameramen + Cameron + Cameroun + Camilla + camilla + Camille + Camino + camouflage + camp + campaign + campanile + Campbell + campfire + campground + campion + campsite + campus + can + Canaan + Canada + Canadian + canal + canary + Canaveral + Canberra + cancel + cancellate + cancelled + cancelling + cancer + cancerous + Candace + candela + candelabra + candid + candidacy + candidate + Candide + candle + candlelight + candlelit + candlestick + candlewick + candy + cane + Canfield + canine + Canis + canister + canker + cankerworm + canna + cannabis + cannel + cannery + cannibal + cannister + cannon + cannonball + cannot + canny + canoe + Canoga + canon + canonic + canopy + canst + can't + cant + Cantabrigian + cantaloupe + canteen + Canterbury + canterelle + canticle + cantilever + cantle + canto + canton + Cantonese + cantor + canvas + canvasback + canvass + canyon + cap + capacious + capacitance + capacitate + capacitive + capacitor + capacity + cape + capella + caper + Capetown + capillary + Capistrano + capita + capital + capitol + Capitoline + capitulate + capo + caprice + capricious + Capricorn + capsize + capstan + capstone + capsule + captain + captaincy + caption + captious + captivate + captive + captor + capture + Caputo + capybara + car + carabao + Caracas + caramel + caravan + caraway + carbide + carbine + carbohydrate + Carboloy + carbon + carbonaceous + carbonate + Carbondale + Carbone + carbonic + carbonium + carbonyl + carborundum + carboxy + carboxylic + carboy + carbuncle + carburetor + carcass + carcinogen + carcinogenic + carcinoma + card + cardamom + cardboard + cardiac + Cardiff + cardinal + cardiod + cardioid + cardiology + cardiovascular + care + careen + career + carefree + careful + caress + caret + caretaker + careworn + Carey + carfare + Cargill + cargo + cargoes + Carib + Caribbean + caribou + caricature + Carl + Carla + Carleton + Carlin + Carlisle + Carlo + carload + Carlson + Carlton + Carlyle + Carmela + Carmen + Carmichael + carmine + carnage + carnal + carnation + carne + Carnegie + carney + carnival + carob + carol + Carolina + Caroline + Carolingian + Carolinian + Carolyn + carouse + carp + Carpathia + carpenter + carpentry + carpet + carport + Carr + carrageen + Carrara + carrel + carriage + Carrie + carrion + Carroll + carrot + Carruthers + carry + carryover + Carson + cart + carte + cartel + Cartesian + Carthage + Carthaginian + cartilage + cartilaginous + cartographer + cartographic + cartography + carton + cartoon + cartridge + cartwheel + Caruso + carve + carven + caryatid + Casanova + casbah + cascade + cascara + case + casebook + casein + casework + Casey + cash + cashew + cashier + cashmere + casino + cask + casket + Caspian + Cassandra + casserole + cassette + Cassiopeia + Cassius + cassock + cast + castanet + caste + casteth + castigate + Castillo + castle + castor + Castro + casual + casualty + cat + catabolic + cataclysm + cataclysmic + Catalina + catalogue + catalpa + catalysis + catalyst + catalytic + catapult + cataract + catastrophe + catastrophic + catatonia + catatonic + catawba + catbird + catcall + catch + catchup + catchword + catchy + catechism + categoric + category + catenate + cater + caterpillar + catfish + catharsis + cathedra + cathedral + Catherine + Catherwood + catheter + cathode + cathodic + catholic + Catholicism + Cathy + cation + cationic + catkin + catlike + catnip + Catskill + catsup + cattail + cattle + cattleman + cattlemen + CATV + Caucasian + Caucasus + Cauchy + caucus + caught + cauldron + cauliflower + caulk + causal + causate + causation + cause + caustic + caution + cautionary + cautious + cavalcade + cavalier + cavalry + cave + caveat + caveman + cavemen + Cavendish + cavern + cavernous + caviar + cavil + cavilling + Caviness + cavitate + cavort + caw + cayenne + Cayley + Cayuga + CB + CBS + CCNY + CDC + cease + Cecil + Cecilia + Cecropia + cedar + cede + cedilla + Cedric + ceil + celandine + Celanese + Celebes + celebrant + celebrate + celebrity + celerity + celery + celesta + Celeste + celestial + Celia + celibacy + cell + cellar + cellophane + cellular + celluloid + cellulose + Celsius + Celtic + cement + cemetery + Cenozoic + censor + censorial + censorious + censure + census + cent + centaur + centenary + centennial + centerline + centerpiece + centigrade + centimeter + centipede + central + centrex + centric + centrifugal + centrifugate + centrifuge + centrist + centroid + centum + century + Cepheus + CEQ + ceramic + ceramium + Cerberus + cereal + cerebellum + cerebral + cerebrate + ceremonial + ceremonious + ceremony + Ceres + cereus + cerise + cerium + CERN + certain + certainty + certificate + certified + certify + certiorari + certitude + cerulean + Cervantes + cervix + Cesare + cesium + cessation + cession + Cessna + cetera + Cetus + Ceylon + Cezanne + cf + Chablis + Chad + Chadwick + chafe + chaff + chagrin + chain + chair + chairlady + chairman + chairmen + chairperson + chairwoman + chairwomen + chaise + chalcedony + chalcocite + chalet + chalice + chalk + chalkboard + chalkline + chalky + challenge + Chalmers + chamber + chamberlain + chambermaid + Chambers + chameleon + chamfer + chamois + chamomile + champ + champagne + Champaign + champion + Champlain + chance + chancel + chancellor + chancery + chancy + chandelier + chandler + Chang + change + changeable + changeover + channel + chanson + chant + chantey + Chantilly + chantry + Chao + chaos + chaotic + chap + chaparral + chapel + chaperon + chaperone + chaplain + chaplaincy + Chaplin + Chapman + chapter + char + character + characteristic + charcoal + chard + charge + chargeable + chariot + charisma + charismatic + charitable + charity + Charlemagne + Charles + Charleston + Charley + Charlie + Charlotte + Charlottesville + charm + Charon + chart + Charta + Chartres + chartreuse + chartroom + Charybdis + chase + chasm + chassis + chaste + chastise + chastity + chat + chateau + chateaux + Chatham + Chattanooga + chattel + chatty + Chaucer + chauffeur + Chauncey + Chautauqua + chaw + cheap + cheat + cheater + check + checkbook + checkerberry + checkerboard + checklist + checkmate + checkout + checkpoint + checksum + checksummed + checksumming + checkup + cheek + cheekbone + cheeky + cheer + cheerful + cheerlead + cheerleader + cheery + cheese + cheesecake + cheesecloth + cheesy + cheetah + chef + chelate + chemic + chemise + chemisorb + chemisorption + chemist + chemistry + chemotherapy + Chen + Cheney + chenille + cherish + Cherokee + cherry + chert + cherub + cherubim + Cheryl + Chesapeake + Cheshire + chess + chest + Chester + Chesterton + chestnut + chevalier + Chevrolet + chevron + Chevy + chevy + chew + Cheyenne + chi + Chiang + chianti + chic + Chicago + Chicagoan + chicanery + Chicano + chick + chickadee + chicken + chickweed + chicory + chide + chief + chiefdom + chieftain + chiffon + chigger + chignon + chilblain + child + childbear + childbirth + childhood + childish + childlike + children + Chile + Chilean + chili + chill + chilly + chime + chimera + chimeric + Chimique + chimney + chimpanzee + chin + china + Chinaman + Chinamen + Chinatown + chinch + chinchilla + chine + Chinese + chink + Chinook + chinquapin + chip + chipboard + chipmunk + Chippendale + chiropractor + chirp + chisel + Chisholm + chit + chiton + chivalrous + chivalry + chive + chlorate + chlordane + chloride + chlorinate + chlorine + chloroform + chlorophyll + chloroplast + chloroplatinate + chock + chocolate + Choctaw + choice + choir + choirmaster + choke + chokeberry + cholera + cholesterol + cholinesterase + chomp + Chomsky + choose + choosy + chop + Chopin + choppy + choral + chorale + chord + chordal + chordata + chordate + chore + choreograph + choreography + chorine + chortle + chorus + chose + chosen + Chou + chow + chowder + Chris + Christ + christen + Christendom + Christensen + Christenson + Christian + Christiana + Christianson + Christie + Christina + Christine + Christlike + Christmas + Christoffel + Christoph + Christopher + Christy + chromate + chromatic + chromatin + chromatogram + chromatograph + chromatography + chrome + chromic + chromium + chromosome + chromosphere + chronic + chronicle + chronograph + chronography + chronology + chrysanthemum + Chrysler + chrysolite + chub + chubby + chuck + chuckle + chuckwalla + chuff + chug + chugging + chum + chummy + chump + Chungking + chunk + chunky + church + churchgo + churchgoer + churchgoing + Churchill + Churchillian + churchman + churchmen + churchwoman + churchwomen + churchyard + churn + chute + chutney + CIA + cicada + Cicero + Ciceronian + cider + cigar + cigarette + cilia + ciliate + cinch + Cincinnati + cinder + Cinderella + Cindy + cinema + cinematic + Cinerama + cinnabar + cinnamon + cinquefoil + cipher + circa + Circe + circle + circlet + circuit + circuitous + circuitry + circulant + circular + circulate + circulatory + circumcircle + circumcise + circumcision + circumference + circumferential + circumflex + circumlocution + circumpolar + circumscribe + circumscription + circumspect + circumsphere + circumstance + circumstantial + circumvent + circumvention + circus + cistern + cit + citadel + citation + cite + citizen + citizenry + citrate + citric + Citroen + citron + citrus + city + cityscape + citywide + civet + civic + civil + civilian + clad + cladophora + claim + claimant + Claire + clairvoyant + clam + clamber + clammy + clamorous + clamp + clamshell + clan + clandestine + clang + clank + clannish + clap + clapboard + Clapeyron + Clara + Clare + Claremont + Clarence + Clarendon + claret + clarify + clarinet + clarity + Clark + Clarke + clash + clasp + class + classic + classification + classificatory + classify + classmate + classroom + classy + clatter + clattery + Claude + Claudia + Claudio + Claus + clause + Clausen + Clausius + claustrophobia + claustrophobic + claw + clay + Clayton + clean + cleanse + cleanup + clear + clearance + clearheaded + Clearwater + cleat + cleavage + cleave + cleft + clement + Clemson + clench + clergy + clergyman + clergymen + cleric + clerk + Cleveland + clever + cliche + click + client + clientele + cliff + cliffhang + Clifford + Clifton + climactic + climate + climatic + climatology + climax + climb + clime + clinch + cling + clinging + clinic + clinician + clink + Clint + Clinton + Clio + clip + clipboard + clique + clitoris + Clive + cloak + cloakroom + clobber + clock + clockwatcher + clockwise + clockwork + clod + cloddish + clog + clogging + cloister + clomp + clone + clonic + close + closet + closeup + closure + clot + cloth + clothbound + clothe + clothesbrush + clotheshorse + clothesline + clothesman + clothesmen + clothier + Clotho + cloture + cloud + cloudburst + cloudy + clout + clove + cloven + clown + cloy + club + clubhouse + clubroom + cluck + clue + Cluj + clump + clumsy + clung + cluster + clutch + clutter + Clyde + Clytemnestra + CO + coach + coachman + coachmen + coachwork + coadjutor + coagulable + coagulate + coal + coalesce + coalescent + coalition + coarse + coarsen + coast + coastal + coastline + coat + Coates + coattail + coauthor + coax + coaxial + cobalt + Cobb + cobble + cobblestone + Cobol + cobra + cobweb + coca + cocaine + coccidiosis + cochineal + cochlea + Cochran + Cochrane + cock + cockatoo + cockcrow + cockeye + cockle + cocklebur + cockleshell + cockpit + cockroach + cocksure + cocktail + cocky + coco + cocoa + coconut + cocoon + cod + coda + Coddington + coddle + code + codebreak + codeposit + codetermine + codeword + codfish + codicil + codify + codomain + codon + codpiece + Cody + coed + coeditor + coeducation + coefficient + coequal + coerce + coercible + coercion + coercive + coexist + coexistent + coextensive + cofactor + coffee + coffeecup + coffeepot + coffer + Coffey + coffin + Coffman + cog + cogent + cogitate + cognac + cognate + cognition + cognitive + cognizable + cognizant + Cohen + cohere + coherent + cohesion + cohesive + Cohn + cohomology + cohort + cohosh + coiffure + coil + coin + coinage + coincide + coincident + coincidental + coke + col + cola + colander + colatitude + Colby + cold + Cole + Coleman + Coleridge + Colette + coleus + Colgate + colicky + coliform + coliseum + collaborate + collage + collagen + collapse + collapsible + collar + collarbone + collard + collate + collateral + colleague + collect + collectible + collector + college + collegial + collegian + collegiate + collet + collide + collie + Collier + collimate + collinear + Collins + collision + collocation + colloidal + Colloq + colloquia + colloquial + colloquium + colloquy + collude + collusion + Cologne + Colombia + Colombo + colon + colonel + colonial + colonist + colonnade + colony + Colorado + colorate + coloratura + colorimeter + colossal + Colosseum + colossi + colossus + colt + coltish + coltsfoot + Columbia + columbine + Columbus + column + columnar + colza + coma + Comanche + comatose + comb + combat + combatant + combatted + combinate + combination + combinator + combinatorial + combinatoric + combine + combustible + combustion + come + comeback + comedian + comedy + comet + cometary + cometh + comfort + comic + Cominform + comma + command + commandant + commandeer + commando + commemorate + commend + commendation + commendatory + commensurable + commensurate + comment + commentary + commentator + commerce + commercial + commingle + commiserate + commissariat + commissary + commission + commit + committable + committal + committed + committee + committeeman + committeemen + committeewoman + committeewomen + committing + commodious + commodity + commodore + common + commonality + commonplace + commonweal + commonwealth + commotion + communal + commune + communicable + communicant + communicate + communion + communique + commutate + commute + compact + compacter + compactify + Compagnie + companion + companionway + company + comparative + comparator + compare + comparison + compartment + compass + compassion + compassionate + compatible + compatriot + compel + compellable + compelled + compelling + compendia + compendium + compensable + compensate + compensatory + compete + competent + competition + competitive + competitor + compilation + compile + complacent + complain + complainant + complaint + complaisant + compleat + complement + complementarity + complementary + complementation + complete + completion + complex + complexion + compliant + complicate + complicity + compliment + complimentary + compline + comply + component + componentry + comport + compose + composite + composition + compositor + compost + composure + compote + compound + comprehend + comprehensible + comprehension + comprehensive + compress + compressible + compression + compressive + compressor + comprise + compromise + Compton + comptroller + compulsion + compulsive + compulsory + compunction + computation + compute + comrade + con + Conakry + Conant + concatenate + concave + conceal + concede + conceit + conceive + concentrate + concentric + concept + conception + conceptual + concern + concert + concerti + concertina + concertmaster + concerto + concession + concessionaire + conch + concierge + conciliate + conciliatory + concise + concision + conclave + conclude + conclusion + conclusive + concoct + concocter + concomitant + concord + concordant + concourse + concrete + concretion + concubine + concur + concurred + concurrent + concurring + concussion + condemn + condemnate + condemnatory + condensate + condense + condensible + condescend + condescension + condiment + condition + condolence + condominium + condone + conduce + conducive + conduct + conductance + conductor + conduit + cone + coneflower + Conestoga + coney + confabulate + confect + confectionery + confederacy + confederate + confer + conferee + conference + conferrable + conferred + conferring + confess + confession + confessor + confidant + confidante + confide + confident + confidential + configuration + configure + confine + confirm + confirmation + confirmatory + confiscable + confiscate + confiscatory + conflagrate + conflagration + conflict + confluent + confocal + conform + conformal + conformance + conformation + confound + confrere + confront + confrontation + Confucian + Confucianism + Confucius + confuse + confusion + confute + congeal + congener + congenial + congenital + congest + congestion + congestive + conglomerate + Congo + Congolese + congratulate + congratulatory + congregate + congress + congressional + congressman + congressmen + congresswoman + congresswomen + congruent + conic + conifer + coniferous + conjectural + conjecture + conjoin + conjoint + conjugacy + conjugal + conjugate + conjunct + conjuncture + conjure + Conklin + Conley + conn + Connally + connect + Connecticut + connector + Conner + Connie + connivance + connive + connoisseur + Connors + connotation + connotative + connote + connubial + conquer + conqueror + conquest + conquistador + Conrad + Conrail + consanguine + consanguineous + conscience + conscientious + conscionable + conscious + conscript + conscription + consecrate + consecutive + consensus + consent + consequent + consequential + conservation + conservatism + conservative + conservator + conservatory + conserve + consider + considerate + consign + consignee + consignor + consist + consistent + consolation + console + consolidate + consonant + consonantal + consort + consortium + conspicuous + conspiracy + conspirator + conspiratorial + conspire + Constance + constant + Constantine + Constantinople + constellate + consternate + constipate + constituent + constitute + constitution + constitutive + constrain + constraint + constrict + constrictor + construct + constructible + constructor + construe + consul + consular + consulate + consult + consultant + consultation + consultative + consume + consummate + consumption + consumptive + contact + contagion + contagious + contain + contaminant + contaminate + contemplate + contemporaneous + contemporary + contempt + contemptible + contemptuous + contend + content + contention + contentious + contest + contestant + context + contextual + contiguity + contiguous + continent + continental + contingent + continua + continual + continuant + continuation + continue + continued + continuity + continuo + continuous + continuum + contort + contour + contraband + contrabass + contraception + contraceptive + contract + contractor + contractual + contradict + contradictory + contradistinct + contradistinction + contradistinguish + contralateral + contralto + contraption + contrariety + contrariwise + contrary + contrast + contravariant + contravene + contravention + contretemps + contribute + contribution + contributor + contributory + contrite + contrition + contrivance + contrive + control + controllable + controlled + controller + controlling + controversial + controversy + controvertible + contumacy + contusion + conundrum + Convair + convalesce + convalescent + convect + convene + convenient + convent + convention + converge + convergent + conversant + conversation + converse + conversion + convert + convertible + convex + convey + conveyance + conveyor + convict + convince + convivial + convocate + convocation + convoke + convolute + convolution + convolve + convoy + convulse + convulsion + convulsive + Conway + cony + coo + cook + cookbook + Cooke + cookery + cookie + cooky + cool + coolant + Cooley + coolheaded + Coolidge + coon + coop + cooperate + coordinate + Coors + coot + cop + cope + Copeland + Copenhagen + Copernican + Copernicus + copious + coplanar + copolymer + copperas + Copperfield + copperhead + coppery + copra + coprinus + coproduct + copter + copy + copybook + copyright + copywriter + coquette + coquina + coral + coralberry + coralline + corbel + Corbett + Corcoran + cord + cordage + cordial + cordite + cordon + corduroy + core + Corey + coriander + Corinth + Corinthian + Coriolanus + cork + corkscrew + cormorant + corn + cornbread + cornea + Cornelia + Cornelius + Cornell + cornerstone + cornet + cornfield + cornflower + Cornish + cornish + cornmeal + cornstarch + cornucopia + Cornwall + corny + corollary + corona + Coronado + coronary + coronate + coroner + coronet + coroutine + Corp + corpora + corporal + corporate + corporeal + corps + corpse + corpsman + corpsmen + corpulent + corpus + corpuscular + corral + corralled + correct + corrector + correlate + correspond + correspondent + corridor + corrigenda + corrigendum + corrigible + corroborate + corroboree + corrode + corrodible + corrosion + corrosive + corrugate + corrupt + corruptible + corruption + corsage + corset + cortege + cortex + cortical + Cortland + corundum + coruscate + Corvallis + corvette + Corvus + cos + cosec + coset + Cosgrove + cosh + cosine + cosmetic + cosmic + cosmology + cosmopolitan + cosmos + cosponsor + Cossack + cost + Costa + Costello + costume + cosy + cot + cotangent + cotillion + cotman + cotoneaster + cotta + cottage + cotton + cottonmouth + cottonseed + cottonwood + cottony + Cottrell + cotty + cotyledon + couch + cougar + cough + could + couldn't + coulomb + Coulter + council + councilman + councilmen + councilwoman + councilwomen + counsel + counselor + count + countdown + countenance + counteract + counterargument + counterattack + counterbalance + counterclockwise + counterexample + counterfeit + counterflow + counterintuitive + counterman + countermen + counterpart + counterpoint + counterpoise + counterproductive + counterproposal + countersink + countersunk + countervail + countrify + country + countryman + countrymen + countryside + countrywide + county + countywide + coup + coupe + couple + coupon + courage + courageous + courier + course + court + courteous + courtesan + courtesy + courthouse + courtier + Courtney + courtroom + courtyard + couscous + cousin + couturier + covalent + covariant + covariate + covary + cove + coven + covenant + Coventry + cover + coverage + coverall + coverlet + covert + covet + covetous + cow + Cowan + coward + cowardice + cowbell + cowbird + cowboy + cowgirl + cowhand + cowherd + cowhide + cowl + cowlick + cowman + cowmen + coworker + cowpea + cowpoke + cowpony + cowpox + cowpunch + cowry + cowslip + cox + coxcomb + coy + coyote + coypu + cozen + cozy + CPA + cpu + crab + crabapple + crabmeat + crack + crackle + crackpot + cradle + craft + craftsman + craftsmen + craftspeople + craftsperson + crafty + crag + craggy + Craig + cram + Cramer + cramp + cranberry + Crandall + crane + cranelike + Cranford + crania + cranium + crank + crankcase + crankshaft + cranky + cranny + Cranston + crap + crappie + crash + crass + crate + crater + cravat + crave + craven + craw + Crawford + crawl + crawlspace + crayfish + crayon + craze + crazy + creak + creaky + cream + creamery + creamy + crease + create + creating + creature + creche + credent + credential + credenza + credible + credit + creditor + credo + credulity + credulous + creed + creedal + creek + creekside + creep + creepy + cremate + crematory + Creole + Creon + creosote + crepe + crept + crescendo + crescent + cress + crest + crestfallen + Crestview + Cretaceous + Cretan + Crete + cretin + cretinous + crevice + crew + crewcut + crewel + crewman + crewmen + crib + cricket + cried + crime + Crimea + criminal + crimp + crimson + cringe + crinkle + cripple + crises + crisis + crisp + Crispin + criss + crisscross + criteria + criterion + critic + critique + critter + croak + Croatia + crochet + crock + crockery + Crockett + crocodile + crocodilian + crocus + croft + Croix + Cromwell + Cromwellian + crone + crony + crook + croon + crop + croquet + Crosby + cross + crossarm + crossbar + crossbill + crossbow + crosscut + crosshatch + crosslink + crossover + crosspoint + crossroad + crosstalk + crosswalk + crossway + crosswise + crossword + crosswort + crotch + crotchety + crouch + croupier + crow + crowbait + crowberry + crowd + crowfoot + Crowley + crown + croydon + CRT + crucial + crucible + crucifix + crucifixion + crucify + crud + cruddy + crude + cruel + cruelty + Cruickshank + cruise + crumb + crumble + crummy + crump + crumple + crunch + crupper + crusade + crush + Crusoe + crust + crusty + crutch + crux + Cruz + cry + cryogenic + cryostat + crypt + cryptanalysis + cryptanalyst + cryptanalytic + cryptanalyze + cryptic + cryptogram + cryptographer + cryptography + cryptology + crystal + crystalline + crystallite + crystallographer + crystallography + c's + csnet + CT + cub + Cuba + cubbyhole + cube + cubic + cuckoo + cucumber + cud + cuddle + cuddly + cudgel + cue + cuff + cufflink + cuisine + Culbertson + culinary + cull + culminate + culpa + culpable + culprit + cult + cultivable + cultivate + cultural + culture + Culver + culvert + Cumberland + cumbersome + cumin + Cummings + Cummins + cumulate + cumulus + Cunard + cunning + Cunningham + CUNY + cup + cupboard + cupful + Cupid + cupidity + cupric + cuprous + cur + curate + curb + curbside + curd + curdle + cure + curfew + curia + curie + curio + curiosity + curious + curium + curl + curlew + curlicue + Curran + currant + current + curricula + curricular + curriculum + curry + curse + cursive + cursor + cursory + curt + curtail + curtain + Curtis + curtsey + curvaceous + curvature + curve + curvilinear + Cushing + cushion + Cushman + cusp + Custer + custodial + custodian + custody + custom + customary + customhouse + cut + cutaneous + cutback + cute + cutesy + cutlass + cutler + cutlet + cutoff + cutout + cutover + cutset + cutthroat + cuttlebone + cuttlefish + cutworm + Cyanamid + cyanate + cyanic + cyanide + cybernetic + cybernetics + cycad + Cyclades + cycle + cyclic + cyclist + cyclone + cyclopean + Cyclops + cyclorama + cyclotomic + cyclotron + Cygnus + cylinder + cylindric + cynic + Cynthia + cypress + Cyprian + Cypriot + Cyprus + Cyril + Cyrillic + Cyrus + cyst + cysteine + cytochemistry + cytology + cytolysis + cytoplasm + cytosine + CZ + czar + czarina + Czech + Czechoslovakia + Czerniak + d + dab + dabble + Dacca + dachshund + dactyl + dactylic + dad + Dada + Dadaism + Dadaist + daddy + Dade + Daedalus + daffodil + daffy + dagger + Dahl + dahlia + Dahomey + Dailey + Daimler + dainty + dairy + Dairylea + dairyman + dairymen + dais + daisy + Dakar + Dakota + dale + Daley + Dalhousie + Dallas + dally + Dalton + Daly + Dalzell + dam + damage + Damascus + damask + dame + damn + damnation + Damon + damp + dampen + damsel + Dan + Dana + Danbury + dance + dandelion + dandy + Dane + dang + danger + dangerous + dangle + Daniel + Danielson + Danish + dank + Danny + Dante + Danube + Danubian + Danzig + Daphne + dapper + dapple + Dar + dare + daredevil + Darius + dark + darken + darkle + Darlene + darling + darn + DARPA + Darrell + Darry + d'art + dart + Dartmouth + Darwin + Darwinian + dash + dashboard + dastard + data + database + date + dateline + dater + Datsun + datum + daub + Daugherty + daughter + daunt + dauphin + dauphine + Dave + davenport + David + Davidson + Davies + Davis + Davison + davit + Davy + dawn + Dawson + day + daybed + daybreak + daydream + daylight + daytime + Dayton + Daytona + daze + dazzle + DC + De + deacon + deaconess + deactivate + dead + deaden + deadhead + deadline + deadlock + deadwood + deaf + deafen + deal + deallocate + dealt + dean + Deane + Deanna + dear + Dearborn + dearie + dearth + death + deathbed + deathward + debacle + debar + debarring + debase + debate + debater + debauch + debauchery + Debbie + Debby + debenture + debilitate + debility + debit + debonair + Deborah + Debra + debrief + debris + debt + debtor + debug + debugged + debugger + debugging + debunk + Debussy + debut + debutante + Dec + decade + decadent + decaffeinate + decal + decant + decathlon + Decatur + decay + Decca + decease + decedent + deceit + deceitful + deceive + decelerate + December + decennial + decent + deception + deceptive + decertify + decibel + decide + deciduous + decile + decimal + decimate + decipher + decision + decisional + decisionmake + decisive + deck + Decker + declaim + declamation + declamatory + declaration + declarative + declarator + declaratory + declare + declassify + declination + decline + declivity + decode + decolletage + decollimate + decolonize + decommission + decompile + decomposable + decompose + decomposition + decompress + decompression + decontrol + decontrolled + decontrolling + deconvolution + deconvolve + decor + decorate + decorous + decorticate + decorum + decouple + decoy + decrease + decree + decreeing + decrement + decry + decrypt + decryption + dedicate + deduce + deducible + deduct + deductible + Dee + deed + deem + deemphasize + deep + deepen + deer + Deere + deerskin + deerstalker + deface + default + defeat + defecate + defect + defector + defend + defendant + defensible + defensive + defer + deferent + deferrable + deferral + deferred + deferring + defiant + deficient + deficit + define + definite + definition + definitive + deflate + deflater + deflect + deflector + defocus + deforest + deforestation + deform + deformation + defraud + defray + defrock + defrost + deft + defunct + defuse + defy + degas + degassing + degeneracy + degenerate + degradation + degrade + degrease + degree + degum + degumming + dehumidify + dehydrate + deify + deign + deity + deja + deject + Del + Delaney + Delano + Delaware + delay + delectable + delectate + delegable + delegate + delete + deleterious + deletion + Delft + Delhi + Delia + deliberate + delicacy + delicate + delicatessen + delicious + delicti + delight + delightful + Delilah + delimit + delimitation + delineament + delineate + delinquent + deliquesce + deliquescent + delirious + delirium + deliver + deliverance + delivery + dell + Della + Delmarva + delouse + Delphi + Delphic + delphine + delphinium + Delphinus + delta + deltoid + delude + deluge + delusion + delusive + deluxe + delve + demagnify + demagogue + demand + demarcate + demark + demean + demented + dementia + demerit + demigod + demijohn + demiscible + demise + demit + demitted + demitting + demo + democracy + democrat + democratic + demodulate + demography + demolish + demolition + demon + demoniac + demonic + demonstrable + demonstrate + demote + demountable + Dempsey + demultiplex + demur + demure + demurred + demurrer + demurring + demystify + den + denature + dendrite + dendritic + Deneb + Denebola + deniable + denial + denigrate + denizen + Denmark + Dennis + Denny + denominate + denotation + denotative + denote + denouement + denounce + dense + densitometer + dent + dental + dentistry + Denton + denture + denudation + denude + denumerable + denunciate + denunciation + Denver + deny + deodorant + deoxyribonucleic + deoxyribose + depart + department + departure + depend + dependent + depict + deplete + depletion + deplore + deploy + deport + deportation + deportee + depose + deposit + depositary + deposition + depositor + depository + depot + deprave + deprecate + deprecatory + depreciable + depreciate + depredate + depress + depressant + depressible + depression + depressive + depressor + deprivation + deprive + depth + deputation + depute + deputy + derail + derange + derate + derby + Derbyshire + dereference + deregulate + deregulatory + Derek + derelict + deride + derision + derisive + derivate + derive + derogate + derogatory + derrick + derriere + dervish + Des + descant + Descartes + descend + descendant + descendent + descent + describe + description + descriptive + descriptor + desecrate + desecrater + desegregate + desert + deserve + desicate + desiderata + desideratum + design + designate + desire + desirous + desist + desk + Desmond + desolate + desolater + desorption + despair + desperado + desperate + despicable + despise + despite + despoil + despond + despondent + despot + despotic + dessert + dessicate + destabilize + destinate + destine + destiny + destitute + destroy + destruct + destructor + desuetude + desultory + detach + detail + detain + d'etat + detect + detector + detent + detente + detention + deter + detergent + deteriorate + determinant + determinate + determine + deterred + deterrent + deterring + detest + detestation + detonable + detonate + detour + detoxify + detract + detractor + detriment + Detroit + deuce + deus + deuterate + deuterium + deuteron + devastate + develop + deviant + deviate + device + devil + devilish + devious + devise + devisee + devoid + devolution + devolve + Devon + Devonshire + devote + devotee + devotion + devour + devout + dew + dewar + dewdrop + Dewey + Dewitt + dewy + dexter + dexterity + dextrose + dextrous + dey + Dhabi + dharma + diabase + diabetes + diabetic + diabolic + diachronic + diacritic + diacritical + diadem + diagnosable + diagnose + diagnoses + diagnosis + diagnostic + diagnostician + diagonal + diagram + diagrammatic + dial + dialect + dialectic + dialogue + dialup + dialysis + diamagnetic + diamagnetism + diameter + diamond + Diana + Diane + Dianne + diaper + diaphanous + diaphragm + diary + diathermy + diathesis + diatom + diatomaceous + diatomic + diatonic + diatribe + dibble + dice + dichloride + dichondra + dichotomize + dichotomous + dichotomy + dick + dickcissel + dickens + Dickerson + dickey + Dickinson + Dickson + dicotyledon + dicta + dictate + dictatorial + diction + dictionary + dictum + did + didactic + diddle + didn't + Dido + die + Diebold + died + Diego + diehard + dieldrin + dielectric + diem + diesel + diet + dietary + dietetic + diethylstilbestrol + dietician + Dietrich + diety + Dietz + diffeomorphic + diffeomorphism + differ + different + differentiable + differential + differentiate + difficult + difficulty + diffident + diffract + diffractometer + diffuse + diffusible + diffusion + diffusive + difluoride + dig + digest + digestible + digestion + digestive + digging + digit + digital + digitalis + digitate + dignify + dignitary + dignity + digram + digress + digression + dihedral + dilapidate + dilatation + dilate + dilatory + dilemma + dilettante + diligent + dill + Dillon + dilogarithm + diluent + dilute + dilution + dim + dime + dimension + dimethyl + diminish + diminution + diminutive + dimple + din + Dinah + dine + ding + dinghy + dingo + dingy + dinnertime + dinnerware + dinosaur + dint + diocesan + diocese + diode + Dionysian + Dionysus + Diophantine + diopter + diorama + diorite + dioxide + dip + diphtheria + diphthong + diploid + diploidy + diploma + diplomacy + diplomat + diplomatic + dipole + Dirac + dire + direct + director + directorate + directorial + directory + directrices + directrix + dirge + Dirichlet + dirt + dirty + Dis + disaccharide + disambiguate + disastrous + disburse + disc + discern + discernible + disciple + disciplinarian + disciplinary + discipline + disco + discoid + discomfit + discordant + discovery + discreet + discrepant + discrete + discretion + discretionary + discriminable + discriminant + discriminate + discriminatory + discus + discuss + discussant + discussion + disdain + disdainful + disembowel + disgruntle + disgustful + dish + dishes + dishevel + dishwasher + dishwater + disjunct + disk + dismal + dismissal + Disney + Disneyland + disparage + disparate + dispel + dispelled + dispelling + dispensable + dispensary + dispensate + dispense + dispersal + disperse + dispersible + dispersion + dispersive + disposable + disposal + disputant + dispute + disquietude + disquisition + disrupt + disruption + disruptive + dissemble + disseminate + dissension + dissertation + dissident + dissipate + dissociable + dissociate + dissonant + dissuade + distaff + distal + distant + distillate + distillery + distinct + distinguish + distort + distortion + distraught + distribution + distributive + distributor + district + disturb + disturbance + disulfide + disyllable + ditch + dither + ditto + ditty + Ditzel + diurnal + diva + divalent + divan + dive + diverge + divergent + diverse + diversify + diversion + diversionary + divert + divest + divestiture + divide + dividend + divination + divine + divisible + division + divisional + divisive + divisor + divorce + divorcee + divulge + Dixie + Dixieland + dixieland + Dixon + dizzy + Djakarta + DNA + Dnieper + do + Dobbin + Dobbs + doberman + dobson + docile + dock + docket + dockside + dockyard + doctor + doctoral + doctorate + doctrinaire + doctrinal + doctrine + document + documentary + documentation + DOD + Dodd + dodecahedra + dodecahedral + dodecahedron + dodge + dodo + Dodson + doe + doesn't + d'oeuvre + doff + dog + dogbane + dogberry + Doge + dogfish + dogging + doggone + doghouse + dogleg + dogma + dogmatic + dogmatism + dogtooth + dogtrot + dogwood + Doherty + Dolan + dolce + doldrum + doldrums + dole + doleful + doll + dollar + dollop + dolly + dolomite + dolomitic + Dolores + dolphin + dolt + doltish + domain + dome + Domenico + Domesday + domestic + domesticate + domicile + dominant + dominate + domineer + Domingo + Dominic + Dominican + Dominick + dominion + Dominique + domino + don + Donahue + Donald + Donaldson + donate + done + Doneck + donkey + Donna + Donnelly + Donner + donnybrook + donor + Donovan + don't + doodle + Dooley + Doolittle + doom + doomsday + door + doorbell + doorkeep + doorkeeper + doorknob + doorman + doormen + doorstep + doorway + dopant + dope + Doppler + Dora + Dorado + Dorcas + Dorchester + Doreen + Doria + Doric + Doris + dormant + dormitory + Dorothea + Dorothy + Dorset + Dortmund + dosage + dose + dosimeter + dossier + Dostoevsky + dot + dote + double + Doubleday + doubleheader + doublet + doubleton + doubloon + doubt + doubtful + douce + Doug + dough + Dougherty + doughnut + Douglas + Douglass + dour + douse + dove + dovekie + dovetail + Dow + dowager + dowel + dowitcher + Dowling + down + downbeat + downcast + downdraft + Downey + downfall + downgrade + downhill + Downing + downplay + downpour + downright + downriver + Downs + downside + downslope + downspout + downstairs + downstate + downstream + downtown + downtrend + downtrodden + downturn + downward + downwind + dowry + Doyle + doze + dozen + Dr + drab + Draco + draft + draftee + draftsman + draftsmen + draftsperson + drafty + drag + dragging + dragnet + dragon + dragonfly + dragonhead + dragoon + drain + drainage + drake + dram + drama + dramatic + dramatist + dramaturgy + drank + drape + drapery + drastic + draw + drawback + drawbridge + drawl + drawn + dread + dreadful + dreadnought + dream + dreamboat + dreamlike + dreamt + dreamy + dreary + dredge + dreg + drench + dress + dressmake + dressy + drew + Drexel + Dreyfuss + drib + dribble + dried + drier + drift + drill + drink + drip + drippy + Driscoll + drive + driven + driveway + drizzle + drizzly + droll + dromedary + drone + drool + droop + droopy + drop + drophead + droplet + dropout + drosophila + dross + drought + drove + drown + drowse + drowsy + drub + drudge + drudgery + drug + drugging + drugstore + druid + drum + drumhead + drumlin + Drummond + drunk + drunkard + drunken + Drury + dry + dryad + Dryden + d's + du + dual + dualism + Duane + dub + Dubhe + dubious + dubitable + Dublin + ducat + duchess + duck + duckling + duct + ductile + ductwork + dud + Dudley + due + duel + duet + duff + duffel + Duffy + dug + Dugan + dugout + duke + dukedom + dulcet + dull + dully + dulse + Duluth + duly + Duma + dumb + dumbbell + dummy + dump + Dumpty + dumpy + dun + Dunbar + Duncan + dunce + dune + Dunedin + dung + dungeon + Dunham + dunk + Dunkirk + Dunlap + Dunlop + Dunn + duopolist + duopoly + dupe + duplex + duplicable + duplicate + duplicity + DuPont + Duquesne + durable + durance + Durango + duration + Durer + duress + Durham + during + Durkee + Durkin + Durrell + Durward + Dusenberg + Dusenbury + dusk + dusky + Dusseldorf + dust + dustbin + dusty + Dutch + dutchess + Dutchman + Dutchmen + dutiable + dutiful + Dutton + duty + dwarf + dwarves + dwell + dwelt + Dwight + dwindle + Dwyer + dyad + dyadic + dye + dyeing + dyer + dying + Dyke + Dylan + dynamic + dynamism + dynamite + dynamo + dynast + dynastic + dynasty + dyne + dysentery + dyspeptic + dysplasia + dysprosium + dystrophy + e + each + Eagan + eager + eagle + ear + eardrum + earl + earmark + earn + earnest + earphone + earring + earsplitting + earth + earthen + earthenware + earthmen + earthmove + earthmover + earthmoving + earthquake + earthshaking + earthworm + earthy + earwig + ease + easel + east + eastbound + eastern + easternmost + Eastland + Eastman + eastward + Eastwood + easy + easygoing + eat + eaten + eater + Eaton + eave + eavesdrop + eavesdropped + eavesdropper + eavesdropping + ebb + Eben + ebony + ebullient + eccentric + Eccles + ecclesiastic + echelon + echidna + echinoderm + echo + echoes + eclat + eclectic + eclipse + ecliptic + eclogue + Ecole + ecology + econometric + Econometrica + economic + economist + economy + ecosystem + ecstasy + ecstatic + ectoderm + ectopic + Ecuador + ecumenic + ecumenist + Ed + Eddie + eddy + edelweiss + edematous + Eden + Edgar + edge + Edgerton + edgewise + edging + edgy + edible + edict + edifice + edify + Edinburgh + Edison + edit + Edith + edition + editor + editorial + Edmonds + Edmondson + Edmonton + Edmund + Edna + EDT + Eduardo + educable + educate + Edward + Edwardian + Edwardine + Edwards + Edwin + Edwina + eel + eelgrass + EEOC + e'er + eerie + eerily + efface + effaceable + effect + effectual + effectuate + effeminate + efferent + effete + efficacious + efficacy + efficient + Effie + effloresce + efflorescent + effluent + effluvia + effluvium + effort + effusion + effusive + eft + e.g + egalitarian + Egan + egg + egghead + eggplant + eggshell + ego + egocentric + egotism + egotist + egregious + egress + egret + Egypt + Egyptian + eh + Ehrlich + eider + eidetic + eigenfunction + eigenspace + eigenstate + eigenvalue + eigenvector + eight + eighteen + eighteenth + eightfold + eighth + eightieth + eighty + Eileen + Einstein + Einsteinian + einsteinium + Eire + Eisenhower + Eisner + either + ejaculate + eject + ejector + eke + Ekstrom + Ektachrome + el + elaborate + Elaine + elan + elapse + elastic + elastomer + elate + Elba + elbow + elder + eldest + Eldon + Eleanor + Eleazar + elect + elector + electoral + electorate + Electra + electress + electret + electric + electrician + electrify + electro + electrocardiogram + electrocardiograph + electrode + electroencephalogram + electroencephalograph + electroencephalography + electrolysis + electrolyte + electrolytic + electron + electronic + electrophoresis + electrophorus + elegant + elegiac + elegy + element + elementary + Elena + elephant + elephantine + elevate + eleven + eleventh + elfin + Elgin + Eli + elicit + elide + eligible + Elijah + eliminate + Elinor + Eliot + Elisabeth + Elisha + elision + elite + Elizabeth + Elizabethan + elk + Elkhart + ell + Ella + Ellen + Elliot + Elliott + ellipse + ellipsis + ellipsoid + ellipsoidal + ellipsometer + elliptic + Ellis + Ellison + Ellsworth + Ellwood + elm + Elmer + Elmhurst + Elmira + Elmsford + Eloise + elongate + elope + eloquent + else + Elsevier + elsewhere + Elsie + Elsinore + Elton + eluate + elucidate + elude + elusive + elute + elution + elves + Ely + Elysee + elysian + em + emaciate + emanate + emancipate + Emanuel + emasculate + embalm + embank + embarcadero + embargo + embargoes + embark + embarrass + embassy + embattle + embed + embeddable + embedded + embedder + embedding + embellish + ember + embezzle + emblazon + emblem + emblematic + embodiment + embody + embolden + emboss + embouchure + embower + embrace + embraceable + embrittle + embroider + embroidery + embroil + embryo + embryology + embryonic + emcee + emendable + emerald + emerge + emergent + emeriti + emeritus + Emerson + Emery + emigrant + emigrate + Emil + Emile + Emilio + Emily + eminent + emirate + emissary + emission + emissivity + emit + emittance + emitted + emitter + emitting + Emma + emma + Emmanuel + Emmett + emolument + Emory + emotion + emotional + empathy + emperor + emphases + emphasis + emphatic + emphysema + emphysematous + empire + empiric + emplace + employ + employed + employee + employer + employing + emporium + empower + empress + empty + emulate + emulsify + emulsion + en + enable + enamel + encapsulate + encephalitis + enchantress + enclave + encomia + encomium + encore + encroach + encryption + encumber + encumbrance + encyclopedic + end + endemic + endgame + Endicott + endoderm + endogamous + endogamy + endogenous + endomorphism + endorse + endosperm + endothelial + endothermic + endow + endpoint + endurance + endure + enemy + energetic + energy + enervate + enfant + Enfield + enforceable + enforcible + Eng + engage + Engel + engine + engineer + England + Englander + Engle + Englewood + English + Englishman + Englishmen + enhance + Enid + enigma + enigmatic + enjoinder + enlargeable + enliven + enmity + Enoch + enol + enormity + enormous + Enos + enough + enquire + enquiry + Enrico + enrollee + ensconce + ensemble + enstatite + entendre + enter + enterprise + entertain + enthalpy + enthrall + enthusiasm + enthusiast + enthusiastic + entice + entire + entirety + entity + entomology + entourage + entranceway + entrant + entrepreneur + entrepreneurial + entropy + entry + enumerable + enumerate + enunciable + enunciate + envelop + envelope + enviable + envious + environ + envoy + envy + enzymatic + enzyme + enzymology + Eocene + eohippus + eosine + EPA + epaulet + ephemeral + ephemerides + ephemeris + Ephesian + Ephesus + Ephraim + epic + epicure + Epicurean + epicycle + epicyclic + epidemic + epidemiology + epidermic + epidermis + epigenetic + epigram + epigrammatic + epigraph + epileptic + epilogue + epimorphism + Epiphany + epiphyseal + epiphysis + episcopal + Episcopalian + episcopate + episode + episodic + epistemology + epistle + epistolatory + epitaph + epitaxial + epitaxy + epithelial + epithelium + epithet + epitome + epoch + epochal + epoxy + epsilon + Epsom + Epstein + equable + equal + equanimity + equate + equatorial + equestrian + equidistant + equilateral + equilibrate + equilibria + equilibrium + equine + equinoctial + equinox + equip + equipoise + equipotent + equipped + equipping + equitable + equitation + equity + equivalent + equivocal + equivocate + era + eradicable + eradicate + erasable + erase + Erasmus + Erastus + erasure + Erato + Eratosthenes + erbium + ERDA + ere + erect + erg + ergative + ergodic + Eric + Erich + Erickson + Ericsson + Erie + Erik + Erlenmeyer + Ernest + Ernestine + Ernie + Ernst + erode + erodible + Eros + erosible + erosion + erosive + erotic + erotica + err + errancy + errand + errant + errantry + errata + erratic + erratum + Errol + erroneous + error + ersatz + Erskine + erudite + erudition + erupt + eruption + Ervin + Erwin + e's + escadrille + escalate + escapade + escape + escapee + escheat + Escherichia + eschew + escort + escritoire + escrow + escutcheon + Eskimo + Esmark + esophagi + esoteric + especial + espionage + esplanade + Esposito + espousal + espouse + esprit + esquire + essay + Essen + essence + essential + Essex + EST + establish + estate + esteem + Estella + ester + Estes + Esther + estimable + estimate + Estonia + estop + estoppal + estrange + estuarine + estuary + et + eta + etc + etch + eternal + eternity + Ethan + ethane + ethanol + Ethel + ether + ethereal + ethic + Ethiopia + ethnic + ethnography + ethnology + ethology + ethos + ethyl + ethylene + etiology + etiquette + Etruscan + etude + etymology + eucalyptus + Eucharist + Euclid + Euclidean + eucre + Eugene + Eugenia + eugenic + eukaryote + Euler + Eulerian + eulogy + Eumenides + Eunice + euphemism + euphemist + euphorbia + euphoria + euphoric + Euphrates + Eurasia + eureka + Euridyce + Euripides + Europa + Europe + European + europium + Eurydice + eutectic + Euterpe + euthanasia + Eva + evacuate + evade + evaluable + evaluate + evanescent + evangel + evangelic + Evans + Evanston + Evansville + evaporate + evasion + evasive + eve + Evelyn + even + evenhanded + evensong + event + eventful + eventide + eventual + eventuate + Eveready + Everett + Everglades + evergreen + Everhart + everlasting + every + everybody + everyday + everyman + everyone + everything + everywhere + evict + evident + evidential + evil + evildoer + evince + evocable + evocate + evocation + evoke + evolution + evolutionary + evolve + evzone + ewe + Ewing + ex + exacerbate + exact + exacter + exaggerate + exalt + exaltation + exam + examination + examine + example + exasperate + exasperater + excavate + exceed + excel + excelled + excellent + excelling + excelsior + except + exception + exceptional + excerpt + excess + excessive + exchange + exchangeable + exchequer + excisable + excise + excision + excitation + excitatory + excite + exciton + exclaim + exclamation + exclamatory + exclude + exclusion + exclusionary + exclusive + excommunicate + excoriate + excrescent + excrete + excretion + excretory + excruciate + exculpate + exculpatory + excursion + excursus + excusable + excuse + execrable + execrate + execute + execution + executive + executor + executrix + exegesis + exegete + exemplar + exemplary + exemplify + exempt + exemption + exercisable + exercise + exert + Exeter + exhale + exhaust + exhaustible + exhaustion + exhaustive + exhibit + exhibition + exhibitor + exhilarate + exhort + exhortation + exhumation + exhume + exigent + exile + exist + existent + existential + exit + exodus + exogamous + exogamy + exogenous + exonerate + exorbitant + exorcise + exorcism + exorcist + exoskeleton + exothermic + exotic + exotica + expand + expanse + expansible + expansion + expansive + expatiate + expect + expectant + expectation + expectorant + expectorate + expedient + expedite + expedition + expeditious + expel + expellable + expelled + expelling + expend + expenditure + expense + expensive + experience + experiential + experiment + experimentation + expert + expertise + expiable + expiate + expiration + expire + explain + explanation + explanatory + expletive + explicable + explicate + explicit + explode + exploit + exploitation + exploration + exploratory + explore + explosion + explosive + exponent + exponential + exponentiate + export + exportation + expose + exposit + exposition + expositor + expository + exposure + expound + express + expressible + expression + expressive + expressway + expropriate + expulsion + expunge + expurgate + exquisite + extant + extemporaneous + extempore + extend + extendible + extensible + extension + extensive + extensor + extent + extenuate + exterior + exterminate + external + extinct + extinguish + extirpate + extol + extolled + extoller + extolling + extort + extra + extracellular + extract + extractor + extracurricular + extraditable + extradite + extradition + extralegal + extralinguistic + extramarital + extramural + extraneous + extraordinary + extrapolate + extraterrestrial + extravagant + extravaganza + extrema + extremal + extreme + extremis + extremum + extricable + extricate + extrinsic + extroversion + extrovert + extrude + extrusion + extrusive + exuberant + exudate + exudation + exude + exult + exultant + exultation + Exxon + eye + eyeball + eyebright + eyebrow + eyed + eyeful + eyeglass + eyelash + eyelet + eyelid + eyepiece + eyesight + eyesore + eyewitness + Ezekiel + Ezra + f + FAA + Faber + Fabian + fable + fabric + fabricate + fabulous + facade + face + faceplate + facet + facetious + facial + facile + facilitate + facsimile + fact + factious + facto + factor + factorial + factory + factual + facultative + faculty + fad + fade + fadeout + faery + Fafnir + fag + Fahey + Fahrenheit + fail + failsafe + failsoft + failure + fain + faint + fair + Fairchild + Fairfax + Fairfield + fairgoer + Fairport + fairway + fairy + faith + faithful + fake + falcon + falconry + fall + fallacious + fallacy + fallen + fallible + falloff + fallout + fallow + Falmouth + false + falsehood + falsify + Falstaff + falter + fame + familial + familiar + familiarly + familism + family + famine + famish + famous + fan + fanatic + fanciful + fancy + fanfare + fanfold + fang + fangled + Fanny + fanout + fantasia + fantasist + fantastic + fantasy + fantod + far + farad + Faraday + Farber + farce + farcical + fare + farewell + farfetched + Fargo + farina + Farkas + Farley + farm + farmhouse + Farmington + farmland + Farnsworth + faro + Farrell + farsighted + farther + farthest + fascicle + fasciculate + fascinate + fascism + fascist + fashion + fast + fasten + fastidious + fat + fatal + fate + fateful + father + fathom + fatigue + Fatima + fatten + fatty + fatuous + faucet + Faulkner + fault + faulty + faun + fauna + Faust + Faustian + Faustus + fawn + fay + Fayette + Fayetteville + faze + FBI + FCC + FDA + Fe + fealty + fear + fearful + fearsome + feasible + feast + feat + feather + featherbed + featherbedding + featherbrain + feathertop + featherweight + feathery + feature + Feb + febrile + February + fecund + fed + Fedders + federal + federate + Fedora + fee + feeble + feed + feedback + feel + Feeney + feet + feign + feint + Feldman + feldspar + Felice + Felicia + felicitous + felicity + feline + Felix + fell + fellow + felon + felonious + felony + felsite + felt + female + feminine + feminism + feminist + femur + fence + fencepost + fend + fennel + Fenton + fenugreek + Ferber + Ferdinand + Ferguson + Fermat + ferment + fermentation + Fermi + fermion + fermium + fern + Fernando + fernery + ferocious + ferocity + Ferreira + Ferrer + ferret + ferric + ferris + ferrite + ferroelectric + ferromagnet + ferromagnetic + ferromagnetism + ferrous + ferruginous + ferrule + ferry + fertile + fervent + fescue + fest + festival + festive + fetal + fetch + fete + fetid + fetish + fetter + fettle + fetus + feud + feudal + feudatory + fever + feverish + few + fiance + fiancee + fiasco + fiat + fib + fiberboard + Fiberglas + Fibonacci + fibration + fibrin + fibrosis + fibrous + fiche + fickle + fiction + fictitious + fictive + fiddle + fiddlestick + fide + fidelity + fidget + fiducial + fiduciary + fief + fiefdom + field + Fields + fieldstone + fieldwork + fiend + fiendish + fierce + fiery + fiesta + fife + FIFO + fifteen + fifteenth + fifth + fiftieth + fifty + fig + figaro + fight + figural + figurate + figure + figurine + filament + filamentary + filbert + filch + file + filet + filial + filibuster + filigree + Filipino + fill + filled + filler + fillet + fillip + filly + film + filmdom + filmmake + filmstrip + filmy + filter + filth + filthy + filtrate + fin + final + finale + finance + financial + financier + finch + find + fine + finery + finesse + finessed + finessing + finger + fingernail + fingerprint + fingertip + finial + finicky + finish + finitary + finite + fink + Finland + Finley + Finn + Finnegan + Finnish + finny + fir + fire + firearm + fireboat + firebreak + firebug + firecracker + firefly + firehouse + firelight + fireman + firemen + fireplace + firepower + fireproof + fireside + Firestone + firewall + firewood + firework + firm + firmware + first + firsthand + fiscal + Fischbein + Fischer + fish + fisherman + fishermen + fishery + fishmonger + fishpond + fishy + Fisk + Fiske + fissile + fission + fissure + fist + fisticuff + fit + Fitch + Fitchburg + fitful + Fitzgerald + Fitzpatrick + Fitzroy + five + fivefold + fix + fixate + fixture + Fizeau + fizzle + fjord + FL + flabbergast + flabby + flack + flag + flagellate + flageolet + flagging + Flagler + flagpole + flagrant + Flagstaff + flagstone + flail + flair + flak + flake + flaky + flam + flamboyant + flame + flamingo + flammable + Flanagan + Flanders + flange + flank + flannel + flap + flare + flash + flashback + flashlight + flashy + flask + flat + flatbed + flathead + flatiron + flatland + flatten + flattery + flatulent + flatus + flatware + flatworm + flaunt + flautist + flaw + flax + flaxen + flaxseed + flea + fleabane + fleawort + fleck + fled + fledge + fledgling + flee + fleece + fleeing + fleet + Fleming + Flemish + flemish + flesh + fleshy + fletch + Fletcher + flew + flex + flexible + flexural + flexure + flick + flier + flight + flimsy + flinch + fling + flint + flintlock + flinty + flip + flipflop + flippant + flirt + flirtation + flirtatious + flit + Flo + float + floc + flocculate + flock + floe + flog + flogging + flood + floodgate + floodlight + floodlit + floor + floorboard + flop + floppy + flora + floral + Florence + Florentine + florican + florid + Florida + Floridian + florin + florist + flotation + flotilla + flounce + flounder + flour + flourish + floury + flout + flow + flowchart + flowerpot + flowery + flown + Floyd + flu + flub + fluctuate + flue + fluency + fluent + fluff + fluffy + fluid + fluke + flung + flunk + fluoresce + fluorescein + fluorescent + fluoridate + fluoride + fluorine + fluorite + fluorocarbon + fluorspar + flurry + flush + fluster + flute + flutter + fluvial + flux + fly + flycatcher + flyer + Flynn + flyway + FM + FMC + foal + foam + foamflower + foamy + fob + focal + foci + focus + focussed + fodder + foe + fog + Fogarty + fogging + foggy + fogy + foible + foil + foist + fold + foldout + Foley + foliage + foliate + folio + folk + folklore + folksong + folksy + follicle + follicular + follow + followeth + folly + Fomalhaut + fond + fondle + fondly + font + Fontaine + Fontainebleau + food + foodstuff + fool + foolhardy + foolish + foolproof + foot + footage + football + footbridge + Foote + footfall + foothill + footman + footmen + footnote + footpad + footpath + footprint + footstep + footstool + footwear + footwork + fop + foppish + for + forage + foray + forbade + forbear + forbearance + Forbes + forbid + forbidden + forbidding + forbore + forborne + force + forceful + forcible + ford + Fordham + fore + foregoing + foreign + forensic + forest + forestry + forever + forfeit + forfeiture + forfend + forgave + forge + forgery + forget + forgetful + forgettable + forgetting + forgive + forgiven + forgo + forgot + forgotten + fork + forklift + forlorn + form + formal + formaldehyde + formant + format + formate + formatted + formatting + formic + Formica + formidable + Formosa + formula + formulae + formulaic + formulate + Forrest + forsake + forsaken + forsook + forswear + Forsythe + fort + forte + Fortescue + forth + forthcome + forthright + forthwith + fortieth + fortify + fortin + fortiori + fortitude + fortnight + Fortran + fortran + fortress + fortuitous + fortunate + fortune + forty + forum + forward + forwent + Foss + fossil + fossiliferous + foster + fosterite + fought + foul + foulmouth + found + foundation + foundling + foundry + fount + fountain + fountainhead + four + fourfold + Fourier + foursome + foursquare + fourteen + fourteenth + fourth + fovea + fowl + fox + foxglove + Foxhall + foxhole + foxhound + foxtail + foxy + foyer + FPC + fraction + fractionate + fractious + fracture + fragile + fragment + fragmentary + fragmentation + fragrant + frail + frailty + frambesia + frame + framework + Fran + franc + franca + France + Frances + franchise + Francine + Francis + Franciscan + Francisco + francium + Franco + franco + Francoise + frangipani + frank + Frankel + Frankfort + Frankfurt + frankfurter + franklin + frantic + Franz + Fraser + fraternal + fraternity + Frau + fraud + fraudulent + fraught + fray + frayed + Frazier + frazzle + freak + freakish + freckle + Fred + Freddie + Freddy + Frederic + Frederick + Fredericks + Fredericksburg + Fredericton + Fredholm + Fredrickson + free + freeboot + freed + Freedman + freedmen + freedom + freehand + freehold + freeing + freeman + freemen + Freeport + freer + freest + freestone + freethink + Freetown + freeway + freewheel + freeze + freight + French + Frenchman + Frenchmen + frenetic + frenzy + freon + frequent + fresco + frescoes + fresh + freshen + freshman + freshmen + freshwater + Fresnel + Fresno + fret + Freud + Freudian + Frey + Freya + friable + friar + fricative + Frick + friction + frictional + Friday + fried + Friedman + Friedrich + friend + frieze + frigate + Frigga + fright + frighten + frightful + frigid + Frigidaire + frill + frilly + fringe + frisky + fritillary + fritter + Fritz + frivolity + frivolous + frizzle + fro + frock + frog + frolic + from + front + frontage + frontal + frontier + frontiersman + frontiersmen + frost + frostbite + frostbitten + frosty + froth + frothy + frown + frowzy + froze + frozen + fructify + fructose + Fruehauf + frugal + fruit + fruitful + fruition + frustrate + frustrater + frustum + fry + Frye + f's + Ft + FTC + Fuchs + Fuchsia + fudge + fuel + fugal + fugitive + fugue + Fuji + Fujitsu + fulcrum + fulfill + full + fullback + Fullerton + fully + fulminate + fulsome + Fulton + fum + fumble + fume + fumigant + fumigate + fun + function + functionary + functor + functorial + fund + fundamental + fundraise + funeral + funereal + fungal + fungi + fungible + fungicide + fungoid + fungus + funk + funnel + funny + fur + furbish + furious + furl + furlong + furlough + Furman + furnace + furnish + furniture + furrier + furrow + furry + further + furtherance + furthermore + furthermost + furthest + furtive + fury + furze + fuse + fuselage + fusible + fusiform + fusillade + fusion + fuss + fussy + fusty + futile + future + fuzz + fuzzy + g + GA + gab + gabardine + gabble + gabbro + Gaberones + gable + Gabon + Gabriel + Gabrielle + gad + gadfly + gadget + gadgetry + gadolinium + gadwall + Gaelic + gaff + gaffe + gag + gage + gagging + gaggle + gagwriter + gaiety + Gail + gaillardia + gain + Gaines + Gainesville + gainful + gait + Gaithersburg + gal + gala + galactic + galactose + Galapagos + Galatea + Galatia + galaxy + Galbreath + gale + Galen + galena + galenite + Galilee + gall + Gallagher + gallant + gallantry + gallberry + gallery + galley + gallinule + gallium + gallivant + gallon + gallonage + gallop + Galloway + gallows + gallstone + Gallup + gallus + Galois + Galt + galvanic + galvanism + galvanometer + Galveston + Galway + gam + Gambia + gambit + gamble + gambol + game + gamecock + gamesman + gamin + gamma + gamut + gander + gang + Ganges + gangland + gangling + ganglion + gangplank + gangster + gangway + gannet + Gannett + gantlet + gantry + Ganymede + GAO + gap + gape + gar + garage + garb + garbage + garble + Garcia + garden + gardenia + Gardner + Garfield + gargantuan + gargle + Garibaldi + garish + garland + garlic + garner + garnet + Garrett + garrison + Garrisonian + garrulous + Garry + garter + Garth + Garvey + Gary + gas + Gascony + gaseous + gases + gash + gasify + gasket + gaslight + gasohol + gasoline + gasp + Gaspee + gassy + Gaston + gastrointestinal + gastronome + gastronomy + gate + gatekeep + Gates + gateway + gather + Gatlinburg + gator + gauche + gaucherie + gaudy + gauge + gaugeable + Gauguin + Gaul + gauleiter + Gaulle + gaunt + gauntlet + gaur + gauss + Gaussian + gauze + gave + gavel + Gavin + gavotte + gawk + gawky + gay + Gaylord + gaze + gazelle + gazette + GE + gear + gecko + gedanken + gee + geese + Gegenschein + Geiger + Geigy + geisha + gel + gelable + gelatin + gelatine + gelatinous + geld + gem + geminate + Gemini + gemlike + Gemma + gemstone + gender + gene + genealogy + genera + general + generate + generic + generosity + generous + Genesco + genesis + genetic + Geneva + Genevieve + genial + genie + genii + genital + genitive + genius + Genoa + genotype + genre + gent + genteel + gentian + gentile + gentility + gentle + gentleman + gentlemen + gentry + genuine + genus + geocentric + geochemical + geochemistry + geochronology + geodesic + geodesy + geodetic + geoduck + Geoffrey + geographer + geography + geology + geometer + geometrician + geophysical + geophysics + geopolitic + George + Georgetown + Georgia + Gerald + Geraldine + geranium + Gerard + Gerber + gerbil + Gerhard + Gerhardt + geriatric + germ + German + germane + Germanic + germanium + Germantown + Germany + germicidal + germicide + germinal + germinate + gerontology + Gerry + Gershwin + Gertrude + gerund + gerundial + gerundive + gestalt + Gestapo + gesticulate + gesture + get + getaway + Getty + Gettysburg + geyser + Ghana + ghastly + Ghent + gherkin + ghetto + ghost + ghostlike + ghostly + ghoul + ghoulish + Giacomo + giant + giantess + gibberish + gibbet + gibbon + Gibbons + gibbous + Gibbs + gibby + gibe + giblet + Gibraltar + Gibson + giddap + giddy + Gideon + Gifford + gift + gig + gigabit + gigabyte + gigacycle + gigahertz + gigaherz + gigantic + gigavolt + gigawatt + gigging + giggle + Gil + gila + gilbert + Gilbertson + Gilchrist + gild + Gilead + Giles + gill + Gillespie + Gillette + Gilligan + Gilmore + gilt + gimbal + Gimbel + gimmick + gimmickry + gimpy + gin + Gina + ginger + gingham + gingko + ginkgo + ginmill + Ginn + Gino + Ginsberg + Ginsburg + ginseng + Giovanni + giraffe + gird + girdle + girl + girlie + girlish + girth + gist + Giuliano + Giuseppe + give + giveaway + given + giveth + glacial + glaciate + glacier + glacis + glad + gladden + gladdy + glade + gladiator + gladiolus + Gladstone + Gladys + glamor + glamorous + glamour + glance + gland + glandular + glans + glare + Glasgow + glass + glassine + glassware + glasswort + glassy + Glaswegian + glaucoma + glaucous + glaze + gleam + glean + Gleason + glee + gleeful + glen + Glenda + Glendale + Glenn + glib + Glidden + glide + glimmer + glimpse + glint + glissade + glisten + glitch + glitter + gloat + glob + global + globe + globular + globule + globulin + glom + glomerular + gloom + gloomy + Gloria + Gloriana + glorify + glorious + glory + gloss + glossary + glossed + glossolalia + glossy + glottal + glottis + Gloucester + glove + glow + glucose + glue + glued + gluey + gluing + glum + glut + glutamate + glutamic + glutamine + glutinous + glutton + glyceride + glycerin + glycerinate + glycerine + glycerol + glycine + glycogen + glycol + glyph + GM + GMT + gnarl + gnash + gnat + gnaw + gneiss + gnome + gnomon + gnomonic + gnostic + GNP + gnu + go + Goa + goad + goal + goat + goatherd + gob + gobble + gobbledygook + goblet + god + Goddard + goddess + godfather + Godfrey + godhead + godkin + godlike + godmother + godparent + godsend + godson + Godwin + godwit + goer + goes + Goethe + Goff + gog + goggle + Gogh + gogo + gold + Goldberg + golden + goldeneye + goldenrod + goldenseal + goldfinch + goldfish + Goldman + goldsmith + Goldstein + Goldstine + Goldwater + Goleta + golf + Goliath + golly + gondola + gone + gong + goniometer + Gonzales + Gonzalez + goober + good + goodbye + Goode + Goodman + Goodrich + goodwill + Goodwin + goody + Goodyear + goof + goofy + goose + gooseberry + GOP + gopher + Gordian + Gordon + gore + Goren + gorge + gorgeous + gorgon + Gorham + gorilla + Gorky + gorse + Gorton + gory + gosh + goshawk + gosling + gospel + gossamer + gossip + got + Gotham + Gothic + gotten + Gottfried + Goucher + Gouda + gouge + Gould + gourd + gourmet + gout + govern + governance + governess + governor + gown + GPO + grab + grace + graceful + gracious + grackle + grad + gradate + grade + gradient + gradual + graduate + Grady + Graff + graft + graham + grail + grain + grainy + grammar + grammarian + grammatic + granary + grand + grandchild + grandchildren + granddaughter + grandeur + grandfather + grandiloquent + grandiose + grandma + grandmother + grandnephew + grandniece + grandpa + grandparent + grandson + grandstand + granite + granitic + granny + granola + grant + grantee + grantor + granular + granulate + granule + Granville + grape + grapefruit + grapevine + graph + grapheme + graphic + graphite + grapple + grasp + grass + grassland + grassy + grata + grate + grateful + grater + gratify + gratis + gratitude + gratuitous + gratuity + grave + gravel + graven + Graves + gravestone + graveyard + gravid + gravitate + gravy + gray + graybeard + grayish + Grayson + graywacke + graze + grease + greasy + great + greatcoat + greater + grebe + Grecian + Greece + greed + greedy + Greek + green + Greenbelt + Greenberg + Greenblatt + Greenbriar + Greene + greenery + Greenfield + greengrocer + greenhouse + greenish + Greenland + Greensboro + greensward + greenware + Greenwich + greenwood + Greer + greet + Greg + gregarious + Gregg + Gregory + gremlin + grenade + Grendel + Grenoble + Gresham + Greta + Gretchen + grew + grey + greyhound + greylag + grid + griddle + gridiron + grief + grievance + grieve + grievous + griffin + Griffith + grill + grille + grilled + grillwork + grim + grimace + Grimaldi + grime + Grimes + Grimm + grin + grind + grindstone + grip + gripe + grippe + grisly + grist + gristmill + Griswold + grit + gritty + grizzle + grizzly + groan + groat + grocer + grocery + groggy + groin + grommet + groom + groove + grope + grosbeak + gross + Grosset + Grossman + Grosvenor + grotesque + Groton + ground + groundsel + groundskeep + groundwork + group + groupoid + grout + grove + grovel + Grover + grow + growl + grown + grownup + growth + grub + grubby + grudge + gruesome + gruff + grumble + Grumman + grunt + gryphon + g's + GSA + GU + Guam + guanidine + guanine + guano + guarantee + guaranteeing + guarantor + guaranty + guard + guardhouse + Guardia + guardian + Guatemala + gubernatorial + Guelph + Guenther + guerdon + guernsey + guerrilla + guess + guesswork + guest + guffaw + Guggenheim + Guiana + guidance + guide + guidebook + guideline + guidepost + guiding + guignol + guild + guildhall + guile + Guilford + guillemot + guillotine + guilt + guilty + guinea + guise + guitar + gules + gulf + gull + Gullah + gullet + gullible + gully + gulp + gum + gumbo + gumdrop + gummy + gumption + gumshoe + gun + Gunderson + gunfight + gunfire + gunflint + gunk + gunky + gunman + gunmen + gunnery + gunny + gunplay + gunpowder + gunshot + gunsling + Gunther + gurgle + Gurkha + guru + Gus + gush + gusset + gust + Gustafson + Gustav + Gustave + Gustavus + gusto + gusty + gut + Gutenberg + Guthrie + gutsy + guttural + guy + Guyana + guzzle + Gwen + Gwyn + gym + gymnasium + gymnast + gymnastic + gymnosperm + gyp + gypsite + gypsum + gypsy + gyrate + gyrfalcon + gyro + gyrocompass + gyroscope + h + ha + Haag + Haas + habeas + haberdashery + Haberman + Habib + habit + habitant + habitat + habitation + habitual + habituate + hacienda + hack + hackberry + Hackett + hackle + hackmatack + hackney + hackneyed + hacksaw + had + Hadamard + Haddad + haddock + Hades + Hadley + hadn't + Hadrian + hadron + hafnium + Hagen + Hager + haggard + haggle + Hagstrom + Hague + Hahn + Haifa + haiku + hail + hailstone + hailstorm + Haines + hair + haircut + hairdo + hairpin + hairy + Haiti + Haitian + Hal + halcyon + hale + Haley + half + halfback + halfhearted + halfway + halibut + halide + Halifax + halite + hall + hallelujah + Halley + hallmark + hallow + Halloween + hallucinate + hallway + halma + halo + halocarbon + halogen + Halpern + Halsey + Halstead + halt + halvah + halve + Halverson + ham + Hamal + Hamburg + hamburger + Hamilton + hamlet + Hamlin + hammerhead + hammock + Hammond + hamper + Hampshire + Hampton + hamster + Han + Hancock + hand + handbag + handbook + handclasp + handcuff + Handel + handful + handgun + handhold + handicap + handicapped + handicapper + handicapping + handicraft + handicraftsman + handicraftsmen + handiwork + handkerchief + handle + handleable + handlebar + handline + handmade + handmaiden + handout + handset + handshake + handsome + handspike + handstand + handwaving + handwrite + handwritten + handy + handyman + handymen + Haney + Hanford + hang + hangable + hangar + hangman + hangmen + hangout + hangover + hank + Hankel + Hanley + Hanlon + Hanna + Hannah + Hannibal + Hanoi + Hanover + Hanoverian + Hans + Hansel + Hansen + hansom + Hanson + Hanukkah + hap + haphazard + haploid + haploidy + haplology + happen + happenstance + happy + Hapsburg + harangue + harass + Harbin + harbinger + Harcourt + hard + hardbake + hardboard + hardboiled + hardcopy + harden + hardhat + Hardin + Harding + hardscrabble + hardtack + hardtop + hardware + hardwood + hardworking + hardy + hare + harelip + harem + hark + Harlan + Harlem + Harley + harm + harmful + Harmon + harmonic + harmonica + harmonious + harmony + harness + Harold + harp + harpoon + harpsichord + Harpy + Harriet + Harriman + Harrington + Harris + Harrisburg + Harrison + harrow + harry + harsh + harshen + hart + Hartford + Hartley + Hartman + Harvard + harvest + harvestman + Harvey + hash + hashish + hasn't + hasp + hassle + hast + haste + hasten + Hastings + hasty + hat + hatch + hatchet + hatchway + hate + hateful + hater + Hatfield + hath + Hathaway + hatred + Hatteras + Hattie + Hattiesburg + Haugen + haughty + haul + haulage + haunch + haunt + Hausdorff + Havana + have + haven + haven't + Havilland + havoc + haw + Hawaii + Hawaiian + hawk + Hawkins + Hawley + hawthorn + Hawthorne + hay + Hayden + Haydn + Hayes + hayfield + Haynes + Hays + haystack + Hayward + hayward + hazard + hazardous + haze + hazel + hazelnut + hazy + he + head + headache + headboard + headdress + headland + headlight + headline + headmaster + headphone + headquarter + headquarters + headroom + headset + headsman + headsmen + headstand + headstone + headstrong + headwall + headwater + headway + headwind + heady + heal + Healey + health + healthful + healthy + Healy + heap + hear + heard + hearken + hearsay + hearse + Hearst + heart + heartbeat + heartbreak + hearten + heartfelt + hearth + hearty + heat + heater + heath + heathen + heathenish + Heathkit + heave + heaven + heavenward + heavy + heavyweight + Hebe + hebephrenic + Hebraic + Hebrew + Hecate + hecatomb + heck + heckle + Heckman + hectic + hector + Hecuba + he'd + hedge + hedgehog + hedonism + hedonist + heed + heel + heft + hefty + Hegelian + hegemony + Heidelberg + heigh + height + heighten + Heine + Heinrich + Heinz + heir + heiress + Heisenberg + held + Helen + Helena + Helene + Helga + helical + helicopter + heliocentric + heliotrope + helium + helix + he'll + hell + hellbender + hellebore + Hellenic + hellfire + hellgrammite + hellish + hello + helm + helmet + Helmholtz + helmsman + helmsmen + Helmut + help + helpful + helpmate + Helsinki + Helvetica + hem + hematite + Hemingway + hemisphere + hemispheric + hemlock + hemoglobin + hemolytic + hemorrhage + hemorrhoid + hemosiderin + hemp + Hempstead + hen + henbane + hence + henceforth + henchman + henchmen + Henderson + Hendrick + Hendricks + Hendrickson + henequen + Henley + henpeck + Henri + Henrietta + henry + hepatica + hepatitis + Hepburn + heptane + her + Hera + Heraclitus + herald + herb + Herbert + Herculean + Hercules + herd + herdsman + here + hereabout + hereafter + hereby + hereditary + heredity + Hereford + herein + hereinabove + hereinafter + hereinbelow + hereof + heresy + heretic + hereto + heretofore + hereunder + hereunto + herewith + heritable + heritage + Herkimer + Herman + Hermann + hermeneutic + Hermes + hermetic + Hermite + hermitian + Hermosa + Hernandez + hero + Herodotus + heroes + heroic + heroin + heroine + heroism + heron + herpes + herpetology + Herr + herringbone + Herschel + herself + Hershel + Hershey + hertz + Hertzog + hesitant + hesitate + hesitater + Hesperus + Hess + Hesse + Hessian + Hester + heterocyclic + heterodyne + heterogamous + heterogeneity + heterogeneous + heterosexual + heterostructure + heterozygous + Hetman + Hettie + Hetty + Heublein + heuristic + Heusen + Heuser + hew + Hewett + Hewitt + Hewlett + hewn + hex + hexachloride + hexadecimal + hexafluoride + hexagon + hexagonal + hexameter + hexane + hey + heyday + hi + Hiatt + hiatus + Hiawatha + hibachi + Hibbard + hibernate + Hibernia + hick + Hickey + Hickman + hickory + Hicks + hid + hidalgo + hidden + hide + hideaway + hideous + hideout + hierarchal + hierarchic + hierarchy + hieratic + hieroglyphic + Hieronymus + hifalutin + Higgins + high + highball + highboy + highest + highfalutin + highhanded + highland + highlight + highroad + hightail + highway + highwayman + highwaymen + hijack + hijinks + hike + hilarious + hilarity + Hilbert + Hildebrand + hill + hillbilly + Hillcrest + Hillel + hillman + hillmen + hillock + hillside + hilltop + hilly + hilt + Hilton + hilum + him + Himalaya + himself + hind + hindmost + hindrance + hindsight + Hindu + Hinduism + Hines + hinge + Hinman + hint + hinterland + hip + hippo + Hippocrates + Hippocratic + hippodrome + hippopotamus + hippy + hipster + Hiram + hire + hireling + Hiroshi + Hiroshima + Hirsch + hirsute + his + Hispanic + hiss + histamine + histidine + histochemic + histochemistry + histogram + histology + historian + historic + historiography + history + histrionic + hit + Hitachi + hitch + Hitchcock + hither + hitherto + Hitler + hive + ho + hoagie + Hoagland + hoagy + hoar + hoard + hoarfrost + hoarse + hob + Hobart + Hobbes + hobble + Hobbs + hobby + hobbyhorse + hobgoblin + hobo + Hoboken + hoc + hock + hockey + hocus + hodge + hodgepodge + Hodges + Hodgkin + hoe + Hoff + Hoffman + hog + hogan + hogging + hoi + Hokan + Holbrook + Holcomb + hold + holden + holdout + holdover + holdup + hole + holeable + holiday + Holland + Hollandaise + holler + Hollerith + Hollingsworth + Hollister + hollow + Holloway + hollowware + holly + hollyhock + Hollywood + Holm + Holman + Holmdel + Holmes + holmium + holocaust + Holocene + hologram + holography + Holst + Holstein + holster + holt + Holyoke + holystone + Hom + homage + home + homebound + homebuild + homebuilder + homebuilding + homecome + homecoming + homeland + homemade + homemake + homeomorph + homeomorphic + homeopath + homeostasis + homeown + homeowner + Homeric + homesick + homestead + homeward + homework + homicidal + homicide + homily + homo + homogenate + homogeneity + homogeneous + homologous + homologue + homology + homomorphic + homomorphism + homonym + homophobia + homosexual + homotopy + homozygous + homunculus + Honda + hondo + Honduras + hone + honest + honesty + honey + honeybee + honeycomb + honeydew + honeymoon + honeysuckle + Honeywell + hong + honk + Honolulu + honoraria + honorarium + honorary + honoree + honorific + Honshu + hooch + hood + hoodlum + hoof + hoofmark + hook + hookup + hookworm + hooligan + hoop + hoopla + hoosegow + Hoosier + hoot + Hoover + hooves + hop + hope + hopeful + Hopkins + Hopkinsian + hopple + hopscotch + Horace + Horatio + horde + horehound + horizon + horizontal + hormone + horn + hornbeam + hornblende + Hornblower + hornet + hornmouth + horntail + hornwort + horny + horology + horoscope + Horowitz + horrendous + horrible + horrid + horrify + horror + horse + horseback + horsedom + horseflesh + horsefly + horsehair + horseman + horsemen + horseplay + horsepower + horseshoe + horsetail + horsewoman + horsewomen + horticulture + Horton + Horus + hose + hosiery + hospice + hospitable + hospital + host + hostage + hostelry + hostess + hostile + hostler + hot + hotbed + hotbox + hotel + hotelman + hothead + hothouse + hotrod + hotshot + Houdaille + Houdini + hough + Houghton + hound + hour + hourglass + house + houseboat + housebreak + housebroken + housefly + household + housekeep + housewares + housewife + housewives + housework + Houston + hove + hovel + hover + how + Howard + howdy + Howe + Howell + however + howl + howsoever + howsomever + hoy + hoyden + hoydenish + Hoyt + Hrothgar + h's + hub + Hubbard + Hubbell + hubbub + hubby + Huber + Hubert + hubris + huck + huckleberry + huckster + huddle + Hudson + hue + hued + huff + Huffman + hug + huge + hugging + Huggins + Hugh + Hughes + Hugo + huh + hulk + hull + hum + human + humane + humanitarian + humanoid + humble + Humboldt + humerus + humid + humidify + humidistat + humiliate + humility + Hummel + hummingbird + hummock + humorous + hump + humpback + Humphrey + humpty + humus + Hun + hunch + hundred + hundredfold + hundredth + hung + Hungarian + Hungary + hungry + hunk + hunt + Hunter + Huntington + Huntley + Huntsville + Hurd + hurdle + hurl + hurley + Huron + hurrah + hurray + hurricane + hurry + Hurst + hurt + hurtle + hurty + Hurwitz + husband + husbandman + husbandmen + husbandry + hush + husky + hustle + Huston + hut + hutch + Hutchins + Hutchinson + Hutchison + Huxley + Huxtable + huzzah + hyacinth + Hyades + hyaline + Hyannis + hybrid + Hyde + hydra + hydrangea + hydrant + hydrate + hydraulic + hydride + hydro + hydrocarbon + hydrochemistry + hydrochloric + hydrochloride + hydrodynamic + hydroelectric + hydrofluoric + hydrogen + hydrogenate + hydrology + hydrolysis + hydrometer + hydronium + hydrophilic + hydrophobia + hydrophobic + hydrosphere + hydrostatic + hydrothermal + hydrous + hydroxide + hydroxy + hydroxyl + hydroxylate + hyena + hygiene + hygrometer + hygroscopic + hying + Hyman + hymen + hymn + hymnal + hyperbola + hyperbolic + hyperboloid + hyperboloidal + hypertensive + hyphen + hyphenate + hypnosis + hypnotic + hypoactive + hypochlorite + hypochlorous + hypocrisy + hypocrite + hypocritic + hypocritical + hypocycloid + hypodermic + hypophyseal + hypotenuse + hypothalamic + hypothalamus + hypotheses + hypothesis + hypothetic + hypothyroid + hysterectomy + hysteresis + hysteria + hysteric + hysteron + i + IA + iambic + Ian + Iberia + ibex + ibid + ibis + IBM + Ibn + Icarus + ICC + ice + iceberg + icebox + Iceland + iceland + Icelandic + ichneumon + icicle + icky + icon + iconic + iconoclasm + iconoclast + icosahedra + icosahedral + icosahedron + icy + I'd + ID + Ida + Idaho + idea + ideal + ideate + idempotent + identical + identify + identity + ideolect + ideologue + ideology + idiocy + idiom + idiomatic + idiosyncrasy + idiosyncratic + idiot + idiotic + idle + idol + idolatry + idyll + idyllic + i.e + IEEE + if + iffy + Ifni + igloo + igneous + ignite + ignition + ignoble + ignominious + ignoramus + ignorant + ignore + Igor + ii + iii + Ike + IL + ileum + iliac + Iliad + I'll + ill + illegal + illegible + illegitimacy + illegitimate + illicit + illimitable + Illinois + illiteracy + illiterate + illogic + illume + illuminate + illumine + illusion + illusionary + illusive + illusory + illustrate + illustrious + Ilona + Ilyushin + I'm + image + imagen + imagery + imaginary + imaginate + imagine + imbalance + imbecile + imbibe + Imbrium + imbroglio + imbrue + imbue + imitable + imitate + immaculate + immanent + immaterial + immature + immeasurable + immediacy + immediate + immemorial + immense + immerse + immersion + immigrant + immigrate + imminent + immiscible + immobile + immobility + immoderate + immodest + immodesty + immoral + immortal + immovable + immune + immunization + immunoelectrophoresis + immutable + imp + impact + impair + impale + impalpable + impart + impartation + impartial + impassable + impasse + impassion + impassive + impatient + impeach + impeccable + impedance + impede + impediment + impel + impelled + impeller + impelling + impend + impenetrable + imperate + imperative + imperceivable + imperceptible + imperfect + imperial + imperil + imperious + imperishable + impermeable + impermissible + impersonal + impersonate + impertinent + imperturbable + impervious + impetuous + impetus + impiety + impinge + impious + impish + implacable + implant + implantation + implausible + implement + implementation + implementer + implementor + implicant + implicate + implicit + implode + implore + implosion + impolite + impolitic + imponderable + import + important + importation + importunate + importune + impose + imposition + impossible + impost + imposture + impotent + impound + impoverish + impracticable + impractical + imprecate + imprecise + imprecision + impregnable + impregnate + impresario + impress + impressible + impression + impressive + imprimatur + imprint + imprison + improbable + impromptu + improper + impropriety + improve + improvident + improvisate + improvisation + improvise + imprudent + impudent + impugn + impulse + impulsive + impunity + impure + imputation + impute + in + inability + inaccessible + inaccuracy + inaccurate + inaction + inactivate + inactive + inadequacy + inadequate + inadmissible + inadvertent + inadvisable + inalienable + inalterable + inane + inanimate + inappeasable + inapplicable + inappreciable + inapproachable + inappropriate + inapt + inaptitude + inarticulate + inasmuch + inattention + inattentive + inaudible + inaugural + inaugurate + inauspicious + inboard + inborn + inbred + inbreed + Inc + Inca + incalculable + incandescent + incant + incantation + incapable + incapacitate + incapacity + incarcerate + incarnate + incaution + incautious + incendiary + incense + incentive + inception + inceptor + incessant + incest + incestuous + inch + incident + incidental + incinerate + incipient + incise + incisive + incite + inclement + inclination + incline + inclose + include + inclusion + inclusive + incoherent + incombustible + income + incommensurable + incommensurate + incommunicable + incommutable + incomparable + incompatible + incompetent + incomplete + incompletion + incomprehensible + incomprehension + incompressible + incomputable + inconceivable + inconclusive + incondensable + incongruity + incongruous + inconsequential + inconsiderable + inconsiderate + inconsistent + inconsolable + inconspicuous + inconstant + incontestable + incontrollable + incontrovertible + inconvenient + inconvertible + incorporable + incorporate + incorrect + incorrigible + incorruptible + increasable + increase + incredible + incredulity + incredulous + increment + incriminate + incubate + incubi + incubus + inculcate + inculpable + incumbent + incur + incurred + incurrer + incurring + incursion + indebted + indecent + indecipherable + indecision + indecisive + indecomposable + indeed + indefatigable + indefensible + indefinable + indefinite + indelible + indelicate + indemnify + indemnity + indent + indentation + indenture + independent + indescribable + indestructible + indeterminable + indeterminacy + indeterminate + index + India + Indian + Indiana + Indianapolis + indicant + indicate + indices + indict + indicter + Indies + indifferent + indigene + indigenous + indigent + indigestible + indigestion + indignant + indignation + indignity + indigo + Indira + indirect + indiscernible + indiscoverable + indiscreet + indiscretion + indiscriminate + indispensable + indispose + indisposition + indisputable + indissoluble + indistinct + indistinguishable + indium + individual + individualism + individuate + indivisible + Indochina + Indochinese + indoctrinate + Indoeuropean + indolent + indomitable + Indonesia + indoor + indorse + indubitable + induce + inducible + induct + inductance + inductee + inductor + indulge + indulgent + industrial + industrialism + industrious + industry + indwell + indy + ineducable + ineffable + ineffective + ineffectual + inefficacy + inefficient + inelastic + inelegant + ineligible + ineluctable + inept + inequality + inequitable + inequity + inequivalent + ineradicable + inert + inertance + inertia + inertial + inescapable + inestimable + inevitable + inexact + inexcusable + inexhaustible + inexorable + inexpedient + inexpensive + inexperience + inexpert + inexpiable + inexplainable + inexplicable + inexplicit + inexpressible + inextinguishable + inextricable + infallible + infamous + infamy + infancy + infant + infantile + infantry + infantryman + infantrymen + infarct + infatuate + infeasible + infect + infectious + infelicitous + infelicity + infer + inference + inferential + inferior + infernal + inferno + inferred + inferring + infertile + infest + infestation + infidel + infield + infight + infighting + infiltrate + infima + infimum + infinite + infinitesimal + infinitive + infinitude + infinitum + infinity + infirm + infirmary + infix + inflame + inflammable + inflammation + inflammatory + inflate + inflater + inflationary + inflect + inflexible + inflict + inflicter + inflow + influence + influent + influential + influenza + influx + info + inform + informal + informant + Informatica + information + informative + infra + infract + infrared + infrastructure + infrequent + infringe + infuriate + infuse + infusible + infusion + ingather + ingenious + ingenuity + ingenuous + Ingersoll + ingest + ingestible + ingestion + inglorious + ingot + Ingram + ingrate + ingratiate + ingratitude + ingredient + ingrown + inhabit + inhabitant + inhabitation + inhalation + inhale + inharmonious + inhere + inherent + inherit + inheritance + inheritor + inhibit + inhibition + inhibitor + inhibitory + inholding + inhomogeneity + inhomogeneous + inhospitable + inhuman + inhumane + inimical + inimitable + iniquitous + iniquity + initial + initiate + inject + injudicious + Injun + injunct + injunction + injure + injurious + injury + injustice + ink + inkling + inlaid + inland + inlay + inlet + Inman + inmate + inn + innards + innate + inner + innermost + innkeeper + innocent + innocuous + innovate + innuendo + innumerable + inoculate + inoffensive + inoperable + inoperative + inopportune + inordinate + inorganic + input + inputting + inquest + inquire + inquiry + inquisition + inquisitive + inquisitor + inroad + insane + insatiable + inscribe + inscription + inscrutable + insect + insecticide + insecure + inseminate + insensible + insensitive + inseparable + insert + inset + inshore + inside + insidious + insight + insightful + insignia + insignificant + insincere + insinuate + insipid + insist + insistent + insofar + insolent + insoluble + insolvable + insolvent + insomnia + insomniac + insouciant + inspect + inspector + inspiration + inspire + instable + install + installation + instalment + instance + instant + instantaneous + instantiate + instead + instep + instigate + instill + instillation + instinct + instinctual + institute + institution + instruct + instructor + instrument + instrumentation + insubordinate + insubstantial + insufferable + insufficient + insular + insulate + insulin + insult + insuperable + insupportable + insuppressible + insurance + insure + insurgent + insurmountable + insurrect + insurrection + intact + intake + intangible + integer + integrable + integral + integrand + integrate + integrity + integument + intellect + intellectual + intelligent + intelligentsia + intelligible + intemperance + intemperate + intend + intendant + intense + intensify + intensive + intent + intention + inter + intercalate + intercept + interception + interceptor + intercom + interdict + interest + interfere + interference + interferometer + interim + interior + interject + interlude + intermediary + intermit + intermittent + intern + internal + internecine + internescine + Interpol + interpolant + interpolate + interpolatory + interpret + interpretation + interpretive + interregnum + interrogate + interrogatory + interrupt + interruptible + interruption + intersect + intersperse + interstice + interstitial + interval + intervene + intervenor + intervention + interviewee + intestate + intestinal + intestine + intimacy + intimal + intimate + intimater + intimidate + into + intolerable + intolerant + intonate + intone + intoxicant + intoxicate + intractable + intramolecular + intransigent + intransitive + intrepid + intricacy + intricate + intrigue + intrinsic + introduce + introduction + introductory + introit + introject + introspect + introversion + introvert + intrude + intrusion + intrusive + intuit + intuitable + intuition + intuitive + inundate + inure + invade + invalid + invalidate + invaluable + invariable + invariant + invasion + invasive + invective + inveigh + inveigle + invent + invention + inventive + inventor + inventory + Inverness + inverse + inversion + invert + invertebrate + invertible + invest + investigate + investigatory + investor + inveterate + inviable + invidious + invigorate + invincible + inviolable + inviolate + invisible + invitation + invite + invitee + invocate + invoice + invoke + involuntary + involute + involution + involutorial + involutory + involve + invulnerable + inward + Io + iodate + iodide + iodinate + iodine + ion + ionic + ionosphere + ionospheric + iota + Iowa + ipecac + ipsilateral + ipso + IQ + IR + Ira + Iran + Iranian + Iraq + irate + ire + Ireland + Irene + iridium + iris + Irish + Irishman + Irishmen + irk + irksome + Irma + iron + ironic + ironside + ironstone + ironwood + irony + Iroquois + irradiate + irrational + Irrawaddy + irreclaimable + irreconcilable + irrecoverable + irredeemable + irredentism + irredentist + irreducible + irrefutable + irregular + irrelevancy + irrelevant + irremediable + irremovable + irreparable + irreplaceable + irrepressible + irreproachable + irreproducible + irresistible + irresolute + irresolution + irresolvable + irrespective + irresponsible + irretrievable + irreverent + irreversible + irrevocable + irrigate + irritable + irritant + irritate + irruption + IRS + Irvin + Irvine + Irving + Irwin + i's + is + Isaac + Isaacson + Isabel + Isabella + Isadore + Isaiah + isentropic + Isfahan + Ising + isinglass + Isis + Islam + Islamabad + Islamic + island + isle + isn't + isochronal + isochronous + isocline + isolate + Isolde + isomer + isomorph + isomorphic + isopleth + isotherm + isothermal + isotope + isotopic + isotropic + isotropy + Israel + Israeli + Israelite + issuance + issuant + issue + Istanbul + Istvan + it + Italian + italic + Italy + itch + it'd + item + iterate + Ithaca + itinerant + itinerary + it'll + Ito + itself + IT&T + ITT + iv + Ivan + Ivanhoe + I've + Iverson + ivory + ivy + ix + Izvestia + j + jab + Jablonsky + jack + jackanapes + jackass + jackboot + jackdaw + jacket + Jackie + jackknife + Jackman + jackpot + Jackson + Jacksonian + Jacksonville + Jacky + JACM + Jacob + Jacobean + Jacobi + Jacobian + Jacobite + Jacobs + Jacobsen + Jacobson + Jacobus + Jacqueline + Jacques + jade + Jaeger + jag + jagging + jaguar + jail + Jaime + Jakarta + Jake + jake + jalopy + jam + Jamaica + jamboree + James + Jamestown + Jan + Jane + Janeiro + Janet + jangle + Janice + janissary + janitor + janitorial + Janos + Jansenist + January + Janus + Japan + Japanese + jar + jargon + Jarvin + Jason + jasper + jaundice + jaunty + Java + javelin + jaw + jawbone + jawbreak + jay + jazz + jazzy + jealous + jealousy + jean + Jeannie + Jed + jeep + Jeff + Jefferson + Jeffersonian + Jeffrey + Jehovah + jejune + jejunum + jelly + jellyfish + Jenkins + Jennie + Jennifer + Jennings + jenny + Jensen + jeopard + jeopardy + Jeremiah + Jeremy + Jeres + Jericho + jerk + jerky + Jeroboam + Jerome + jerry + jersey + Jerusalem + jess + Jesse + Jessica + Jessie + jest + Jesuit + Jesus + jet + jetliner + jettison + Jew + jewel + Jewell + jewelry + Jewett + Jewish + jibe + jiffy + jig + jigging + jiggle + jigsaw + Jill + jilt + Jim + Jimenez + Jimmie + jimmy + jingle + jinx + jitter + jitterbug + jitterbugger + jitterbugging + jittery + jive + Jo + Joan + Joanna + Joanne + Joaquin + job + jobholder + jock + jockey + jockstrap + jocose + jocular + jocund + Joe + Joel + joey + jog + jogging + joggle + Johann + Johannes + Johannesburg + Johansen + Johanson + John + Johnny + Johns + Johnsen + Johnson + Johnston + Johnstown + join + joint + joke + Joliet + Jolla + jolly + jolt + Jon + Jonas + Jonathan + Jones + jonquil + Jordan + Jorge + Jorgensen + Jorgenson + Jose + Josef + Joseph + Josephine + Josephson + Josephus + Joshua + Josiah + joss + jostle + jot + joule + jounce + journal + journalese + journey + journeyman + journeymen + joust + Jovanovich + Jove + jovial + Jovian + jowl + jowly + joy + Joyce + joyful + joyous + joyride + joystick + Jr + j's + Juan + Juanita + jubilant + jubilate + jubilee + Judaism + Judas + Judd + Jude + judge + judicable + judicatory + judicature + judicial + judiciary + judicious + Judith + judo + Judson + Judy + jug + jugate + jugging + juggle + Jugoslavia + juice + juicy + juju + jujube + juke + Jukes + julep + Jules + Julia + Julie + Juliet + Julio + Julius + July + jumble + jumbo + jump + jumpy + junco + junction + junctor + juncture + June + Juneau + jungle + junior + juniper + junk + junkerdom + junketeer + junky + Juno + junta + Jupiter + Jura + Jurassic + jure + juridic + jurisdiction + jurisprudent + jurisprudential + juror + jury + just + justice + justiciable + justify + Justine + Justinian + jut + jute + Jutish + juvenile + juxtapose + juxtaposition + k + Kabuki + Kabul + Kaddish + Kafka + Kafkaesque + Kahn + kaiser + Kajar + Kalamazoo + kale + kaleidescope + kaleidoscope + kalmia + Kalmuk + Kamchatka + kamikaze + Kampala + Kane + kangaroo + Kankakee + Kansas + Kant + kaolin + kaolinite + Kaplan + kapok + kappa + Karachi + Karamazov + karate + Karen + Karl + karma + Karol + Karp + karyatid + Kaskaskia + Kate + Katharine + Katherine + Kathleen + Kathy + Katie + Katmandu + Katowice + Katz + Kauffman + Kaufman + kava + Kay + kayo + kazoo + Keaton + Keats + keddah + keel + keelson + keen + Keenan + keep + keeshond + keg + Keith + Keller + Kelley + Kellogg + Kelly + kelly + kelp + Kelsey + Kelvin + Kemp + ken + Kendall + Kennan + Kennecott + Kennedy + kennel + Kenneth + Kenney + keno + Kensington + Kent + Kenton + Kentucky + Kenya + Kenyon + Kepler + kept + kerchief + Kermit + kern + kernel + Kernighan + kerosene + Kerr + kerry + kerygma + Kessler + kestrel + ketch + ketchup + ketone + ketosis + Kettering + kettle + Kevin + key + keyboard + keyed + Keyes + keyhole + Keynes + Keynesian + keynote + keypunch + keys + keystone + keyword + khaki + khan + Khartoum + Khmer + Khrushchev + kibbutzim + kibitz + kick + kickback + kickoff + kid + Kidde + kiddie + kidnap + kidnapped + kidnapping + kidney + Kieffer + Kiev + Kiewit + Kigali + Kikuyu + Kilgore + kill + killdeer + killjoy + kilo + kilohm + Kim + Kimball + Kimberly + kimono + kin + kind + kindergarten + kindle + kindred + kinematic + kinesic + kinesthesis + kinetic + king + kingbird + kingdom + kingfisher + kinglet + kingpin + Kingsbury + Kingsley + Kingston + kink + kinky + Kinney + Kinshasha + kiosk + Kiowa + Kipling + Kirby + Kirchner + Kirchoff + kirk + Kirkland + Kirkpatrick + Kirov + kiss + kissing + kit + Kitakyushu + kitchen + kitchenette + kite + kitten + kittenish + kittle + kitty + kiva + kivu + Kiwanis + kiwi + Klan + Klaus + klaxon + kleenex + Klein + Kline + Klux + klystron + knack + Knapp + knapsack + Knauer + knead + knee + kneecap + kneel + knell + knelt + knew + knick + Knickerbocker + knife + knifelike + knight + Knightsbridge + knit + knives + knob + knobby + knock + knockdown + knockout + knoll + knot + Knott + knotty + know + knoweth + knowhow + knowledge + knowledgeable + Knowles + Knowlton + known + Knox + Knoxville + knuckle + knuckleball + Knudsen + Knudson + knurl + Knutsen + Knutson + koala + Kobayashi + Koch + Kochab + Kodachrome + Kodak + kodak + Kodiak + Koenig + Koenigsberg + kohlrabi + koinonia + kola + kolkhoz + kombu + Kong + Konrad + Koppers + Koran + Korea + kosher + Kovacs + Kowalewski + Kowalski + Kowloon + kraft + Krakatoa + Krakow + Kramer + Krause + kraut + Krebs + Kremlin + Kresge + Krieger + Krishna + Kristin + Kronecker + Krueger + Kruger + Kruse + krypton + k's + KS + Ku + kudo + kudzu + Kuhn + kulak + kumquat + Kurd + Kurt + Kuwait + kwashiorkor + KY + Kyle + Kyoto + l + la + lab + Laban + label + labia + labial + labile + lability + laboratory + laborious + labour + Labrador + labradorite + labyrinth + lac + lace + lacerate + Lacerta + lacewing + Lachesis + lack + lackadaisic + lackey + lackluster + laconic + lacquer + lacrosse + lactate + lactose + lacuna + lacunae + lacustrine + lacy + lad + laden + ladle + lady + ladyfern + ladylike + Lafayette + lag + lager + lagging + lagoon + Lagos + Lagrange + Lagrangian + Laguerre + Lahore + laid + Laidlaw + lain + lair + laissez + laity + lake + Lakehurst + lakeside + lam + Lamar + Lamarck + lamb + lambda + lambert + lame + lamellar + lament + lamentation + laminar + laminate + lamp + lampblack + lamplight + lampoon + lamprey + Lana + Lancashire + Lancaster + lance + land + landau + landfill + landhold + Landis + landlord + landmark + landowner + landscape + landslide + lane + Lang + Lange + Langley + Langmuir + language + languid + languish + lank + Lanka + lanky + Lansing + lantern + lanthanide + lanthanum + Lao + Laocoon + Laos + Laotian + lap + lapel + lapelled + lapidary + Laplace + Laplacian + lappet + lapse + Laramie + larceny + larch + lard + Laredo + Lares + large + largemouth + largesse + lariat + lark + Larkin + larkspur + Larry + Lars + Larsen + Larson + larva + larvae + larval + laryngeal + larynges + larynx + lascar + lascivious + lase + lash + lass + lasso + last + Laszlo + latch + late + latent + later + latera + lateral + Lateran + laterite + latex + lath + lathe + Lathrop + Latin + Latinate + latitude + latitudinal + latitudinary + Latrobe + latter + lattice + latus + Latvia + laud + laudanum + laudatory + Lauderdale + Laue + laugh + laughingstock + Laughlin + laughter + launch + launder + laundry + laura + laureate + laurel + Lauren + Laurence + Laurent + Laurentian + Laurie + Lausanne + lava + lavabo + lavatory + lavender + lavish + Lavoisier + law + lawbreak + lawbreaker + lawbreaking + lawful + lawgive + lawgiver + lawgiving + lawmake + lawman + lawmen + lawn + Lawrence + lawrencium + Lawson + lawsuit + lawyer + lax + laxative + lay + layette + layman + laymen + layoff + layout + Layton + layup + Lazarus + laze + lazy + lazybones + lea + leach + leachate + lead + leaden + leadeth + leadsman + leadsmen + leaf + leaflet + leafy + league + leak + leakage + leaky + lean + Leander + leap + leapfrog + leapt + Lear + learn + lease + leasehold + leash + least + leather + leatherback + leatherneck + leatherwork + leathery + leave + leaven + Leavenworth + Lebanese + Lebanon + lebensraum + Lebesgue + lecher + lechery + lectern + lectionary + lecture + led + ledge + lee + leech + Leeds + leek + leer + leery + Leeuwenhoek + leeward + leeway + left + leftmost + leftover + leftward + lefty + leg + legacy + legal + legate + legatee + legato + legend + legendary + Legendre + legerdemain + legging + leggy + leghorn + legible + legion + legislate + legislature + legitimacy + legitimate + legume + leguminous + Lehigh + Lehman + Leigh + Leighton + Leila + leisure + leitmotif + leitmotiv + Leland + lemma + lemming + lemon + lemonade + Lemuel + Len + Lena + lend + length + lengthen + lengthwise + lengthy + lenient + Lenin + Leningrad + Leninism + Leninist + Lennox + Lenny + Lenore + lens + lent + Lenten + lenticular + lentil + Leo + Leon + Leona + Leonard + Leonardo + Leone + Leonid + leonine + leopard + Leopold + leper + lepidolite + leprosy + Leroy + Lesbian + lesbian + lesion + Leslie + Lesotho + less + lessee + lessen + lesson + lessor + lest + Lester + let + lethal + lethargic + lethargy + Lethe + Letitia + letterhead + letterman + lettermen + lettuce + leucine + leukemia + Lev + levee + level + lever + leverage + Levi + Levin + Levine + Levis + levitate + Leviticus + Levitt + levity + levulose + levy + Lew + lew + lewd + lewis + lexical + lexicography + lexicon + Lexington + Leyden + liable + liaison + liar + libation + libel + libelous + liberal + liberate + Liberia + libertarian + libertine + liberty + libidinous + libido + librarian + library + librate + librettist + libretto + Libreville + Libya + lice + licensable + licensee + licensor + licentious + lichen + lick + licorice + lid + lie + Liechtenstein + lied + lien + lieu + lieutenant + life + lifeblood + lifeboat + lifeguard + lifelike + lifelong + lifespan + lifestyle + lifetime + LIFO + lift + ligament + ligand + ligature + Ligget + Liggett + light + lighten + lightface + lighthearted + lighthouse + lightning + lightproof + lightweight + lignite + lignum + like + liken + likewise + Lila + lilac + Lilian + Lillian + Lilliputian + Lilly + lilt + lily + lim + Lima + limb + limbic + limbo + lime + limelight + Limerick + limestone + limit + limitate + limitation + limousine + limp + limpet + limpid + limpkin + Lin + Lincoln + Lind + Linda + Lindberg + Lindbergh + linden + Lindholm + Lindquist + Lindsay + Lindsey + Lindstrom + line + lineage + lineal + linear + linebacker + lineman + linemen + linen + lineprinter + lineup + linger + lingerie + lingo + lingua + lingual + linguist + liniment + link + linkage + linoleum + Linotype + linseed + lint + Linus + lion + Lionel + lioness + lip + lipid + Lippincott + lipread + Lipschitz + Lipscomb + lipstick + Lipton + liquefaction + liquefy + liqueur + liquid + liquidate + liquidus + liquor + Lisa + Lisbon + Lise + lisle + lisp + Lissajous + list + listen + lit + litany + literacy + literal + literary + literate + literature + lithe + lithic + lithium + lithograph + lithography + lithology + lithosphere + lithospheric + Lithuania + litigant + litigate + litigious + litmus + litterbug + little + littleneck + Littleton + Litton + littoral + liturgic + liturgy + live + liven + Livermore + Liverpool + Liverpudlian + liverwort + livery + livestock + liveth + livid + Livingston + livre + Liz + lizard + Lizzie + Lloyd + lo + load + loaf + loam + loamy + loan + loath + loathe + loathsome + loaves + lob + lobar + lobby + lobe + loblolly + lobo + lobotomy + lobscouse + lobster + lobular + lobule + local + locale + locate + loci + lock + Locke + Lockhart + Lockheed + Lockian + locknut + lockout + locksmith + lockstep + lockup + Lockwood + locomote + locomotion + locomotive + locomotor + locomotory + locoweed + locus + locust + locution + locutor + lodestone + lodge + lodgepole + Lodowick + Loeb + l'oeil + loess + loft + lofty + log + Logan + logarithm + logarithmic + loge + loggerhead + logging + logic + logician + logistic + logjam + logo + loin + loincloth + Loire + Lois + loiter + Loki + Lola + loll + lollipop + lolly + Lomb + Lombard + Lombardy + Lome + London + lone + lonesome + long + longevity + Longfellow + longhand + longhorn + longish + longitude + longitudinal + longleg + longstanding + longtime + longue + look + lookout + lookup + loom + Loomis + loon + loop + loophole + loose + looseleaf + loosen + loosestrife + loot + lop + lope + Lopez + lopseed + lopsided + loquacious + loquacity + loquat + lord + lordosis + lore + Lorelei + Loren + Lorenz + Loretta + Lorinda + Lorraine + Los + losable + lose + loss + lossy + lost + lot + lotion + Lotte + lottery + Lottie + lotus + Lou + loud + loudspeak + loudspeaker + loudspeaking + Louis + Louisa + Louise + Louisiana + Louisville + lounge + Lounsbury + Lourdes + louse + lousewort + lousy + louver + Louvre + love + lovebird + Lovelace + Loveland + lovelorn + low + lowboy + lowdown + Lowe + Lowell + lower + lowland + Lowry + loy + loyal + loyalty + lozenge + l's + LSI + Ltd + LTV + Lubbock + Lubell + lubricant + lubricate + lubricious + lubricity + Lucas + Lucerne + Lucia + Lucian + lucid + Lucifer + Lucille + Lucius + luck + lucky + lucrative + lucre + Lucretia + Lucretius + Lucy + lucy + ludicrous + Ludlow + Ludwig + Lufthansa + Luftwaffe + lug + luge + luger + luggage + lugging + Luis + Luke + luke + lukemia + lukewarm + lull + lullaby + lulu + lumbar + lumber + lumberman + lumbermen + lumen + luminance + luminary + luminescent + luminosity + luminous + lummox + lump + lumpish + Lumpur + lumpy + lunacy + lunar + lunary + lunate + lunatic + lunch + luncheon + lunchroom + lunchtime + Lund + Lundberg + Lundquist + lung + lunge + lupine + Lura + lurch + lure + lurid + lurk + Lusaka + luscious + lush + lust + lustful + lustrous + lusty + lutanist + lute + lutetium + Luther + Lutheran + Lutz + lux + luxe + Luxembourg + luxuriant + luxuriate + luxurious + luxury + Luzon + L'vov + lycopodium + Lydia + lye + lying + Lykes + Lyle + Lyman + lymph + lymphocyte + lymphoma + lynch + Lynchburg + Lynn + lynx + Lyon + Lyons + Lyra + lyric + lyricism + Lysenko + lysergic + lysine + m + ma + Mabel + Mac + macabre + macaque + MacArthur + Macassar + Macbeth + MacDonald + MacDougall + mace + Macedon + Macedonia + MacGregor + Mach + Machiavelli + machination + machine + machinelike + machinery + machismo + macho + macintosh + mack + MacKenzie + mackerel + Mackey + Mackinac + Mackinaw + mackintosh + MacMillan + Macon + macrame + macro + macromolecular + macromolecule + macrophage + macroprocessor + macroscopic + macrostructure + mad + Madagascar + madam + Madame + madcap + madden + Maddox + made + Madeira + Madeleine + Madeline + madhouse + Madison + madman + madmen + Madonna + Madras + Madrid + madrigal + Madsen + madstone + Mae + Maelstrom + maestro + Mafia + magazine + Magdalene + magenta + Maggie + maggot + maggoty + magi + magic + magician + magisterial + magistrate + magma + magna + magnanimity + magnanimous + magnate + magnesia + magnesite + magnesium + magnet + magnetic + magnetite + magneto + magnetron + magnificent + magnify + magnitude + magnolia + magnum + Magnuson + Magog + magpie + Magruder + Mahayana + Mahayanist + mahogany + Mahoney + maid + maiden + maidenhair + maidservant + Maier + mail + mailbox + mailman + mailmen + maim + main + Maine + mainland + mainline + mainstay + mainstream + maintain + maintenance + maitre + majestic + majesty + major + make + makeshift + makeup + Malabar + maladapt + maladaptive + maladjust + maladroit + malady + Malagasy + malaise + malaprop + malaria + malarial + Malawi + Malay + Malaysia + Malcolm + malconduct + malcontent + Malden + maldistribute + Maldive + male + maledict + malefactor + malevolent + malfeasant + malformation + malformed + malfunction + Mali + malice + malicious + malign + malignant + mall + mallard + malleable + mallet + Mallory + mallow + malnourished + malnutrition + malocclusion + Malone + Maloney + malposed + malpractice + Malraux + malt + Malta + Maltese + Malton + maltose + maltreat + mambo + mamma + mammal + mammalian + mammoth + man + mana + manage + manageable + managerial + Managua + Manama + manatee + Manchester + mandamus + mandarin + mandate + mandatory + mandrake + mandrel + mandrill + mane + maneuver + Manfred + manganese + mange + mangel + mangle + Manhattan + manhole + manhood + mania + maniac + maniacal + manic + manifest + manifestation + manifold + manikin + Manila + manipulable + manipulate + Manitoba + mankind + Manley + Mann + manna + mannequin + mannerism + manometer + manor + manpower + Mans + manse + manservant + Mansfield + mansion + manslaughter + mantel + mantic + mantis + mantissa + mantle + mantlepiece + mantrap + manual + Manuel + manufacture + manumission + manumit + manumitted + manure + manuscript + Manville + many + manzanita + Mao + Maori + map + maple + mar + marathon + maraud + marble + Marc + Marceau + Marcel + Marcello + march + Marcia + Marco + Marcus + Marcy + Mardi + mare + Margaret + margarine + Margery + margin + marginal + marginalia + Margo + Marguerite + maria + Marianne + Marie + Marietta + marigold + marijuana + Marilyn + marimba + Marin + marina + marinade + marinate + marine + Marino + Mario + Marion + marionette + marital + maritime + marjoram + Marjorie + Marjory + mark + market + marketeer + marketplace + marketwise + Markham + Markov + Markovian + Marks + marksman + marksmen + Marlboro + Marlborough + Marlene + marlin + Marlowe + marmalade + marmot + maroon + marque + marquee + marquess + Marquette + marquis + marriage + marriageable + married + Marrietta + Marriott + marrow + marrowbone + marry + Mars + Marseilles + marsh + Marsha + marshal + Marshall + marshland + marshmallow + marsupial + mart + marten + martensite + Martha + martial + Martian + martin + Martinez + martingale + martini + Martinique + Martinson + Marty + martyr + martyrdom + marvel + marvelous + Marvin + Marx + Mary + Maryland + mascara + masculine + maser + Maseru + mash + mask + masochism + masochist + mason + Masonic + Masonite + masonry + masque + masquerade + mass + Massachusetts + massacre + massage + masseur + Massey + massif + massive + mast + masterful + mastermind + masterpiece + mastery + mastic + mastiff + mastodon + masturbate + mat + match + matchbook + matchmake + mate + Mateo + mater + material + materiel + maternal + maternity + math + mathematic + mathematician + Mathematik + Mathews + Mathewson + Mathias + Mathieu + Matilda + matinal + matinee + matins + Matisse + matriarch + matriarchal + matrices + matriculate + matrimonial + matrimony + matrix + matroid + matron + Matson + Matsumoto + matte + Matthew + Matthews + mattock + mattress + Mattson + maturate + mature + maudlin + maul + Maureen + Maurice + Mauricio + Maurine + Mauritania + Mauritius + mausoleum + mauve + maverick + Mavis + maw + mawkish + Mawr + Max + max + maxim + maxima + maximal + Maximilian + maximum + Maxine + maxwell + Maxwellian + may + Maya + mayapple + maybe + Mayer + Mayfair + Mayflower + mayhem + Maynard + Mayo + mayonnaise + mayor + mayoral + mayst + Mazda + maze + mazurka + MBA + Mbabane + McAdams + McAllister + McBride + McCabe + McCall + McCallum + McCann + McCarthy + McCarty + McCauley + McClain + McClellan + McClure + McCluskey + McConnel + McConnell + McCormick + McCoy + McCracken + McCullough + McDaniel + McDermott + McDonald + McDonnell + McDougall + McDowell + McElroy + McFadden + McFarland + McGee + McGill + McGinnis + McGovern + McGowan + McGrath + McGraw + McGregor + McGuire + McHugh + McIntosh + McIntyre + McKay + McKee + McKenna + McKenzie + McKeon + McKesson + McKinley + McKinney + McKnight + McLaughlin + McLean + McLeod + McMahon + McMillan + McMullen + McNally + McNaughton + McNeil + McNulty + McPherson + MD + me + mead + meadow + meadowland + meadowsweet + meager + meal + mealtime + mealy + mean + meander + meaningful + meant + meantime + meanwhile + measle + measure + meat + meaty + Mecca + mechanic + mechanism + mechanist + mecum + medal + medallion + meddle + Medea + Medford + media + medial + median + mediate + medic + medicate + Medici + medicinal + medicine + medico + mediocre + mediocrity + meditate + Mediterranean + medium + medlar + medley + Medusa + meek + meet + meetinghouse + Meg + megabit + megabyte + megahertz + megalomania + megalomaniac + megaton + megavolt + megawatt + megaword + megohm + Meier + meiosis + Meistersinger + Mekong + Mel + melamine + melancholy + Melanesia + melange + Melanie + melanin + melanoma + Melbourne + Melcher + meld + melee + Melinda + meliorate + Melissa + Mellon + mellow + melodic + melodious + melodrama + melodramatic + melody + melon + Melpomene + melt + meltdown + meltwater + Melville + Melvin + member + membrane + memento + memo + memoir + memorabilia + memorable + memoranda + memorandum + memorial + memory + Memphis + men + menace + menagerie + menarche + mend + mendacious + mendacity + Mendel + mendelevium + Mendelssohn + Menelaus + menfolk + menhaden + menial + meningitis + meniscus + Menlo + Mennonite + menopause + menstruate + mensurable + mensuration + mental + mention + mentor + menu + Menzies + Mephistopheles + mercantile + Mercator + Mercedes + mercenary + mercer + merchandise + merchant + merciful + mercilessly + Merck + mercurial + mercuric + mercury + mercy + mere + Meredith + meretricious + merganser + merge + meridian + meridional + meringue + merit + meritorious + Merle + merlin + mermaid + Merriam + Merrill + Merrimack + merriment + Merritt + merry + merrymake + Mervin + mesa + mescal + mescaline + mesenteric + mesh + mesmeric + mesoderm + meson + Mesopotamia + Mesozoic + mesquite + mess + message + messenger + Messiah + messiah + messieurs + Messrs + messy + met + metabole + metabolic + metabolism + metabolite + metal + metallic + metalliferous + metallography + metalloid + metallurgic + metallurgist + metallurgy + metalwork + metamorphic + metamorphism + metamorphose + metamorphosis + metaphor + metaphoric + Metcalf + mete + meteor + meteoric + meteorite + meteoritic + meteorology + meter + methacrylate + methane + methanol + methionine + method + methodic + Methodism + Methodist + methodology + Methuen + Methuselah + methyl + methylene + meticulous + metier + metric + metro + metronome + metropolis + metropolitan + mettle + mettlesome + Metzler + mew + Mexican + Mexico + Meyer + Meyers + mezzanine + mezzo + mi + Miami + miasma + miasmal + mica + mice + Michael + Michaelangelo + Michel + Michelangelo + Michele + Michelin + Michelson + Michigan + michigan + Mickelson + Mickey + Micky + micro + microbial + microcosm + microfiche + micrography + microjoule + micron + Micronesia + microscopy + mid + Midas + midband + midday + middle + Middlebury + middleman + middlemen + Middlesex + Middleton + Middletown + middleweight + midge + midget + midland + midmorn + midnight + midpoint + midrange + midscale + midsection + midshipman + midshipmen + midspan + midst + midstream + midterm + midway + midweek + Midwest + Midwestern + midwife + midwinter + midwives + mien + miff + mig + might + mightn't + mighty + mignon + migrant + migrate + migratory + Miguel + mike + mila + Milan + milch + mild + mildew + Mildred + mile + mileage + Miles + milestone + milieu + militant + militarism + militarist + military + militate + militia + militiamen + milk + milkweed + milky + mill + Millard + millenarian + millenia + millennia + millennium + miller + millet + Millie + Millikan + millinery + million + millionaire + millions + millionth + millipede + Mills + millstone + milord + milt + Milton + Miltonic + Milwaukee + mimeograph + mimesis + mimetic + Mimi + mimic + mimicked + mimicking + min + minaret + mince + mincemeat + mind + Mindanao + mindful + mine + minefield + mineral + mineralogy + Minerva + minestrone + minesweeper + mingle + mini + miniature + minibike + minicomputer + minim + minima + minimal + minimax + minimum + minion + ministerial + ministry + mink + Minneapolis + Minnesota + Minnie + minnow + Minoan + minor + Minos + minot + Minsk + Minsky + minstrel + minstrelsy + mint + minuend + minuet + minus + minuscule + minute + minuteman + minutemen + minutiae + Miocene + Mira + miracle + miraculous + mirage + Miranda + mire + Mirfak + Miriam + mirror + mirth + misanthrope + misanthropic + miscegenation + miscellaneous + miscellany + mischievous + miscible + miscreant + miser + misery + misnomer + misogynist + misogyny + mispronunciation + miss + misshapen + missile + mission + missionary + Mississippi + Mississippian + missive + Missoula + Missouri + Missy + mist + mistletoe + mistress + misty + MIT + Mitchell + mite + miterwort + mitigate + mitochondria + mitosis + mitral + mitre + mitt + mitten + mix + mixture + mixup + Mizar + MN + mnemonic + MO + moan + moat + mob + mobcap + Mobil + mobile + mobility + mobster + moccasin + mock + mockernut + mockery + mockingbird + mockup + modal + mode + model + modem + moderate + modern + modest + Modesto + modesty + modicum + modify + modish + modular + modulate + module + moduli + modulo + modulus + modus + Moe + Moen + Mogadiscio + Mohammedan + Mohawk + Mohr + moiety + Moines + moire + Moiseyev + moist + moisten + moisture + molal + molar + molasses + mold + Moldavia + moldboard + mole + molecular + molecule + molehill + molest + Moliere + Moline + Moll + Mollie + mollify + mollusk + Molly + mollycoddle + Moloch + molt + molten + Moluccas + molybdate + molybdenite + molybdenum + moment + momenta + momentary + momentous + momentum + mommy + Mona + Monaco + monad + monadic + monarch + monarchic + monarchy + Monash + monastery + monastic + monaural + Monday + monel + monetarism + monetarist + monetary + money + moneymake + moneywort + Mongolia + mongoose + monic + Monica + monies + monitor + monitory + monk + monkey + monkeyflower + monkish + Monmouth + Monoceros + monochromatic + monochromator + monocotyledon + monocular + monogamous + monogamy + monoid + monolith + monologist + monologue + monomer + monomeric + monomial + Monongahela + monopoly + monotonous + monotreme + monoxide + Monroe + Monrovia + Monsanto + monsieur + monsoon + monster + monstrosity + monstrous + Mont + montage + Montague + Montana + Montclair + monte + Montenegrin + Monterey + Monteverdi + Montevideo + Montgomery + month + Monticello + Montmartre + Montpelier + Montrachet + Montreal + Monty + monument + moo + mood + moody + moon + Mooney + moonlight + moonlit + moor + Moore + Moorish + moose + moot + mop + moraine + moral + morale + Moran + morass + moratorium + Moravia + morbid + more + morel + Moreland + moreover + Moresby + Morgan + morgen + morgue + Moriarty + moribund + Morley + Mormon + morn + Moroccan + Morocco + moron + morose + morpheme + morphemic + morphine + morphism + morphology + morphophonemic + Morrill + morris + Morrison + Morrissey + Morristown + morrow + Morse + morsel + mort + mortal + mortar + mortem + mortgage + mortgagee + mortgagor + mortician + mortify + mortise + Morton + mosaic + Moscow + Moser + Moses + Moslem + mosque + mosquito + moss + mossy + most + mot + motel + motet + moth + mothball + mother + motherhood + motherland + motif + motion + motivate + motive + motley + motor + motorcycle + Motorola + mottle + motto + mould + Moulton + mound + mount + mountain + mountaineer + mountainous + mountainside + mourn + mournful + mouse + moustache + mousy + mouth + mouthful + mouthpiece + Mouton + move + movie + mow + Moyer + Mozart + MPH + Mr + Mrs + m's + Ms + Mt + mu + much + mucilage + muck + mucosa + mucus + mud + Mudd + muddle + muddlehead + muddy + mudguard + mudsling + Mueller + muezzin + muff + muffin + muffle + mug + mugging + muggy + mugho + Muir + Mukden + mulatto + mulberry + mulch + mulct + mule + mulish + mull + mullah + mullein + Mullen + mulligan + mulligatawny + mullion + multi + multifarious + multinomial + multiple + multiplet + multiplex + multiplexor + multipliable + multiplicand + multiplication + multiplicative + multiplicity + multiply + multitude + multitudinous + mum + mumble + Mumford + mummy + munch + Muncie + mundane + mung + Munich + municipal + munificent + munition + Munson + muon + Muong + mural + murder + murderous + muriatic + Muriel + murk + murky + murmur + Murphy + Murray + murre + Muscat + muscle + Muscovite + Muscovy + muscular + musculature + muse + museum + mush + mushroom + mushy + music + musicale + musician + musicology + musk + Muskegon + muskellunge + musket + muskmelon + muskox + muskoxen + muskrat + Muslim + muslim + muslin + mussel + must + mustache + mustachio + mustang + mustard + mustn't + musty + mutagen + mutandis + mutant + mutate + mutatis + mute + mutilate + mutineer + mutiny + mutt + mutter + mutton + mutual + mutuel + Muzak + Muzo + muzzle + my + Mycenae + Mycenaean + mycobacteria + mycology + myel + myeline + myeloid + Myers + mylar + mynah + Mynheer + myocardial + myocardium + myofibril + myoglobin + myopia + myopic + myosin + Myra + myriad + Myron + myrrh + myrtle + myself + mysterious + mystery + mystic + mystify + mystique + myth + mythic + mythology + n + NAACP + nab + Nabisco + nabla + Nadia + Nadine + nadir + nag + Nagasaki + nagging + Nagoya + Nagy + naiad + nail + Nair + Nairobi + naive + naivete + Nakayama + naked + name + nameable + nameplate + namesake + Nan + Nancy + Nanette + Nanking + nanometer + nanosecond + Nantucket + Naomi + nap + nape + napkin + Naples + Napoleon + Napoleonic + Narbonne + narcissism + narcissist + narcissus + narcosis + narcotic + Narragansett + narrate + narrow + nary + NASA + nasal + nascent + Nash + Nashua + Nashville + Nassau + nasturtium + nasty + Nat + natal + Natalie + Natchez + Nate + Nathan + Nathaniel + nation + nationhood + nationwide + native + NATO + natty + natural + nature + naturopath + naughty + nausea + nauseate + nauseum + nautical + nautilus + Navajo + naval + nave + navel + navigable + navigate + navy + nay + Nazarene + Nazareth + Nazi + Nazism + NBC + NBS + NC + NCAA + NCAR + NCO + NCR + ND + Ndjamena + ne + Neal + Neanderthal + neap + Neapolitan + near + nearby + nearest + nearsighted + neat + neater + neath + Nebraska + nebula + nebulae + nebular + nebulous + necessary + necessitate + necessity + neck + necklace + neckline + necktie + necromancer + necromancy + necromantic + necropsy + necrosis + necrotic + nectar + nectareous + nectarine + nectary + Ned + nee + need + needful + Needham + needham + needle + needlepoint + needlework + needn't + needy + Neff + negate + neglect + neglecter + negligee + negligent + negligible + negotiable + negotiate + Negro + Negroes + Negroid + Nehru + Neil + neither + Nell + Nellie + Nelsen + Nelson + nemesis + neoclassic + neoconservative + neodymium + neolithic + neologism + neon + neonatal + neonate + neophyte + neoprene + Nepal + nepenthe + nephew + Neptune + neptunium + nereid + Nero + nerve + nervous + Ness + nest + nestle + Nestor + net + nether + Netherlands + netherworld + nettle + nettlesome + network + Neumann + neural + neuralgia + neurasthenic + neuritis + neuroanatomic + neuroanatomy + neuroanotomy + neurology + neuromuscular + neuron + neuronal + neuropathology + neurophysiology + neuropsychiatric + neuroses + neurosis + neurotic + neuter + neutral + neutrino + neutron + Neva + Nevada + neve + never + nevertheless + Nevins + new + Newark + Newbold + newborn + Newcastle + newcomer + newel + Newell + newfound + Newfoundland + newline + newlywed + Newman + Newport + newsboy + newscast + newsletter + newsman + newsmen + newspaper + newspaperman + newspapermen + newsreel + newsstand + Newsweek + newt + newton + Newtonian + next + Nguyen + NH + niacin + Niagara + Niamey + nib + nibble + Nibelung + nibs + Nicaragua + nice + nicety + niche + Nicholas + Nicholls + Nichols + Nicholson + nichrome + nick + nickel + nickname + Nicodemus + Nicosia + nicotinamide + nicotine + niece + Nielsen + Nielson + Nietzsche + Niger + Nigeria + niggardly + nigger + niggle + nigh + night + nightcap + nightclub + nightdress + nightfall + nightgown + nighthawk + nightingale + nightmare + nightmarish + nightshirt + nighttime + NIH + nihilism + nihilist + Nikko + Nikolai + nil + Nile + nilpotent + nimble + nimbus + NIMH + Nina + nine + ninebark + ninefold + nineteen + nineteenth + ninetieth + ninety + Nineveh + ninth + Niobe + niobium + nip + nipple + Nippon + nirvana + nit + nitpick + nitrate + nitric + nitride + nitrite + nitrogen + nitrogenous + nitroglycerine + nitrous + nitty + Nixon + NJ + NM + NNE + NNW + no + NOAA + Noah + nob + Nobel + nobelium + noble + nobleman + noblemen + noblesse + nobody + nobody'd + nocturnal + nocturne + nod + nodal + node + nodular + nodule + Noel + Noetherian + noise + noisemake + noisy + Nolan + Noll + nolo + nomad + nomadic + nomenclature + nominal + nominate + nominee + nomogram + nomograph + non + nonagenarian + nonce + nonchalant + nondescript + none + nonetheless + nonogenarian + nonsensic + nonsensical + noodle + nook + noon + noontime + noose + nor + Nora + Nordhoff + Nordstrom + Noreen + Norfolk + norm + Norma + normal + normalcy + Norman + Normandy + normative + Norris + north + Northampton + northbound + northeast + northeastern + northerly + northern + northernmost + northland + Northrop + Northrup + Northumberland + northward + northwest + northwestern + Norton + Norwalk + Norway + Norwegian + Norwich + nose + nosebag + nosebleed + nostalgia + nostalgic + Nostradamus + Nostrand + nostril + not + notary + notate + notch + note + notebook + noteworthy + nothing + notice + noticeable + notify + notion + notocord + notoriety + notorious + Notre + Nottingham + notwithstanding + Nouakchott + noun + nourish + nouveau + Nov + nova + Novak + novel + novelty + November + novice + novitiate + novo + Novosibirsk + now + nowaday + nowadays + nowhere + nowise + noxious + nozzle + NRC + n's + NSF + NTIS + nu + nuance + Nubia + nubile + nucleant + nuclear + nucleate + nuclei + nucleic + nucleoli + nucleolus + nucleotide + nucleus + nuclide + nude + nudge + nugatory + nugget + nuisance + null + nullify + Nullstellensatz + numb + numerable + numeral + numerate + numeric + Numerische + numerology + numerous + numinous + numismatic + numismatist + nun + nuptial + nurse + nursery + nurture + nut + nutate + nutcrack + nuthatch + nutmeg + nutria + nutrient + nutrition + nutritious + nutritive + nutshell + nuzzle + NV + NW + NY + NYC + nylon + nymph + nymphomania + nymphomaniac + Nyquist + NYU + o + oaf + oak + oaken + Oakland + Oakley + oakwood + oar + oases + oasis + oat + oath + oatmeal + obduracy + obdurate + obedient + obeisant + obelisk + Oberlin + obese + obey + obfuscate + obfuscatory + obituary + object + objectify + objectivity + objector + objet + oblate + obligate + obligatory + oblige + oblique + obliterate + oblivion + oblivious + oblong + obnoxious + oboe + oboist + O'Brien + obscene + obscure + obsequious + obsequy + observant + observation + observatory + observe + obsess + obsession + obsessive + obsidian + obsolescent + obsolete + obstacle + obstetric + obstinacy + obstinate + obstruct + obstruent + obtain + obtrude + obtrusion + obtrusive + obverse + obviate + obvious + ocarina + occasion + occident + occidental + occipital + occlude + occlusion + occlusive + occult + occultate + occultation + occupant + occupation + occupy + occur + occurred + occurrent + occurring + ocean + Oceania + oceanic + oceanographer + oceanography + oceanside + ocelot + o'clock + O'Connell + O'Connor + Oct + octagon + octagonal + octahedra + octahedral + octahedron + octal + octane + octant + octave + Octavia + octennial + octet + octile + octillion + October + octogenarian + octopus + octoroon + ocular + odd + ode + O'Dell + Odessa + Odin + odious + odium + odometer + O'Donnell + odorous + O'Dwyer + Odysseus + Odyssey + Oedipal + Oedipus + o'er + oersted + of + off + offal + offbeat + Offenbach + offend + offensive + offer + offertory + offhand + office + officeholder + officemate + official + officialdom + officiate + officio + officious + offload + offprint + offsaddle + offset + offsetting + offshoot + offshore + offspring + offstage + oft + often + oftentimes + Ogden + ogle + ogre + ogress + oh + O'Hare + Ohio + ohm + ohmic + ohmmeter + oil + oilcloth + oilman + oilmen + oilseed + oily + oint + ointment + OK + Okay + okay + Okinawa + Oklahoma + Olaf + Olav + old + olden + Oldenburg + Oldsmobile + oldster + oldy + oleander + O'Leary + olefin + oleomargarine + olfactory + Olga + oligarchic + oligarchy + oligoclase + oligopoly + Olin + olive + Oliver + Olivetti + Olivia + olivine + Olsen + Olson + Olympia + Olympic + Omaha + Oman + ombudsman + ombudsperson + omega + omelet + omen + omicron + ominous + omission + omit + omitted + omitting + omnibus + omnipotent + omnipresent + omniscient + on + once + oncology + oncoming + one + Oneida + O'Neill + onerous + oneself + onetime + oneupmanship + ongoing + onion + onlook + onlooker + onlooking + only + onomatopoeia + onomatopoeic + Onondaga + onrush + onrushing + onset + onslaught + Ontario + onto + ontogeny + ontology + onus + onward + onyx + oocyte + oodles + ooze + opacity + opal + opalescent + opaque + OPEC + Opel + open + opera + operable + operand + operant + operate + operatic + operetta + operon + Ophiuchus + ophthalmic + ophthalmology + opiate + opine + opinion + opinionate + opium + opossum + Oppenheimer + opponent + opportune + opposable + oppose + opposite + opposition + oppress + oppression + oppressive + oppressor + opprobrium + opt + optic + optima + optimal + optimism + optimist + optimistic + optimum + option + optoacoustic + optoelectronic + optoisolate + optometrist + optometry + opulent + opus + or + oracle + oracular + oral + orange + orangeroot + orangutan + orate + oratoric + oratorical + oratorio + oratory + orb + orbit + orbital + orchard + orchestra + orchestral + orchestrate + orchid + orchis + ordain + ordeal + order + orderly + ordinal + ordinance + ordinary + ordinate + ordnance + ore + oregano + Oregon + Oresteia + Orestes + organ + organdy + organic + organismic + organometallic + orgasm + orgiastic + orgy + orient + oriental + orifice + origin + original + originate + Orin + Orinoco + oriole + Orion + Orkney + Orlando + Orleans + ornament + ornamentation + ornate + ornately + ornery + orographic + orography + Orono + orphan + orphanage + Orpheus + Orphic + Orr + Ortega + orthant + orthicon + orthoclase + orthodontic + orthodontist + orthodox + orthodoxy + orthogonal + orthography + orthonormal + orthopedic + orthophosphate + orthorhombic + Orville + Orwell + Orwellian + o's + Osaka + Osborn + Osborne + Oscar + oscillate + oscillatory + oscilloscope + Osgood + OSHA + O'Shea + Oshkosh + osier + Osiris + Oslo + osmium + osmosis + osmotic + osprey + osseous + ossify + ostensible + ostentatious + osteology + osteopath + osteopathic + osteopathy + osteoporosis + ostracism + ostracod + Ostrander + ostrich + O'Sullivan + Oswald + Othello + other + otherwise + otherworld + otherworldly + otiose + Otis + Ott + Ottawa + otter + Otto + Ottoman + Ouagadougou + ouch + ought + oughtn't + ounce + our + ourselves + oust + out + outermost + outlandish + outlawry + outrageous + ouvre + ouzel + ouzo + ova + oval + ovary + ovate + oven + ovenbird + over + overhang + overt + overture + Ovid + oviform + ovum + ow + owe + Owens + owing + owl + owly + own + ox + oxalate + oxalic + oxcart + oxen + oxeye + Oxford + oxidant + oxidate + oxide + Oxnard + Oxonian + oxygen + oxygenate + oyster + Ozark + ozone + p + pa + Pablo + Pabst + pace + pacemake + pacesetting + pacific + pacifism + pacifist + pacify + pack + package + Packard + packet + pact + pad + paddle + paddock + paddy + padlock + padre + paean + pagan + page + pageant + pageantry + paginate + pagoda + paid + pail + pain + Paine + painful + painstaking + paint + paintbrush + pair + pairwise + Pakistan + Pakistani + pal + palace + palate + Palatine + palazzi + palazzo + pale + Paleolithic + Paleozoic + Palermo + Palestine + Palestinian + palette + palfrey + palindrome + palindromic + palisade + pall + palladia + Palladian + palladium + pallet + palliate + pallid + palm + palmate + palmetto + Palmolive + Palmyra + Palo + Palomar + palpable + palsy + Pam + Pamela + pampa + pamper + pamphlet + pan + panacea + panama + pancake + Pancho + pancreas + pancreatic + panda + Pandanus + pandemic + pandemonium + pander + Pandora + pane + panel + pang + panhandle + panic + panicked + panicky + panicle + panjandrum + panoply + panorama + panoramic + pansy + pant + pantheism + pantheist + pantheon + panther + pantomime + pantomimic + pantry + panty + Paoli + pap + papa + papacy + papal + papaw + paper + paperback + paperbound + paperweight + paperwork + papery + papillary + papoose + Pappas + pappy + paprika + Papua + papyri + papyrus + par + parabola + parabolic + paraboloid + paraboloidal + parachute + parade + paradigm + paradigmatic + paradise + paradox + paradoxic + paraffin + paragon + paragonite + paragraph + Paraguay + parakeet + paralinguistic + parallax + parallel + parallelepiped + parallelogram + paralysis + paramagnet + paramagnetic + paramedic + parameter + paramilitary + paramount + Paramus + paranoia + paranoiac + paranoid + paranormal + parapet + paraphernalia + paraphrase + parapsychology + parasite + parasitic + parasol + parasympathetic + paratroop + paraxial + parboil + parcel + parch + pardon + pare + paregoric + parent + parentage + parental + parentheses + parenthesis + parenthetic + parenthood + Pareto + pariah + parimutuel + Paris + parish + parishioner + Parisian + park + Parke + Parkinson + parkish + parkland + Parks + parkway + parlance + parlay + parley + parliament + parliamentarian + parliamentary + parochial + parody + parole + parolee + parquet + Parr + Parrish + parrot + parry + parse + Parsifal + parsimonious + parsimony + parsley + parsnip + parson + parsonage + Parsons + part + partake + Parthenon + partial + participant + participate + participle + particle + particular + particulate + partisan + partition + partner + partook + partridge + party + parvenu + Pasadena + Pascal + paschal + pasha + Paso + pass + passage + passageway + Passaic + passband + passe + passenger + passer + passerby + passion + passionate + passivate + passive + Passover + passport + password + past + paste + pasteboard + pastel + pasteup + Pasteur + pastiche + pastime + pastor + pastoral + pastry + pasture + pasty + pat + Patagonia + patch + patchwork + patchy + pate + patent + patentee + pater + paternal + paternoster + Paterson + path + pathetic + pathfind + pathogen + pathogenesis + pathogenic + pathology + pathos + pathway + patient + patina + patio + patriarch + patriarchal + patriarchy + Patrice + Patricia + patrician + Patrick + patrimonial + patrimony + patriot + patriotic + patristic + patrol + patrolled + patrolling + patrolman + patrolmen + patron + patronage + patroness + Patsy + pattern + Patterson + Patti + Patton + patty + paucity + Paul + Paula + Paulette + Pauli + Pauline + Paulo + Paulsen + Paulson + Paulus + paunch + paunchy + pauper + pause + pavanne + pave + pavilion + Pavlov + paw + pawn + pawnshop + Pawtucket + pax + pay + paycheck + payday + paymaster + Payne + payoff + payroll + Paz + PBS + PDP + pea + Peabody + peace + peaceable + peaceful + peacemake + peacetime + peach + Peachtree + peacock + peafowl + peak + peaky + peal + Peale + peanut + pear + Pearce + pearl + pearlite + pearlstone + Pearson + peasant + peasanthood + Pease + peat + pebble + pecan + peccary + peck + Pecos + pectoral + pectoralis + peculate + peculiar + pecuniary + pedagogic + pedagogue + pedagogy + pedal + pedant + pedantic + pedantry + peddle + pedestal + pedestrian + pediatric + pediatrician + pedigree + pediment + Pedro + pee + peed + peek + peel + peep + peephole + peepy + peer + peg + Pegasus + pegboard + pegging + Peggy + pejorative + Peking + Pelham + pelican + pellagra + pellet + pelt + peltry + pelvic + pelvis + Pembroke + pemmican + pen + penal + penalty + penance + penates + pence + penchant + pencil + pend + pendant + pendulum + Penelope + penetrable + penetrate + penguin + Penh + penicillin + peninsula + penis + penitent + penitential + penitentiary + penman + penmen + Penn + penna + pennant + Pennsylvania + penny + pennyroyal + Penrose + Pensacola + pension + pensive + pent + pentagon + pentagonal + pentagram + pentane + Pentecost + pentecostal + penthouse + penultimate + penumbra + penurious + penury + peony + people + Peoria + pep + peppergrass + peppermint + pepperoni + peppery + peppy + Pepsi + PepsiCo + peptide + per + perceive + percent + percentage + percentile + percept + perceptible + perception + perceptive + perceptual + perch + perchance + perchlorate + Percival + percolate + percussion + percussive + Percy + perdition + peregrine + peremptory + perennial + Perez + perfect + perfecter + perfectible + perfidious + perfidy + perforate + perforce + perform + performance + perfume + perfumery + perfunctory + perfuse + perfusion + Pergamon + perhaps + Periclean + Pericles + peridotite + perihelion + peril + Perilla + perilous + perimeter + period + periodic + peripatetic + peripheral + periphery + periphrastic + periscope + perish + peritectic + periwinkle + perjure + perjury + perk + Perkins + perky + Perle + permalloy + permanent + permeable + permeate + Permian + permissible + permission + permissive + permit + permitted + permitting + permutation + permute + pernicious + peroxide + perpendicular + perpetrate + perpetual + perpetuate + perpetuity + perplex + perquisite + Perry + persecute + persecution + persecutory + Perseus + perseverance + perseverant + persevere + Pershing + Persia + Persian + persiflage + persimmon + persist + persistent + person + persona + personage + personal + personify + personnel + perspective + perspicacious + perspicuity + perspicuous + perspiration + perspire + persuade + persuasion + persuasive + pert + pertain + Perth + pertinacious + pertinent + perturb + perturbate + perturbation + Peru + perusal + peruse + Peruvian + pervade + pervasion + pervasive + perverse + perversion + pervert + pessimal + pessimism + pessimist + pessimum + pest + peste + pesticide + pestilent + pestilential + pestle + pet + petal + Pete + Petersburg + Petersen + Peterson + petit + petite + petition + petrel + petri + petrifaction + petrify + petrochemical + petroglyph + petrol + petroleum + petrology + petticoat + petty + petulant + petunia + Peugeot + pew + pewee + pewter + pfennig + Pfizer + phage + phagocyte + phalanger + phalanx + phalarope + phantasy + phantom + pharaoh + pharmaceutic + pharmacist + pharmacology + pharmacopoeia + pharmacy + phase + PhD + Ph.D + pheasant + Phelps + phenol + phenolic + phenomena + phenomenal + phenomenology + phenomenon + phenotype + phenyl + phenylalanine + phi + Phil + Philadelphia + philanthrope + philanthropic + philanthropy + philharmonic + Philip + Philippine + Philistine + Phillip + Phillips + philodendron + philology + philosoph + philosopher + philosophic + philosophy + Phipps + phloem + phlox + phobic + phoebe + Phoenicia + phoenix + phon + phone + phoneme + phonemic + phonetic + phonic + phonograph + phonology + phonon + phony + phosgene + phosphate + phosphide + phosphine + phosphor + phosphoresce + phosphorescent + phosphoric + phosphorus + phosphorylate + photo + photogenic + photography + photolysis + photolytic + photometry + photon + phrase + phrasemake + phraseology + phthalate + phycomycetes + phyla + Phyllis + phylogeny + physic + physician + Physik + physiochemical + physiognomy + physiology + physiotherapist + physiotherapy + physique + phytoplankton + pi + pianissimo + pianist + piano + piazza + pica + Picasso + picayune + Piccadilly + piccolo + pick + pickaxe + pickerel + Pickering + picket + Pickett + Pickford + pickle + Pickman + pickoff + pickup + picky + picnic + picnicked + picnicker + picnicking + picofarad + picojoule + picosecond + pictorial + picture + picturesque + piddle + pidgin + pie + piece + piecemeal + piecewise + Piedmont + pier + pierce + Pierre + Pierson + pietism + piety + piezoelectric + pig + pigeon + pigeonberry + pigeonfoot + pigeonhole + pigging + piggish + piggy + piggyback + pigment + pigmentation + pigpen + pigroot + pigskin + pigtail + pike + Pilate + pile + pilewort + pilfer + pilferage + pilgrim + pilgrimage + pill + pillage + pillar + pillory + pillow + Pillsbury + pilot + pimp + pimple + pin + pinafore + pinball + pinch + pincushion + pine + pineapple + Pinehurst + ping + pinhead + pinhole + pinion + pink + pinkie + pinkish + pinnacle + pinnate + pinochle + pinpoint + pinscher + Pinsky + pint + pintail + pinto + pinwheel + pinxter + pion + pioneer + Piotr + pious + pip + pipe + pipeline + Piper + pipette + pipsissewa + piquant + pique + piracy + Piraeus + pirate + pirogue + pirouette + Piscataway + Pisces + piss + pistachio + pistol + pistole + piston + pit + pitch + pitchblende + pitchfork + pitchstone + piteous + pitfall + pith + pithy + pitiable + pitiful + pitilessly + pitman + Pitney + Pitt + Pittsburgh + Pittsfield + Pittston + pituitary + pity + Pius + pivot + pivotal + pixel + pixy + pizza + pizzeria + pizzicato + Pl + placate + placater + place + placeable + placebo + placeholder + placenta + placental + placid + plagiarism + plagiarist + plagioclase + plague + plagued + plaguey + plaid + plain + Plainfield + plaintiff + plaintive + plan + planar + Planck + plane + planeload + planet + planetaria + planetarium + planetary + planetesimal + planetoid + plank + plankton + planoconcave + planoconvex + plant + plantain + plantation + plaque + plasm + plasma + plasmon + plaster + plastic + plastisol + plastron + plat + plate + plateau + platelet + platen + platform + platinum + platitude + platitudinous + Plato + platonic + Platonism + Platonist + platoon + Platte + platypus + plausible + play + playa + playback + playboy + playful + playground + playhouse + playmate + playoff + playroom + plaything + playtime + playwright + playwriting + plaza + plea + plead + pleasant + please + pleasure + pleat + plebeian + plebian + pledge + Pleiades + Pleistocene + plenary + plenipotentiary + plenitude + plentiful + plenty + plenum + plethora + pleura + pleural + Plexiglas + pliable + pliancy + pliant + pliers + plight + Pliny + Pliocene + plod + plop + plot + plover + plowman + plowshare + pluck + plucky + plug + plugboard + pluggable + plugging + plum + plumage + plumb + plumbago + plumbate + plume + plummet + plump + plunder + plunge + plunk + pluperfect + plural + plus + plush + plushy + Plutarch + Pluto + pluton + plutonium + ply + Plymouth + plyscore + plywood + PM + pneumatic + pneumococcus + pneumonia + Po + poach + POBox + pocket + pocketbook + pocketful + Pocono + pocus + pod + podge + podia + podium + Poe + poem + poesy + poet + poetic + poetry + pogo + pogrom + poi + poignant + Poincare + poinsettia + point + pointwise + poise + poison + poisonous + Poisson + poke + pokerface + pol + Poland + polar + polarimeter + Polaris + polariscope + polariton + polarogram + polarograph + polarography + Polaroid + polaron + pole + polecat + polemic + police + policeman + policemen + policy + polio + poliomyelitis + polis + polish + Politburo + polite + politic + politician + politicking + politico + polity + Polk + polka + polkadot + poll + Pollard + pollen + pollinate + pollock + polloi + pollster + pollutant + pollute + pollution + Pollux + polo + polonaise + polonium + polopony + polyglot + polygon + polygonal + polygynous + polyhedra + polyhedral + polyhedron + Polyhymnia + polymer + polymerase + polymeric + polymorph + polymorphic + polynomial + Polyphemus + polyphony + polyploidy + polypropylene + polysaccharide + polytechnic + polytope + polytypy + pomade + pomegranate + Pomona + pomp + pompadour + pompano + Pompeii + pompey + pompon + pomposity + pompous + Ponce + Ponchartrain + poncho + pond + ponder + ponderous + pong + pont + Pontiac + pontiff + pontific + pontificate + pony + pooch + poodle + pooh + pool + Poole + poop + poor + pop + popcorn + pope + popish + poplar + poplin + poppy + populace + popular + populate + populism + populist + populous + porcelain + porch + porcine + porcupine + pore + pork + pornographer + pornography + porosity + porous + porphyry + porpoise + porridge + port + portage + portal + Porte + portend + portent + portentous + porterhouse + portfolio + Portia + portico + Portland + portland + portmanteau + Porto + portrait + portraiture + portray + portrayal + Portsmouth + Portugal + Portuguese + portulaca + posable + pose + Poseidon + poseur + posey + posh + posit + position + positive + positron + Posner + posse + posseman + possemen + possess + possession + possessive + possessor + possible + possum + post + postage + postal + postcard + postcondition + postdoctoral + posterior + posteriori + posterity + postfix + postgraduate + posthumous + postlude + postman + postmark + postmaster + postmen + postmortem + postmultiply + postoperative + postorder + postpaid + postpone + postposition + postprocess + postprocessor + postscript + postulate + posture + postwar + posy + pot + potable + potash + potassium + potato + potatoes + potbelly + potboil + potent + potentate + potential + potentiometer + pothole + potion + potlatch + Potomac + potpourri + pottery + Potts + pouch + Poughkeepsie + poultice + poultry + pounce + pound + pour + pout + poverty + pow + powder + powderpuff + powdery + Powell + power + powerful + powerhouse + Powers + Poynting + ppm + PR + practicable + practical + practice + practise + practitioner + Prado + praecox + pragmatic + pragmatism + pragmatist + Prague + prairie + praise + praiseworthy + pram + prance + prank + praseodymium + Pratt + Pravda + pray + prayer + prayerful + preach + preachy + preamble + Precambrian + precarious + precaution + precautionary + precede + precedent + precept + precess + precession + precinct + precious + precipice + precipitable + precipitate + precipitous + precis + precise + precision + preclude + precocious + precocity + precursor + predatory + predecessor + predicament + predicate + predict + predictor + predilect + predispose + predisposition + predominant + predominate + preeminent + preempt + preemption + preemptive + preemptor + preen + prefab + prefabricate + preface + prefatory + prefect + prefecture + prefer + preference + preferential + preferred + preferring + prefix + pregnant + prehistoric + prejudice + prejudicial + preliminary + prelude + premature + premeditate + premier + premiere + premise + premium + premonition + premonitory + Prentice + preoccupy + prep + preparation + preparative + preparatory + prepare + preponderant + preponderate + preposition + preposterous + prerequisite + prerogative + presage + Presbyterian + presbytery + Prescott + prescribe + prescript + prescription + prescriptive + presence + present + presentation + presentational + preservation + preserve + preside + president + presidential + press + pressure + prestidigitate + prestige + prestigious + presto + Preston + presume + presumed + presuming + presumption + presumptive + presumptuous + presuppose + presupposition + pretend + pretense + pretension + pretentious + pretext + Pretoria + pretty + prevail + prevalent + prevent + prevention + preventive + preview + previous + prexy + prey + Priam + price + prick + prickle + pride + priest + Priestley + prig + priggish + prim + prima + primacy + primal + primary + primate + prime + primeval + primitive + primitivism + primordial + primp + primrose + prince + princess + Princeton + principal + Principia + principle + print + printmake + printout + prior + priori + priory + Priscilla + prism + prismatic + prison + prissy + pristine + Pritchard + privacy + private + privet + privilege + privy + prize + prizewinning + pro + probabilist + probate + probe + probity + problem + problematic + procaine + procedural + procedure + proceed + process + procession + processor + proclaim + proclamation + proclivity + procrastinate + procreate + procrustean + Procrustes + Procter + proctor + procure + Procyon + prod + prodigal + prodigious + prodigy + produce + producible + product + productivity + Prof + profane + profess + profession + professional + professor + professorial + proffer + proficient + profile + profit + profiteer + profligacy + profligate + profound + profundity + profuse + profusion + progenitor + progeny + prognosis + prognosticate + programmable + programmed + programmer + programming + progress + progression + progressive + prohibit + prohibition + prohibitive + prohibitory + project + projectile + projector + prokaryote + Prokofieff + prolate + prolegomena + proletariat + proliferate + prolific + proline + prolix + prologue + prolong + prolongate + prolusion + prom + promenade + Promethean + Prometheus + promethium + prominent + promiscuity + promiscuous + promise + promote + promotion + prompt + promptitude + promulgate + prone + prong + pronoun + pronounce + pronounceable + pronto + pronunciation + proof + proofread + prop + propaganda + propagandist + propagate + propane + propel + propellant + propelled + propeller + propelling + propensity + proper + property + prophecy + prophesy + prophet + prophetic + prophylactic + propionate + propitiate + propitious + proponent + proportion + proportionate + propos + proposal + propose + proposition + propound + proprietary + proprietor + propriety + proprioception + proprioceptive + propulsion + propyl + propylene + prorate + prorogue + prosaic + proscenium + proscribe + proscription + prose + prosecute + prosecution + prosecutor + Proserpine + prosodic + prosody + prosopopoeia + prospect + prospector + prospectus + prosper + prosperous + prostate + prostheses + prosthesis + prosthetic + prostitute + prostitution + prostrate + protactinium + protagonist + protean + protease + protect + protector + protectorate + protege + protein + proteolysis + proteolytic + protest + protestant + protestation + prothonotary + protocol + proton + Protophyta + protoplasm + protoplasmic + prototype + prototypic + Protozoa + protozoan + protract + protrude + protrusion + protrusive + protuberant + proud + Proust + prove + proven + provenance + proverb + proverbial + provide + provident + providential + province + provincial + provision + provisional + proviso + provocateur + provocation + provocative + provoke + provost + prow + prowess + prowl + proximal + proximate + proximity + proxy + prudent + prudential + prune + prurient + Prussia + pry + p's + psalm + psalter + psaltery + pseudo + psi + psych + psyche + psychiatric + psychiatrist + psychiatry + psychic + psycho + psychoacoustic + psychoanalysis + psychoanalyst + psychoanalytic + psychobiology + psychology + psychometry + psychopath + psychopathic + psychophysic + psychophysiology + psychopomp + psychoses + psychosis + psychosomatic + psychotherapeutic + psychotherapist + psychotherapy + psychotic + psyllium + PTA + ptarmigan + pterodactyl + Ptolemaic + Ptolemy + pub + puberty + pubescent + public + publication + publish + PUC + Puccini + puck + puckish + pudding + puddingstone + puddle + puddly + pueblo + puerile + Puerto + puff + puffball + puffed + puffery + puffin + puffy + pug + Pugh + pugnacious + puissant + puke + Pulaski + Pulitzer + pull + pullback + pulley + Pullman + pullover + pulmonary + pulp + pulpit + pulsar + pulsate + pulse + pulverable + puma + pumice + pummel + pump + pumpkin + pumpkinseed + pun + punch + punctual + punctuate + puncture + pundit + punditry + pungent + Punic + punish + punitive + punk + punky + punster + punt + puny + pup + pupal + pupate + pupil + puppet + puppeteer + puppy + puppyish + Purcell + purchasable + purchase + Purdue + pure + purgation + purgative + purgatory + purge + purify + Purina + purine + Puritan + puritanic + purl + purloin + purple + purport + purpose + purposeful + purposive + purr + purse + purslane + pursuant + pursue + pursuer + pursuit + purvey + purveyor + purview + pus + Pusan + Pusey + push + pushbutton + pushout + pushpin + pussy + pussycat + put + putative + Putnam + putt + putty + puzzle + PVC + Pygmalion + pygmy + Pyhrric + pyknotic + Pyle + Pyongyang + pyracanth + pyramid + pyramidal + pyre + Pyrex + pyridine + pyrimidine + pyrite + pyroelectric + pyrolyse + pyrolysis + pyrometer + pyrophosphate + pyrotechnic + pyroxene + pyroxenite + Pyrrhic + pyrrhic + Pythagoras + Pythagorean + python + q + Qatar + QED + q's + qua + quack + quackery + quad + quadrangle + quadrangular + quadrant + quadratic + quadrature + quadrennial + quadric + quadriceps + quadrilateral + quadrille + quadrillion + quadripartite + quadrivium + quadruple + quadrupole + quaff + quagmire + quahog + quail + quaint + quake + Quakeress + qualified + qualify + qualitative + quality + qualm + quandary + quanta + Quantico + quantify + quantile + quantitative + quantity + quantum + quarantine + quark + quarrel + quarrelsome + quarry + quarryman + quarrymen + quart + quarterback + quartermaster + quartet + quartic + quartile + quartz + quartzite + quasar + quash + quasi + quasicontinuous + quasiorder + quasiparticle + quasiperiodic + quasistationary + quaternary + quatrain + quaver + quay + queasy + Quebec + queen + queer + quell + quench + querulous + query + quest + question + questionnaire + quetzal + queue + Quezon + quibble + quick + quicken + quickie + quicklime + quicksand + quicksilver + quickstep + quid + quiescent + quiet + quietus + quill + quillwort + quilt + quince + quinine + Quinn + quint + quintessence + quintessential + quintet + quintic + quintillion + quintus + quip + quipping + Quirinal + quirk + quirky + quirt + quit + quite + Quito + quitting + quiver + Quixote + quixotic + quiz + quizzes + quizzical + quo + quod + quonset + quorum + quota + quotation + quote + quotient + r + Rabat + rabat + rabbet + rabbi + rabbit + rabble + rabid + rabies + Rabin + raccoon + race + racetrack + raceway + Rachel + Rachmaninoff + racial + rack + racket + racketeer + rackety + racy + radar + Radcliffe + radial + radian + radiant + radiate + radical + radices + radii + radio + radioactive + radioastronomy + radiocarbon + radiochemical + radiochemistry + radiogram + radiography + radiology + radiometer + radiophysics + radiosonde + radiotelegraph + radiotelephone + radiotherapy + radish + radium + radius + radix + radon + Rae + Rafael + Rafferty + raffia + raffish + raffle + raft + rag + rage + ragging + ragout + ragweed + raid + rail + railbird + railhead + raillery + railroad + railway + rain + rainbow + raincoat + raindrop + rainfall + rainstorm + rainy + raise + raisin + raj + rajah + rake + rakish + Raleigh + rally + Ralph + Ralston + ram + Ramada + Raman + ramble + ramify + Ramo + ramp + rampage + rampant + rampart + ramrod + Ramsey + ran + ranch + rancho + rancid + rancorous + Rand + Randall + Randolph + random + randy + rang + range + rangeland + Rangoon + rangy + Ranier + rank + Rankin + Rankine + rankle + ransack + ransom + rant + Raoul + rap + rapacious + rape + Raphael + rapid + rapier + rapport + rapprochement + rapt + rapture + rare + rarefy + Raritan + rasa + rascal + rash + Rasmussen + rasp + raspberry + raster + Rastus + rat + rata + rate + ratepayer + rater + rather + ratify + ratio + ratiocinate + rationale + rattail + rattle + rattlesnake + ratty + raucous + Raul + ravage + rave + ravel + raven + ravenous + ravine + ravish + raw + rawboned + rawhide + Rawlinson + ray + Rayleigh + Raymond + Raytheon + raze + razor + razorback + razzle + RCA + Rd + R&D + re + reach + reactant + reactionary + read + readout + ready + Reagan + real + realisable + realm + realtor + realty + ream + reap + rear + reason + reave + reb + Rebecca + rebel + rebelled + rebelling + rebellion + rebellious + rebuke + rebut + rebuttal + rebutted + rebutting + recalcitrant + recappable + receipt + receive + recent + receptacle + reception + receptive + receptor + recess + recession + recessive + recherche + Recife + recipe + recipient + reciprocal + reciprocate + reciprocity + recital + recitative + reck + reckon + reclamation + recline + recluse + recombinant + recompense + reconcile + recondite + reconnaissance + recovery + recriminate + recriminatory + recruit + rectangle + rectangular + rectifier + rectify + rectilinear + rectitude + rector + rectory + recumbent + recuperate + recur + recurred + recurrent + recurring + recursion + recusant + recuse + red + redact + redactor + redbird + redbud + redcoat + redden + reddish + redemption + redemptive + redhead + Redmond + redneck + redound + redpoll + redshank + redstart + Redstone + redtop + reduce + reducible + redundant + redwood + reed + reedbuck + reedy + reef + reek + reel + Reese + reeve + Reeves + refection + refectory + refer + referable + referee + refereeing + referenda + referendum + referent + referential + referral + referred + referring + refinery + reflect + reflectance + reflector + reflexive + reformatory + refract + refractometer + refractory + refrain + refrigerate + refuge + refugee + refusal + refutation + refute + regal + regale + regalia + regard + regatta + regent + regime + regimen + regiment + regimentation + Regina + Reginald + region + regional + Regis + registrable + registrant + registrar + registration + registry + regress + regression + regressive + regret + regretful + regrettable + regretted + regretting + regular + regulate + regulatory + Regulus + regurgitate + rehabilitate + rehearsal + rehearse + Reich + Reid + reign + Reilly + reimbursable + reimburse + rein + reindeer + reinforce + Reinhold + reinstate + reject + rejecter + rejoice + rejoinder + rejuvenate + relate + relaxation + relayed + releasable + relevant + reliant + relic + relict + relief + relieve + religion + religiosity + religious + relinquish + reliquary + relish + reluctant + remainder + reman + remand + remark + Rembrandt + remediable + remedial + remedy + remember + remembrance + Remington + reminisce + reminiscent + remiss + remission + remit + remittance + remitted + remitting + remnant + remonstrate + remorse + remorseful + remote + removal + remunerate + Remus + Rena + renaissance + renal + Renault + rend + render + rendezvous + rendition + Rene + renegotiable + renewal + Renoir + renounce + renovate + renown + Rensselaer + rent + rental + renunciate + rep + repairman + repairmen + reparation + repartee + repeal + repeat + repeater + repel + repelled + repellent + repelling + repent + repentant + repertoire + repertory + repetition + repetitious + repetitive + replaceable + replenish + replete + replica + replicate + report + reportorial + repository + reprehensible + representative + repression + repressive + reprieve + reprimand + reprisal + reprise + reproach + reptile + reptilian + republic + republican + repudiate + repugnant + repulsion + repulsive + reputation + repute + request + require + requisite + requisition + requited + reredos + rerouted + rerouting + rescind + rescue + resemblant + resemble + resent + resentful + reserpine + reservation + reserve + reservoir + reside + resident + residential + residual + residuary + residue + residuum + resign + resignation + resilient + resin + resiny + resist + resistant + resistible + resistive + resistor + resolute + resolution + resolve + resonant + resonate + resorcinol + resort + resourceful + respect + respecter + respectful + respiration + respirator + respiratory + respire + respite + resplendent + respond + respondent + response + responsible + responsive + rest + restaurant + restaurateur + restful + restitution + restive + restoration + restorative + restrain + restraint + restrict + restroom + result + resultant + resume + resuming + resumption + resurgent + resurrect + resuscitate + ret + retail + retain + retaliate + retaliatory + retard + retardant + retardation + retch + retention + retentive + reticent + reticulate + reticulum + retina + retinal + retinue + retire + retiree + retort + retract + retribution + retrieval + retrieve + retroactive + retrofit + retrofitted + retrofitting + retrograde + retrogress + retrogression + retrogressive + retrorocket + retrospect + retrovision + return + Reub + Reuben + Reuters + rev + reveal + revel + revelation + revelatory + revelry + revenge + revenue + rever + reverberate + revere + reverend + reverent + reverie + reversal + reverse + reversible + reversion + revert + revertive + revery + revet + revile + revisable + revisal + revise + revision + revisionary + revival + revive + revocable + revoke + revolt + revolution + revolutionary + revolve + revulsion + revved + revving + reward + Rex + Reykjavik + Reynolds + rhapsodic + rhapsody + Rhea + Rhenish + rhenium + rheology + rheostat + rhesus + rhetoric + rhetorician + rheum + rheumatic + rheumatism + Rhine + rhinestone + rhino + rhinoceros + rho + Rhoda + Rhode + Rhodes + Rhodesia + rhodium + rhododendron + rhodolite + rhodonite + rhombi + rhombic + rhombohedral + rhombus + rhubarb + rhyme + rhythm + rhythmic + RI + rib + ribald + ribbon + riboflavin + ribonucleic + ribose + ribosome + Rica + rice + rich + Richard + Richards + Richardson + Richfield + Richmond + Richter + rick + rickets + Rickettsia + rickety + rickshaw + Rico + ricochet + rid + riddance + ridden + riddle + ride + ridge + ridgepole + Ridgway + ridicule + ridiculous + Riemann + Riemannian + riffle + rifle + rifleman + riflemen + rift + rig + Riga + Rigel + rigging + Riggs + right + righteous + rightful + rightmost + rightward + rigid + rigorous + Riley + rill + rilly + rim + rime + rimy + Rinehart + ring + ringlet + ringmaster + ringside + rink + rinse + Rio + Riordan + riot + riotous + rip + riparian + ripe + ripen + Ripley + ripoff + ripple + rise + risen + risible + risk + risky + Ritchie + rite + Ritter + ritual + Ritz + rival + rivalry + riven + river + riverbank + riverfront + riverine + riverside + rivet + Riviera + rivulet + Riyadh + RNA + roach + road + roadbed + roadblock + roadhouse + roadside + roadster + roadway + roam + roar + roast + rob + robbery + robbin + Robbins + robe + Robert + Roberta + Roberto + Roberts + Robertson + robin + Robinson + robot + robotic + robotics + robust + Rocco + Rochester + rock + rockabye + rockaway + rockbound + Rockefeller + rocket + Rockford + Rockies + Rockland + Rockwell + rocky + rococo + rod + rode + rodent + rodeo + Rodgers + Rodney + Rodriguez + roe + roebuck + Roentgen + Roger + Rogers + rogue + roil + roister + Roland + role + roll + rollback + rollick + Rollins + Roman + romance + Romania + Romano + romantic + Rome + Romeo + romp + Romulus + Ron + Ronald + rondo + Ronnie + rood + roof + rooftop + rooftree + rook + rookie + rooky + room + roomful + roommate + roomy + Roosevelt + Rooseveltian + roost + root + rope + Rosa + Rosalie + rosary + rose + rosebud + rosebush + Roseland + rosemary + Rosen + Rosenberg + Rosenblum + Rosenthal + Rosenzweig + Rosetta + rosette + Ross + roster + rostrum + rosy + rot + Rotarian + rotary + rotate + ROTC + rote + rotenone + Roth + Rothschild + rotogravure + rotor + rototill + rotten + rotund + rotunda + rouge + rough + roughcast + roughen + roughish + roughneck + roughshod + roulette + round + roundabout + roundhead + roundhouse + roundoff + roundtable + roundup + roundworm + rouse + Rousseau + roustabout + rout + route + routine + rove + row + rowboat + rowdy + Rowe + Rowena + Rowland + Rowley + Roxbury + Roy + royal + royalty + Royce + RPM + r's + RSVP + Ruanda + rub + rubbery + rubbish + rubble + rubdown + Rube + Ruben + rubicund + rubidium + Rubin + rubric + ruby + ruckus + rudder + ruddy + rude + rudiment + rudimentary + Rudolf + Rudolph + Rudy + Rudyard + rue + rueful + ruff + ruffian + ruffle + rufous + Rufus + rug + ruin + ruination + ruinous + rule + rum + Rumania + rumble + rumen + Rumford + ruminant + ruminate + rummage + rummy + rump + rumple + rumpus + run + runabout + runaway + rundown + rune + rung + Runge + runic + runneth + Runnymede + runoff + runt + runty + runway + Runyon + rupee + rupture + rural + ruse + rush + Rushmore + rusk + Russ + Russell + russet + Russia + Russo + russula + rust + rustic + rustle + rustproof + rusty + rut + rutabaga + Rutgers + Ruth + ruthenium + Rutherford + ruthless + rutile + Rutland + Rutledge + rutty + Rwanda + Ryan + Rydberg + Ryder + rye + s + sa + sabbath + sabbatical + Sabina + Sabine + sable + sabotage + sabra + sac + saccade + saccharine + sachem + Sachs + sack + sacral + sacrament + Sacramento + sacred + sacrifice + sacrificial + sacrilege + sacrilegious + sacrosanct + sad + sadden + saddle + saddlebag + Sadie + sadism + sadist + Sadler + safari + safe + safeguard + safekeeping + safety + saffron + sag + saga + sagacious + sagacity + sage + sagebrush + sagging + Saginaw + sagittal + Sagittarius + sago + saguaro + Sahara + said + Saigon + sail + sailboat + sailfish + sailor + saint + sainthood + sake + Sal + Salaam + salacious + salad + salamander + salami + salaried + salary + sale + Salem + Salerno + salesgirl + Salesian + saleslady + salesman + salesmen + salesperson + salient + Salina + saline + Salisbury + Salish + saliva + salivary + salivate + Salk + Salle + sallow + sally + salmon + salmonberry + salmonella + salon + saloon + saloonkeep + saloonkeeper + salsify + salt + saltbush + saltwater + salty + salubrious + salutary + salutation + salute + Salvador + salvage + salvageable + salvation + Salvatore + salve + salvo + Sam + samarium + samba + same + Sammy + Samoa + samovar + sample + Sampson + Samson + Samuel + Samuelson + San + Sana + sanatoria + sanatorium + Sanborn + Sanchez + Sancho + sanctify + sanctimonious + sanction + sanctity + sanctuary + sand + sandal + sandalwood + sandbag + sandblast + Sandburg + sanderling + Sanders + Sanderson + sandhill + Sandia + sandman + sandpaper + sandpile + sandpiper + Sandra + sandstone + Sandusky + sandwich + sandy + sane + Sanford + sang + sangaree + sanguinary + sanguine + sanguineous + Sanhedrin + sanicle + sanitarium + sanitary + sanitate + sank + sans + Sanskrit + Santa + Santayana + Santiago + Santo + Sao + sap + sapiens + sapient + sapling + saponify + sapphire + sappy + sapsucker + Sara + Saracen + Sarah + Saran + Sarasota + Saratoga + sarcasm + sarcastic + sarcoma + sarcophagus + sardine + sardonic + Sargent + sari + sarsaparilla + sarsparilla + sash + sashay + Saskatchewan + Saskatoon + sassafras + sat + Satan + satan + satanic + satellite + satiable + satiate + satiety + satin + satire + satiric + satisfaction + satisfactory + satisfy + saturable + saturate + saturater + Saturday + Saturn + Saturnalia + saturnine + satyr + sauce + saucepan + saucy + Saud + Saudi + sauerkraut + Saul + Sault + Saunders + sausage + saute + sauterne + savage + savagery + Savannah + savant + save + Saviour + Savonarola + savoy + Savoyard + savvy + saw + sawbelly + sawdust + sawfish + sawfly + sawmill + sawtimber + sawtooth + sawyer + sax + saxifrage + Saxon + Saxony + saxophone + say + SC + scab + scabbard + scabious + scabrous + scaffold + Scala + scalar + scald + scale + scallop + scalp + scam + scamp + scan + scandal + scandalous + Scandinavia + scandium + scant + scanty + scapegoat + scapula + scapular + scar + Scarborough + scarce + scare + scarecrow + scarf + scarface + scarify + Scarlatti + scarlet + Scarsdale + scarves + scary + scat + scathe + scatterbrain + scattergun + scaup + scavenge + scenario + scene + scenery + scenic + scent + sceptic + Schaefer + Schafer + Schantz + schedule + schelling + schema + schemata + schematic + scheme + Schenectady + scherzo + Schiller + schism + schist + schizoid + schizomycetes + schizophrenia + schizophrenic + Schlesinger + schlieren + Schlitz + Schloss + Schmidt + Schmitt + Schnabel + schnapps + Schneider + Schoenberg + Schofield + scholar + scholastic + school + schoolbook + schoolboy + schoolgirl + schoolgirlish + schoolhouse + schoolmarm + schoolmaster + schoolmate + schoolroom + schoolteacher + schoolwork + schooner + Schottky + Schroeder + Schroedinger + Schubert + Schultz + Schulz + Schumacher + Schumann + Schuster + Schuyler + Schuylkill + Schwab + Schwartz + Schweitzer + Sci + sciatica + science + scientific + scientist + scimitar + scintillate + scion + scissor + sclerosis + sclerotic + SCM + scoff + scold + scoop + scoot + scope + scopic + scops + scorch + score + scoreboard + scorecard + scoria + scorn + scornful + Scorpio + scorpion + Scot + scotch + Scotia + Scotland + Scotsman + Scotsmen + Scott + Scottish + Scottsdale + Scotty + scoundrel + scour + scourge + scout + scowl + scrabble + scraggly + scram + scramble + Scranton + scrap + scrapbook + scrape + scratch + scratchy + scrawl + scrawny + scream + screech + screechy + screed + screen + screenplay + screw + screwball + screwbean + screwdriver + screwworm + scribble + scribe + Scribners + scrim + scrimmage + Scripps + script + scription + scriptural + scripture + scriven + scroll + scrooge + scrotum + scrounge + scrub + scrumptious + scruple + scrupulosity + scrupulous + scrutable + scrutiny + scuba + scud + scuff + scuffle + scull + sculpin + sculpt + sculptor + sculptural + sculpture + scum + scurrilous + scurry + scurvy + scuttle + scutum + Scylla + scythe + Scythia + SD + SE + sea + seaboard + seacoast + seafare + seafood + Seagram + seagull + seahorse + seal + sealant + seam + seaman + seamen + seamstress + seamy + Sean + seance + seaport + seaquake + sear + search + searchlight + Sears + seashore + seaside + season + seasonal + seat + seater + Seattle + seaward + seaweed + Sebastian + sec + secant + secede + secession + seclude + seclusion + second + secondary + secondhand + secrecy + secret + secretarial + secretariat + secretary + secrete + secretion + secretive + sect + sectarian + section + sector + sectoral + secular + secure + sedan + sedate + sedentary + seder + sedge + sediment + sedimentary + sedimentation + sedition + seditious + seduce + seduction + seductive + sedulous + see + seeable + seed + seedbed + seedling + seedy + seeing + seek + seem + seen + seep + seepage + seersucker + seethe + seethed + seething + segment + segmentation + Segovia + segregant + segregate + Segundo + Seidel + seismic + seismograph + seismography + seismology + seize + seizure + seldom + select + selectman + selectmen + selector + Selectric + Selena + selenate + selenite + selenium + self + selfadjoint + selfish + Selfridge + Selkirk + sell + seller + sellout + Selma + seltzer + selves + Selwyn + semantic + semaphore + semblance + semester + semi + seminal + seminar + seminarian + seminary + Seminole + Semiramis + Semite + Semitic + semper + sen + senate + senatorial + send + Seneca + Senegal + senile + senior + senor + Senora + senorita + sensate + sense + sensible + sensitive + sensor + sensorimotor + sensory + sensual + sensuous + sent + sentence + sentential + sentient + sentiment + sentinel + sentry + Seoul + sepal + separable + separate + sepia + Sepoy + sept + septa + septate + September + septennial + septic + septillion + septuagenarian + septum + sepuchral + sepulchral + seq + sequel + sequent + sequential + sequester + sequestration + sequin + sequitur + Sequoia + sera + seraglio + serape + seraphim + Serbia + serenade + serendipitous + serendipity + serene + serf + serfdom + serge + sergeant + Sergei + serial + seriate + seriatim + series + serif + serine + serious + sermon + serology + Serpens + serpent + serpentine + serum + servant + serve + service + serviceable + serviceberry + serviceman + servicemen + serviette + servile + servitor + servitude + servo + servomechanism + sesame + session + set + setback + Seth + Seton + setscrew + settle + setup + seven + sevenfold + seventeen + seventeenth + seventh + seventieth + seventy + sever + several + severalfold + severalty + severe + Severn + Seville + sew + sewage + Seward + sewerage + sewn + sex + Sextans + sextet + sextillion + sexton + sextuple + sextuplet + sexual + sexy + Seymour + sforzando + shabby + shack + shackle + shad + shadbush + shade + shadflower + shadow + shadowy + shady + Shafer + Shaffer + shaft + shag + shagbark + shagging + shaggy + shah + shake + shakeable + shakedown + shaken + Shakespeare + Shakespearean + Shakespearian + shako + shaky + shale + shall + shallot + shallow + shalom + sham + shamble + shame + shameface + shamefaced + shameful + shampoo + shamrock + Shanghai + shank + Shannon + shan't + Shantung + shanty + shape + Shapiro + shard + share + sharecrop + shareholder + shareown + Shari + shark + Sharon + sharp + Sharpe + sharpen + sharpshoot + Shasta + shatter + shatterproof + Shattuck + shave + shaven + shaw + shawl + Shawnee + shay + she + Shea + sheaf + shear + Shearer + sheath + sheathe + sheave + she'd + shed + Shedir + Sheehan + sheen + sheep + sheepskin + sheer + sheet + Sheffield + sheik + Sheila + Shelby + Sheldon + shelf + she'll + shell + Shelley + shelter + Shelton + shelve + Shenandoah + shenanigan + Shepard + shepherd + Sheppard + Sheraton + sherbet + Sheridan + sheriff + Sherlock + Sherman + Sherrill + sherry + Sherwin + Sherwood + shibboleth + shied + shield + Shields + shift + shifty + shill + Shiloh + shim + shimmy + shin + shinbone + shine + shingle + Shinto + shiny + ship + shipboard + shipbuild + shipbuilding + shiplap + Shipley + shipman + shipmate + shipmen + shipshape + shipwreck + shipyard + shire + shirk + Shirley + shirt + shirtmake + shish + shitepoke + shiv + shiver + shivery + Shmuel + shoal + shock + Shockley + shod + shoddy + shoe + shoehorn + shoelace + shoemake + shoestring + shoji + shone + shoo + shoofly + shook + shoot + shop + shopkeep + shopworn + shore + shoreline + short + shortage + shortcoming + shortcut + shorten + shortfall + shorthand + shortish + shortsighted + shortstop + shot + shotbush + shotgun + should + shoulder + shouldn't + shout + shove + shovel + show + showboat + showcase + showdown + showman + showmen + shown + showpiece + showplace + showroom + showy + shrank + shrapnel + shred + Shreveport + shrew + shrewd + shrewish + shriek + shrift + shrike + shrill + shrilly + shrimp + shrine + shrink + shrinkage + shrive + shrivel + shroud + shrove + shrub + shrubbery + shrug + shrugging + shrunk + shrunken + Shu + shuck + shudder + shuddery + shuffle + shuffleboard + Shulman + shun + shunt + shut + shutdown + shutoff + shutout + shuttle + shuttlecock + shy + Shylock + sial + SIAM + Siamese + Sian + sib + Siberia + sibilant + Sibley + sibling + sibyl + sic + Sicilian + Sicily + sick + sicken + sickish + sickle + sicklewort + sickroom + side + sidearm + sideband + sideboard + sidecar + sidelight + sideline + sidelong + sideman + sidemen + sidereal + siderite + sidesaddle + sideshow + sidestep + sidestepping + sidetrack + sidewalk + sidewall + sideway + sidewinder + sidewise + sidle + Sidney + siege + Siegel + Siegfried + Sieglinda + Siegmund + Siemens + Siena + sienna + sierra + siesta + sieve + sift + sigh + sight + sightsee + sightseeing + sightseer + sigma + Sigmund + sign + signal + signature + signboard + signet + significant + signify + Signor + Signora + signpost + Sikorsky + silage + silane + Silas + silent + silhouette + silica + silicate + siliceous + silicic + silicide + silicon + silicone + silk + silken + silkworm + silky + sill + silly + silo + silt + siltation + siltstone + silty + silver + Silverman + silversmith + silverware + silvery + sima + similar + simile + similitude + simmer + Simmons + Simon + Simons + Simonson + simper + simple + simplectic + simpleminded + simpleton + simplex + simplicial + simplicity + simplify + simplistic + simply + Simpson + Sims + simulate + simulcast + simultaneity + simultaneous + sin + Sinai + since + sincere + Sinclair + sine + sinew + sinewy + sinful + sing + singable + Singapore + singe + single + singlehanded + singlet + singleton + singsong + singular + sinh + sinister + sinistral + sink + sinkhole + sinter + sinuous + sinus + sinusoid + sinusoidal + Sioux + sip + sir + sire + siren + Sirius + sis + sisal + siskin + sister + Sistine + Sisyphean + Sisyphus + sit + site + situ + situate + situs + siva + six + sixfold + sixgun + sixteen + sixteenth + sixth + sixtieth + sixty + size + sizzle + skat + skate + skater + skeet + skeletal + skeleton + skeptic + sketch + sketchbook + sketchpad + sketchy + skew + ski + skid + skiddy + skied + skiff + skill + skillet + skillful + skim + skimp + skimpy + skin + skindive + skinny + skip + skipjack + Skippy + skirmish + skirt + skit + skittle + Skopje + skulk + skull + skullcap + skullduggery + skunk + sky + Skye + skyhook + skyjack + skylark + skylight + skyline + skyrocket + skyscrape + skyward + skywave + skyway + slab + slack + slacken + sladang + slag + slain + slake + slam + slander + slanderous + slang + slant + slap + slapstick + slash + slat + slate + slater + slaughter + slaughterhouse + Slav + slave + slavery + Slavic + slavish + Slavonic + slay + sled + sledge + sledgehammer + sleek + sleep + sleepwalk + sleepy + sleet + sleety + sleeve + sleigh + sleight + slender + slept + sleuth + slew + slice + slick + slid + slide + slight + slim + slime + slimy + sling + slingshot + slip + slippage + slippery + slit + slither + sliver + slivery + Sloan + Sloane + slob + Slocum + sloe + slog + slogan + sloganeer + slogging + sloop + slop + slope + sloppy + slosh + slot + sloth + slothful + slouch + slough + Slovakia + sloven + Slovenia + slow + slowdown + sludge + slug + slugging + sluggish + sluice + slum + slumber + slump + slung + slur + slurp + slurry + slut + sly + smack + small + smaller + Smalley + smallish + smallpox + smalltime + smart + smash + smatter + smattering + smear + smell + smelt + smile + smirk + smith + smithereens + Smithfield + Smithson + Smithsonian + smithy + smitten + smog + smoke + smokehouse + smokescreen + smokestack + smoky + smolder + smooch + smooth + smoothbore + smother + Smucker + smudge + smudgy + smug + smuggle + smut + smutty + Smyrna + Smythe + snack + snafu + snag + snagging + snail + snake + snakebird + snakelike + snakeroot + snap + snapback + snapdragon + snappish + snappy + snapshot + snare + snark + snarl + snatch + snazzy + sneak + sneaky + sneer + sneeze + snell + snick + Snider + sniff + sniffle + sniffly + snifter + snigger + snip + snipe + snippet + snippy + snivel + snob + snobbery + snobbish + snook + snoop + snoopy + snore + snorkel + snort + snotty + snout + snow + snowball + snowfall + snowflake + snowmobile + snowshoe + snowstorm + snowy + snub + snuff + snuffer + snuffle + snuffly + snug + snuggle + snuggly + snyaptic + Snyder + so + soak + soap + soapstone + soapsud + soapy + soar + sob + sober + sobriety + sobriquet + Soc + soccer + sociable + social + societal + Societe + society + socioeconomic + sociology + sociometry + sock + socket + sockeye + Socrates + Socratic + sod + soda + sodden + sodium + sofa + soffit + Sofia + soft + softball + soften + software + softwood + soggy + soignee + soil + soiree + sojourn + Sol + solace + solar + sold + solder + soldier + soldiery + sole + solecism + solemn + solemnity + solenoid + solicit + solicitation + solicitor + solicitous + solicitude + solid + solidarity + solidify + solidus + soliloquy + solipsism + solitaire + solitary + soliton + solitude + solo + Solomon + Solon + solstice + soluble + solute + solution + solvate + solve + solvent + soma + somal + Somali + somatic + somber + sombre + some + somebody + somebody'll + someday + somehow + someone + someone'll + someplace + Somers + somersault + Somerset + Somerville + something + sometime + somewhat + somewhere + sommelier + Sommerfeld + somnolent + son + sonant + sonar + sonata + song + songbag + songbook + songful + sonic + sonnet + sonny + sonogram + Sonoma + Sonora + sonority + sonorous + Sony + soon + soot + sooth + soothe + soothsay + soothsayer + sop + Sophia + sophia + Sophie + sophism + sophisticate + sophistry + Sophoclean + Sophocles + sophomore + sophomoric + soprano + sora + sorb + sorcery + sordid + sore + Sorensen + Sorenson + sorghum + sorority + sorption + sorrel + sorrow + sorrowful + sorry + sort + sortie + sou + souffle + sough + sought + soul + soulful + sound + soundproof + soup + sour + sourberry + source + sourdough + sourwood + Sousa + soutane + south + Southampton + southbound + southeast + southeastern + southern + southernmost + Southey + southland + southpaw + southward + southwest + southwestern + souvenir + sovereign + sovereignty + soviet + sovkhoz + sow + sowbelly + sown + soy + soya + soybean + spa + space + spacecraft + spacesuit + spacetime + spacious + spade + spaghetti + Spain + spalding + span + spandrel + spangle + Spaniard + spaniel + Spanish + spar + spare + sparge + spark + sparkle + Sparkman + sparky + sparling + sparrow + sparse + Sparta + Spartan + spasm + spastic + spat + spate + spatial + spatlum + spatterdock + spatula + Spaulding + spavin + spawn + spay + spayed + speak + speakeasy + spear + spearhead + spearmint + spec + special + specie + species + specific + specify + specimen + specious + speck + speckle + spectacle + spectacular + spectator + Spector + spectra + spectral + spectrogram + spectrograph + spectrography + spectrometer + spectrophotometer + spectroscope + spectroscopic + spectroscopy + spectrum + specular + speculate + sped + speech + speed + speedboat + speedometer + speedup + speedwell + speedy + spell + spellbound + Spencer + Spencerian + spend + spent + sperm + spermatophyte + Sperry + spew + sphagnum + sphalerite + sphere + spheric + spheroid + spheroidal + spherule + sphinx + Spica + spice + spicebush + spicy + spider + spiderwort + spidery + Spiegel + spigot + spike + spikenard + spiky + spill + spilt + spin + spinach + spinal + spindle + spine + spinnaker + spinneret + spinodal + spinoff + spinster + spiny + spiral + spire + spirit + spiritual + Spiro + spit + spite + spiteful + spitfire + spittle + spitz + splash + splashy + splat + splay + splayed + spleen + spleenwort + splendid + splenetic + splice + spline + splint + splintery + split + splotch + splotchy + splurge + splutter + spoil + spoilage + Spokane + spoke + spoken + spokesman + spokesmen + spokesperson + sponge + spongy + sponsor + spontaneity + spontaneous + spoof + spook + spooky + spool + spoon + spoonful + sporadic + spore + sport + sportsman + sportsmen + sportswear + sportswrite + sportswriter + sportswriting + sporty + spot + spotlight + spotty + spouse + spout + Sprague + sprain + sprang + sprawl + spray + spread + spree + sprig + sprightly + spring + springboard + springe + Springfield + springtail + springtime + springy + sprinkle + sprint + sprite + sprocket + Sproul + sprout + spruce + sprue + sprung + spud + spume + spumoni + spun + spunk + spur + spurge + spurious + spurn + spurt + sputnik + sputter + spy + spyglass + squabble + squad + squadron + squalid + squall + squamous + squander + square + squash + squashberry + squashy + squat + squatted + squatter + squatting + squaw + squawbush + squawk + squawroot + squeak + squeaky + squeal + squeamish + squeegee + squeeze + squelch + Squibb + squid + squill + squint + squire + squirehood + squirm + squirmy + squirrel + squirt + squishy + Sri + s's + SSE + SST + SSW + St + stab + stabile + stable + stableman + stablemen + staccato + stack + Stacy + stadia + stadium + staff + Stafford + stag + stage + stagecoach + stagestruck + stagnant + stagnate + stagy + Stahl + staid + stain + stair + staircase + stairway + stairwell + stake + stalactite + stale + stalemate + Staley + Stalin + stalk + stall + stallion + stalwart + stamen + Stamford + stamina + staminate + stammer + stamp + stampede + Stan + stance + stanch + stanchion + stand + standard + standby + standeth + Standish + standoff + standpoint + standstill + Stanford + Stanhope + stank + Stanley + stannic + stannous + Stanton + stanza + staph + staphylococcus + staple + Stapleton + star + starboard + starch + starchy + stardom + stare + starfish + stargaze + stark + Starkey + starlet + starlight + starling + Starr + start + startle + startup + starvation + starve + stash + stasis + state + Staten + stater + stateroom + statesman + statesmanlike + statesmen + statewide + static + stationarity + stationary + stationery + stationmaster + statistician + Statler + stator + statuary + statue + statuette + stature + status + statute + statutory + Stauffer + staunch + Staunton + stave + stay + stayed + stead + steadfast + steady + steak + steal + stealth + stealthy + steam + steamboat + steamy + stearate + stearic + Stearns + steed + steel + Steele + steelmake + steely + Steen + steep + steepen + steeple + steeplebush + steeplechase + steer + steeve + Stefan + Stegosaurus + stein + Steinberg + Steiner + Stella + stella + stellar + stem + stench + stencil + stenographer + stenography + stenotype + step + stepchild + Stephanie + stephanotis + Stephen + Stephens + Stephenson + stepmother + steppe + steprelation + stepson + stepwise + steradian + stereo + stereography + stereoscopy + sterile + sterling + stern + sternal + Sternberg + Sterno + sternum + steroid + stethoscope + Stetson + Steuben + Steve + stevedore + Steven + Stevens + Stevenson + stew + steward + stewardess + Stewart + stick + stickle + stickleback + stickpin + sticktight + sticky + stiff + stiffen + stifle + stigma + stigmata + stile + stiletto + still + stillbirth + stillwater + stilt + stimulant + stimulate + stimulatory + stimuli + stimulus + sting + stingy + stink + stinkpot + stinky + stint + stipend + stipple + stipulate + stir + Stirling + stirrup + stitch + stochastic + stock + stockade + stockbroker + stockholder + Stockholm + stockpile + stockroom + Stockton + stocky + stodgy + stoic + stoichiometry + stoke + Stokes + stole + stolen + stolid + stomach + stomp + stone + stonecrop + Stonehenge + stonewall + stoneware + stonewort + stony + stood + stooge + stool + stoop + stop + stopband + stopcock + stopgap + stopover + stoppage + stopwatch + storage + store + storehouse + storekeep + storeroom + Storey + stork + storm + stormbound + stormy + story + storyboard + storyteller + stout + stove + stow + stowage + stowaway + strabismic + strabismus + straddle + strafe + straggle + straight + straightaway + straighten + straightforward + straightway + strain + strait + strand + strange + strangle + strangulate + strap + strata + stratagem + strategic + strategist + strategy + Stratford + stratify + stratosphere + stratospheric + Stratton + stratum + Strauss + straw + strawberry + strawflower + stray + streak + stream + streamline + streamside + street + streetcar + strength + strengthen + strenuous + streptococcus + streptomycin + stress + stressful + stretch + strewn + striate + stricken + Strickland + strict + stricter + stricture + stride + strident + strife + strike + strikebreak + string + stringent + stringy + strip + stripe + striptease + stripy + strive + striven + strobe + stroboscopic + strode + stroke + stroll + Strom + Stromberg + strong + stronghold + strongroom + strontium + strop + strophe + strove + struck + structural + structure + struggle + strum + strung + strut + strychnine + Stu + Stuart + stub + stubble + stubborn + stubby + stucco + stuck + stud + Studebaker + student + studio + studious + study + stuff + stuffy + stultify + stumble + stump + stumpage + stumpy + stun + stung + stunk + stunt + stupefaction + stupefy + stupendous + stupid + stupor + Sturbridge + sturdy + sturgeon + Sturm + stutter + Stuttgart + Stuyvesant + Stygian + style + styli + stylish + stylites + stylus + stymie + styrene + Styrofoam + Styx + suave + sub + subject + subjectivity + subjunctive + sublimate + subliminal + submersible + submit + submittal + submitted + submitting + subpoena + subrogation + subservient + subsidiary + subsidy + subsist + subsistent + substantial + substantiate + substantive + substituent + substitute + substitution + substitutionary + substrate + subsume + subsumed + subsuming + subterfuge + subterranean + subtle + subtlety + subtly + subtracter + subtrahend + suburb + suburbia + subversive + subvert + succeed + success + successful + succession + successive + successor + succinct + succubus + succumb + such + suck + suckling + sucrose + suction + sud + Sudan + Sudanese + sudden + suds + sue + suey + Suez + suffer + suffice + sufficient + suffix + suffocate + Suffolk + suffrage + suffragette + suffuse + sugar + suggest + suggestible + suggestion + suggestive + suicidal + suicide + suit + suitcase + suite + suitor + sulfa + sulfanilamide + sulfate + sulfide + sulfite + sulfonamide + sulfur + sulfuric + sulfurous + sulk + sulky + sullen + Sullivan + sully + sulphur + sultan + sultanate + sultry + sum + sumac + Sumatra + Sumeria + Sumerian + summand + summarily + summary + summate + summation + Summers + summertime + summit + summitry + summon + Sumner + sumptuous + Sumter + sun + sunbeam + sunbonnet + sunburn + sunburnt + Sunday + sunder + sundew + sundial + sundown + sundry + sunfish + sunflower + sung + sunglasses + sunk + sunken + sunlight + sunlit + sunny + Sunnyvale + sunrise + sunscreen + sunset + sunshade + sunshine + sunshiny + sunspot + suntan + suntanned + suntanning + SUNY + sup + super + superannuate + superb + superbly + supercilious + superficial + superfluity + superfluous + superintendent + superior + superlative + superlunary + supernatant + supernovae + superposable + supersede + superstition + superstitious + supervene + supervisory + supine + supplant + supple + supplementary + supplicate + supply + support + supposable + suppose + supposition + suppress + suppressible + suppression + suppressor + supra + supranational + supremacy + supreme + supremum + surcease + surcharge + sure + surety + surf + surface + surfactant + surfeit + surge + surgeon + surgery + surgical + surjection + surjective + surmise + surmount + surname + surpass + surplus + surprise + surreal + surrender + surreptitious + surrey + surrogate + surround + surtax + surtout + surveillant + survey + surveyor + survival + survive + survivor + Sus + Susan + Susanne + susceptance + susceptible + sushi + Susie + suspect + suspend + suspense + suspension + suspensor + suspicion + suspicious + Sussex + sustain + sustenance + Sutherland + Sutton + suture + Suzanne + suzerain + suzerainty + Suzuki + svelte + SW + swab + swabby + swag + swage + Swahili + swain + swallow + swallowtail + swam + swami + swamp + swampy + swan + swank + swanky + swanlike + Swanson + swap + swarm + swart + Swarthmore + Swarthout + swarthy + swastika + swat + swatch + swath + swathe + sway + Swaziland + swear + sweat + sweatband + sweater + sweatshirt + sweaty + Swede + Sweden + Swedish + Sweeney + sweep + sweepstake + sweet + sweeten + sweetheart + sweetish + swell + swelt + swelter + Swenson + swept + swerve + swift + swig + swigging + swim + swimsuit + swindle + swine + swing + swingable + swingy + swipe + swirl + swirly + swish + swishy + swiss + switch + switchblade + switchboard + switchgear + switchman + Switzer + Switzerland + swivel + swizzle + swollen + swoop + sword + swordfish + swordplay + swordtail + swore + sworn + swum + swung + sybarite + Sybil + sycamore + sycophant + sycophantic + Sydney + syenite + Sykes + syllabi + syllabic + syllabify + syllable + syllabus + syllogism + syllogistic + Sylow + sylvan + Sylvania + Sylvester + Sylvia + symbiosis + symbiotic + symbol + symbolic + symmetry + sympathetic + sympathy + symphonic + symphony + symplectic + symposia + symposium + symptom + symptomatic + synagogue + synapse + synapses + synaptic + synchronism + synchronous + synchrony + synchrotron + syncopate + syndic + syndicate + syndrome + synergism + synergistic + synergy + Synge + synod + synonym + synonymous + synonymy + synopses + synopsis + synoptic + syntactic + syntax + syntheses + synthesis + synthetic + Syracuse + Syria + syringa + syringe + syrinx + syrup + syrupy + system + systematic + systemic + systemization + systemwide + syzygy + Szilard + t + TA + tab + tabernacle + table + tableau + tableaux + tablecloth + tableland + tablespoon + tablespoonful + tablet + tabloid + taboo + tabu + tabula + tabular + tabulate + tachinid + tachistoscope + tachometer + tacit + Tacitus + tack + tackle + tacky + Tacoma + tact + tactful + tactic + tactician + tactile + tactual + tad + tadpole + taffeta + taffy + Taft + taft + tag + tagging + Tahiti + Tahoe + tail + tailgate + tailor + tailspin + tailwind + taint + Taipei + Taiwan + take + taken + takeoff + takeover + taketh + talc + talcum + tale + talent + talisman + talismanic + talk + talkative + talkie + talky + tall + Tallahassee + tallow + tally + tallyho + Talmud + talon + talus + tam + tamale + tamarack + tamarind + tambourine + tame + Tammany + tamp + Tampa + tampon + tan + tanager + Tanaka + Tananarive + tandem + tang + tangent + tangential + tangerine + tangible + tangle + tango + tangy + tanh + tank + tannin + tansy + tantalum + Tantalus + tantamount + tantrum + Tanya + Tanzania + tao + Taoist + Taos + tap + tapa + tape + taper + tapestry + tapeworm + tapir + tapis + tappa + tappet + tar + tara + tarantara + tarantula + Tarbell + tardy + target + tariff + tarnish + tarpaper + tarpaulin + tarpon + tarry + Tarrytown + tart + tartar + Tartary + Tarzan + task + taskmaster + Tasmania + Tass + tassel + taste + tasteful + tasting + tasty + tat + tate + tater + tattle + tattler + tattletale + tattoo + tatty + tau + taught + taunt + Taurus + taut + tautology + tavern + taverna + tawdry + tawny + tax + taxation + taxi + taxicab + taxied + taxiway + taxonomic + taxonomy + taxpayer + taxpaying + Taylor + tea + teacart + teach + teacup + teahouse + teakettle + teakwood + teal + team + teammate + teamster + teamwork + teapot + tear + teardrop + tearful + tease + teasel + teaspoon + teaspoonful + teat + tech + technetium + technic + technician + Technion + technique + technocrat + technocratic + technology + tectonic + tecum + Ted + ted + Teddy + tedious + tedium + tee + teeing + teem + teen + teenage + teensy + teet + teeter + teeth + teethe + teethed + teething + teetotal + Teflon + Tegucigalpa + Teheran + Tehran + tektite + Tektronix + Tel + telecommunicate + teleconference + Teledyne + Telefunken + telegram + telegraph + telegraphy + telekinesis + telemeter + teleology + teleost + telepathic + telepathy + telephone + telephonic + telephony + telephotography + teleprinter + teleprocessing + teleprompter + telescope + telescopic + telethon + teletype + teletypesetting + teletypewrite + televise + television + Telex + tell + teller + telltale + tellurium + temerity + temper + tempera + temperance + temperate + temperature + tempest + tempestuous + template + temple + Templeton + tempo + temporal + temporary + tempt + temptation + temptress + ten + tenable + tenacious + tenacity + tenant + tend + tendency + tenderfoot + tenderloin + tendon + tenebrous + tenement + tenet + tenfold + Tenneco + Tennessee + Tenney + tennis + Tennyson + tenon + tenor + tense + tensile + tension + tensional + tensor + tenspot + tent + tentacle + tentative + tenterhooks + tenth + tenuous + tenure + tepee + tepid + teratogenic + teratology + terbium + tercel + Teresa + term + terminable + terminal + terminate + termini + terminology + terminus + termite + tern + ternary + Terpsichore + terpsichorean + Terra + terrace + terrain + terramycin + terrapin + Terre + terrestrial + terrible + terrier + terrific + terrify + territorial + territory + terror + terry + terse + tertiary + Tess + tessellate + test + testament + testamentary + testate + testbed + testes + testicle + testicular + testify + testimonial + testimony + testy + tetanus + tete + tether + tetrachloride + tetrafluoride + tetrafluouride + tetragonal + tetrahedra + tetrahedral + tetrahedron + tetravalent + Teutonic + Texaco + Texan + Texas + text + textbook + textile + Textron + textual + textural + texture + Thai + Thailand + Thalia + thallium + thallophyte + than + thank + thankful + thanksgiving + that + thatch + that'd + that'll + thaw + Thayer + the + Thea + theatric + Thebes + thee + theft + their + theism + theist + Thelma + them + thematic + theme + themselves + then + thence + thenceforth + theocracy + Theodore + Theodosian + theologian + theology + theorem + theoretic + theoretician + theorist + theory + therapeutic + therapist + therapy + there + thereabouts + thereafter + thereat + thereby + there'd + therefor + therefore + therefrom + therein + there'll + thereof + thereon + Theresa + thereto + theretofore + thereunder + thereupon + therewith + thermal + thermionic + thermistor + thermo + Thermofax + thermostat + thesaurus + these + theses + Theseus + thesis + thespian + theta + Thetis + they + they'd + they'll + they're + they've + thiamin + thick + thicken + thicket + thickish + thief + thieves + thieving + thigh + thimble + Thimbu + thin + thine + thing + think + thinnish + thiocyanate + thiouracil + third + thirst + thirsty + thirteen + thirteenth + thirtieth + thirty + this + this'll + thistle + thistledown + thither + Thomas + Thomistic + Thompson + Thomson + thong + Thor + Thoreau + thoriate + thorium + thorn + Thornton + thorny + thorough + thoroughbred + thoroughfare + thoroughgoing + Thorpe + Thorstein + those + thou + though + thought + thoughtful + thousand + thousandfold + thousandth + thrall + thrash + thread + threadbare + threat + threaten + three + threefold + threesome + threonine + thresh + threshold + threw + thrice + thrift + thrifty + thrill + thrips + thrive + throat + throaty + throb + throes + thrombosis + throne + throng + throttle + through + throughout + throughput + throw + throwaway + throwback + thrown + thrum + thrush + thrust + Thruway + Thuban + thud + thug + thuggee + Thule + thulium + thumb + thumbnail + thump + thunder + thunderbird + thunderbolt + thunderclap + thunderflower + thunderous + thundershower + thunderstorm + Thurman + Thursday + thus + thwack + thwart + thy + thyme + thymine + thymus + thyratron + thyroglobulin + thyroid + thyroidal + thyronine + thyrotoxic + thyroxine + ti + Tiber + Tibet + tibet + Tibetan + tibia + tic + tick + ticket + tickle + ticklish + tid + tidal + tidbit + tide + tideland + tidewater + tidy + tie + tied + Tientsin + tier + Tiffany + tift + tiger + tight + tighten + tigress + Tigris + til + tilde + tile + till + tilt + tilth + Tim + timber + timberland + timbre + time + timeout + timepiece + timeshare + timetable + timeworn + Timex + timid + Timon + timothy + tin + Tina + tincture + tinder + tine + tinfoil + tinge + tingle + tinker + tinkle + tinsel + tint + tintype + tiny + Tioga + tip + tipoff + Tipperary + tipple + tippy + tipsy + tiptoe + tirade + Tirana + tire + tiresome + tissue + tit + Titan + titanate + titanic + titanium + tithe + titian + titillate + title + titmouse + titrate + titular + Titus + TN + TNT + to + toad + toady + toast + toastmaster + tobacco + Tobago + Toby + toccata + today + today'll + Todd + toddle + toe + TOEFL + toenail + toffee + tofu + tog + together + togging + toggle + Togo + togs + toil + toilet + toiletry + toilsome + tokamak + token + Tokyo + told + Toledo + tolerable + tolerant + tolerate + toll + tollgate + tollhouse + Tolstoy + toluene + Tom + tomato + tomatoes + tomb + tombstone + tome + Tomlinson + Tommie + tommy + tomograph + tomography + tomorrow + Tompkins + ton + tonal + tone + tong + tongue + Toni + tonic + tonight + tonk + tonnage + tonsil + tonsillitis + tony + too + toodle + took + tool + toolkit + toolmake + toolsmith + toot + tooth + toothbrush + toothpaste + toothpick + tootle + top + topaz + topcoat + Topeka + topgallant + topic + topmost + topnotch + topocentric + topography + topologize + topology + topple + topsoil + Topsy + tor + Torah + torah + torch + tore + tori + torn + tornado + toroid + toroidal + Toronto + torpedo + torpid + torpor + torque + torr + Torrance + torrent + torrid + torsion + torso + tort + tortoise + tortoiseshell + tortuous + torture + torus + tory + Toshiba + toss + tot + total + totalitarian + tote + totem + totemic + touch + touchdown + touchstone + touchy + tough + tour + tournament + tousle + tout + tow + toward + towboat + towel + tower + towhead + towhee + town + townhouse + Townsend + townsman + townsmen + toxic + toxicology + toxin + toy + Toyota + trace + traceable + tracery + trachea + track + trackage + tract + tractor + Tracy + trade + trademark + tradeoff + tradesman + tradesmen + tradition + traffic + trafficked + trafficking + trag + tragedian + tragedy + tragic + tragicomic + trail + trailblaze + trailhead + trailside + train + trainee + trainman + trainmen + traipse + trait + traitor + traitorous + trajectory + tram + trammel + tramp + trample + tramway + trance + tranquil + tranquillity + transact + transalpine + transatlantic + transceiver + transcend + transcendent + transcendental + transconductance + transcontinental + transcribe + transcript + transcription + transducer + transduction + transect + transept + transfer + transferable + transferee + transference + transferor + transferral + transferred + transferring + transfinite + transfix + transform + transformation + transfusable + transfuse + transfusion + transgress + transgression + transgressor + transient + transistor + transit + Transite + transition + transitive + transitory + translate + transliterate + translucent + transmissible + transmission + transmit + transmittable + transmittal + transmittance + transmitted + transmitter + transmitting + transmogrify + transmutation + transmute + transoceanic + transom + transpacific + transparent + transpiration + transpire + transplant + transplantation + transpond + transport + transportation + transposable + transpose + transposition + transship + transshipped + transshipping + transversal + transverse + transvestite + Transylvania + trap + trapezium + trapezoid + trapezoidal + trash + trashy + Trastevere + trauma + traumatic + travail + travel + travelogue + traversable + traversal + traverse + travertine + travesty + Travis + trawl + tray + treacherous + treachery + tread + treadle + treadmill + treason + treasonous + treasure + treasury + treat + treatise + treaty + treble + tree + treetop + trefoil + trek + trellis + tremble + tremendous + tremor + tremulous + trench + trenchant + trencherman + trenchermen + trend + trendy + Trenton + trepidation + trespass + tress + trestle + Trevelyan + triable + triac + triad + trial + triangle + triangular + triangulate + Triangulum + Trianon + Triassic + triatomic + tribal + tribe + tribesman + tribesmen + tribulate + tribunal + tribune + tributary + tribute + Triceratops + Trichinella + trichloroacetic + trichloroethane + trichrome + trick + trickery + trickle + trickster + tricky + trident + tridiagonal + tried + triennial + trifle + trifluoride + trifluouride + trig + trigonal + trigonometry + trigram + trihedral + trill + trillion + trillionth + trilobite + trilogy + trim + trimer + trimester + Trinidad + trinitarian + trinity + trinket + trio + triode + trioxide + trip + tripartite + tripe + triphenylphosphine + triple + triplet + Triplett + triplex + triplicate + tripod + tripoli + triptych + trisodium + Tristan + tristate + trisyllable + trite + tritium + triton + triumph + triumphal + triumphant + triune + trivalent + trivia + trivial + trivium + trod + trodden + troglodyte + troika + Trojan + troll + trolley + trollop + trombone + trompe + troop + trophic + trophy + tropic + tropopause + troposphere + tropospheric + trot + troubador + trouble + troubleshoot + troublesome + trough + trounce + troupe + trouser + trout + Troutman + troy + truancy + truant + truce + truck + truculent + trudge + Trudy + true + truism + truly + Truman + Trumbull + trump + trumpery + trumpet + truncate + trundle + trunk + truss + trust + trustee + trustful + trustworthy + truth + truthful + TRW + try + trypsin + trytophan + t's + tsar + tsarina + tsunami + TTL + TTY + tub + tuba + tube + tuberculin + tuberculosis + tubular + tubule + tuck + Tucker + Tucson + Tudor + Tuesday + tuff + tuft + tug + tugging + tuition + Tulane + tularemia + tulip + tulle + Tulsa + tum + tumble + tumbrel + tumult + tumultuous + tun + tuna + tundra + tune + tuneful + tung + tungstate + tungsten + tunic + Tunis + Tunisia + tunnel + tupelo + tuple + turban + turbid + turbidity + turbinate + turbine + turbofan + turbojet + turbulent + turf + turgid + Turin + Turing + turk + turkey + Turkish + turmoil + turn + turnabout + turnaround + turnery + turnip + turnkey + turnoff + turnout + turnover + turnpike + turnstone + turntable + turpentine + turpitude + turquoise + turret + turtle + turtleback + turtleneck + turvy + Tuscaloosa + Tuscan + Tuscany + Tuscarora + tusk + Tuskegee + tussle + tutelage + tutor + tutorial + Tuttle + tutu + tuxedo + TV + TVA + TWA + twaddle + twain + tweak + tweed + tweedy + tweeze + twelfth + twelve + twentieth + twenty + twice + twiddle + twig + twigging + twilight + twill + twin + twine + twinge + twinkle + twirl + twirly + twist + twisty + twit + twitch + twitchy + two + twofold + Twombly + twosome + TWX + TX + Tyburn + tycoon + tying + Tyler + Tyndall + type + typeface + typescript + typeset + typesetter + typesetting + typewrite + typewritten + typhoid + Typhon + typhoon + typhus + typic + typify + typo + typographer + typography + typology + tyrannic + tyrannicide + Tyrannosaurus + tyranny + tyrant + tyrosine + Tyson + u + ubiquitous + ubiquity + UCLA + Uganda + ugh + ugly + UHF + UK + Ukraine + Ukrainian + Ulan + ulcer + ulcerate + Ullman + Ulster + ulterior + ultimate + ultimatum + ultra + Ulysses + umber + umbilical + umbilici + umbilicus + umbra + umbrage + umbrella + umlaut + umpire + UN + unanimity + unanimous + unary + unbeknownst + unbidden + unchristian + uncle + uncouth + unction + under + underclassman + underclassmen + underling + undulate + UNESCO + uniaxial + unicorn + unidimensional + unidirectional + uniform + unify + unilateral + unimodal + unimodular + uninominal + union + uniplex + unipolar + uniprocessor + unique + Uniroyal + unisex + unison + unit + unital + unitarian + unitary + unite + unity + Univac + univalent + univariate + universal + universe + Unix + unkempt + unruly + until + unwieldy + up + upbeat + upbraid + upbring + upcome + update + updraft + upend + upgrade + upheaval + upheld + uphill + uphold + upholster + upholstery + upkeep + upland + uplift + upon + upper + upperclassman + upperclassmen + uppercut + uppermost + upraise + upright + uprise + upriver + uproar + uproarious + uproot + upset + upsetting + upshot + upside + upsilon + upslope + upstair + upstand + upstart + upstate + upstater + upstream + upsurge + upswing + uptake + Upton + uptown + uptrend + upturn + upward + upwind + uracil + urania + uranium + Uranus + uranyl + urban + Urbana + urbane + urbanite + urchin + urea + uremia + urethane + urethra + urge + urgency + urgent + urging + Uri + urinal + urinary + urine + Uris + urn + Ursa + Ursula + Ursuline + Uruguay + u's + U.S + us + USA + U.S.A + usable + USAF + usage + USC + USC&GS + USDA + use + useful + USGS + usher + USIA + USN + USPS + USSR + usual + usurer + usurious + usurp + usurpation + usury + UT + Utah + utensil + uterine + uterus + Utica + utile + utilitarian + utility + utmost + utopia + utopian + Utrecht + utter + utterance + uttermost + v + VA + vacant + vacate + vacationland + vaccinate + vaccine + vacillate + vacua + vacuo + vacuolate + vacuole + vacuous + vacuum + vade + Vaduz + vagabond + vagary + vagina + vaginal + vagrant + vague + Vail + vain + vainglorious + vale + valediction + valedictorian + valedictory + valent + valentine + Valerie + Valery + valet + valeur + Valhalla + valiant + valid + validate + valine + Valkyrie + Valletta + valley + Valois + Valparaiso + valuate + value + valve + vamp + vampire + van + vanadium + Vance + Vancouver + vandal + Vandenberg + Vanderbilt + Vanderpoel + vane + vanguard + vanilla + vanish + vanity + vanquish + vantage + vapid + vaporous + variable + variac + Varian + variant + variate + variegate + variety + various + varistor + Varitype + varnish + varsity + vary + vascular + vase + vasectomy + Vasquez + vassal + Vassar + vast + vat + Vatican + vaudeville + Vaudois + Vaughan + Vaughn + vault + vaunt + veal + vector + vectorial + Veda + vee + veer + veery + Vega + vegetable + vegetarian + vegetate + vehement + vehicle + vehicular + veil + vein + velar + Velasquez + veldt + Vella + vellum + velocity + velours + velvet + velvety + venal + vend + vendetta + vendible + vendor + veneer + venerable + venerate + venereal + Venetian + Veneto + Venezuela + vengeance + vengeful + venial + Venice + venison + venom + venomous + venous + vent + ventilate + ventricle + venture + venturesome + venturi + Venus + Venusian + Vera + veracious + veracity + veranda + verandah + verb + verbal + verbatim + verbena + verbiage + verbose + verbosity + verdant + Verde + Verdi + verdict + verge + veridic + verify + verisimilitude + veritable + verity + Verlag + vermeil + vermiculite + vermilion + vermin + Vermont + vermouth + Verna + vernacular + vernal + Verne + vernier + Vernon + Verona + Veronica + versa + Versailles + versatec + versatile + verse + version + versus + vertebra + vertebrae + vertebral + vertebrate + vertex + vertical + vertices + vertigo + verve + very + vesicular + vesper + vessel + vest + vestal + vestibule + vestige + vestigial + vestry + vet + vetch + veteran + veterinarian + veterinary + veto + vex + vexation + vexatious + VHF + vi + via + viaduct + vial + vibrant + vibrate + vibrato + viburnum + vicar + vicarious + vice + viceroy + Vichy + vicinal + vicinity + vicious + vicissitude + Vicksburg + Vicky + victim + victor + Victoria + Victorian + victorious + victory + victrola + victual + Vida + vide + video + videotape + vie + Vienna + Viennese + Vientiane + Viet + Vietnam + Vietnamese + view + viewpoint + viewport + vigil + vigilant + vigilante + vigilantism + vignette + vigorous + vii + viii + Viking + vile + vilify + villa + village + villain + villainous + villein + Vincent + vindicate + vindictive + vine + vinegar + vineyard + Vinson + vintage + vintner + vinyl + viola + violate + violent + violet + violin + Virgil + virgin + virginal + Virginia + Virginian + Virgo + virgule + virile + virtual + virtue + virtuosi + virtuosity + virtuoso + virtuous + virulent + virus + vis + visa + visage + viscera + visceral + viscoelastic + viscometer + viscosity + viscount + viscous + vise + Vishnu + visible + Visigoth + vision + visionary + visit + visitation + visitor + visor + vista + visual + vita + vitae + vital + vitamin + vitiate + Vito + vitreous + vitrify + vitriol + vitriolic + vitro + viva + vivace + vivacious + vivacity + Vivaldi + Vivian + vivid + vivify + vivo + vixen + viz + Vladimir + Vladivostok + vocable + vocabularian + vocabulary + vocal + vocalic + vocate + vociferous + Vogel + vogue + voice + voiceband + void + volatile + volcanic + volcanism + volcano + volition + Volkswagen + volley + volleyball + Volstead + volt + Volta + voltage + voltaic + Voltaire + Volterra + voltmeter + voluble + volume + volumetric + voluminous + voluntarism + voluntary + volunteer + voluptuous + Volvo + vomit + von + voodoo + voracious + voracity + vortex + vortices + vorticity + Voss + votary + vote + votive + vouch + vouchsafe + Vought + vow + vowel + voyage + Vreeland + v's + VT + Vulcan + vulgar + vulnerable + vulpine + vulture + vying + w + WA + Waals + Wabash + WAC + wack + wacke + wacky + Waco + wad + waddle + wade + wadi + Wadsworth + wafer + waffle + wag + wage + wagging + waggle + Wagner + wagoneer + wah + Wahl + wail + wainscot + Wainwright + waist + waistcoat + waistline + wait + Waite + waitress + waive + wake + Wakefield + wakeful + waken + wakerobin + wakeup + Walcott + Walden + Waldo + Waldorf + Waldron + wale + Walgreen + walk + walkie + walkout + walkover + walkway + wall + wallaby + Wallace + wallboard + Waller + wallet + Wallis + wallop + wallow + wallpaper + Walls + wally + walnut + Walpole + walrus + Walsh + Walt + Walter + Walters + Waltham + Walton + waltz + waltzing + wan + wand + wander + wane + Wang + wangle + want + wanton + wapato + wapiti + Wappinger + war + warble + ward + warden + wardrobe + wardroom + ware + warehouse + warehouseman + warfare + warhead + Waring + warlike + warm + warmhearted + warmish + warmonger + warmth + warmup + warn + warp + warplane + warrant + warranty + warren + warrior + Warsaw + wart + wartime + warty + Warwick + wary + was + wash + washbasin + washboard + washbowl + Washburn + Washington + washout + washy + wasn't + wasp + waspish + Wasserman + wast + wastage + waste + wastebasket + wasteful + wasteland + wastewater + wastrel + Watanabe + watch + watchband + watchdog + watchful + watchmake + watchman + watchmen + watchword + water + Waterbury + watercourse + waterfall + waterfront + Watergate + Waterhouse + waterline + Waterloo + Waterman + watermelon + waterproof + Waters + watershed + waterside + Watertown + waterway + watery + Watkins + Watson + watt + wattage + wattle + Watts + wave + waveform + wavefront + waveguide + wavelength + wavelet + wavenumber + wavy + wax + waxen + waxwork + waxy + way + waybill + waylaid + waylay + Wayne + wayside + wayward + we + weak + weaken + weal + wealth + wealthy + wean + weapon + weaponry + wear + wearied + wearisome + weary + weasel + weather + weatherbeaten + weatherproof + weatherstrip + weatherstripping + weave + web + Webb + weber + Webster + WECo + we'd + wed + wedge + wedlock + Wednesday + wee + weed + weedy + week + weekday + weekend + Weeks + weep + Wehr + Wei + Weierstrass + weigh + weight + weighty + Weinberg + Weinstein + weir + weird + Weiss + Welch + welcome + weld + Weldon + welfare + we'll + well + wellbeing + Weller + Welles + Wellesley + wellington + Wells + welsh + welt + Wendell + Wendy + went + wept + we're + were + weren't + Werner + wert + Werther + Wesley + Wesleyan + west + westbound + Westchester + westerly + western + westernmost + Westfield + Westinghouse + Westminster + Weston + westward + wet + wetland + we've + Weyerhauser + whack + whale + Whalen + wham + wharf + Wharton + wharves + what + what'd + whatever + Whatley + whatnot + what're + whatsoever + wheat + Wheatstone + whee + wheedle + wheel + wheelbase + wheelchair + wheelhouse + wheeze + wheezy + Whelan + whelk + Wheller + whelm + whelp + when + whence + whenever + where + whereabout + whereas + whereby + where'd + wherefore + wherein + whereof + whereon + where're + wheresoever + whereupon + wherever + wherewith + wherewithal + whet + whether + which + whichever + whiff + whig + while + whim + whimper + whimsey + whimsic + whine + whinny + whip + whiplash + Whippany + whippet + Whipple + whipsaw + whir + whirl + whirligig + whirlpool + whirlwind + whish + whisk + whisper + whistle + whistleable + whit + Whitaker + Whitcomb + white + whiteface + Whitehall + whitehead + Whitehorse + whiten + whitetail + whitewash + whither + Whitlock + Whitman + Whitney + Whittaker + Whittier + whittle + whiz + whizzing + who + who've + whoa + who'd + whoever + whole + wholehearted + wholesale + wholesome + who'll + wholly + whom + whomever + whomsoever + whoop + whoosh + whop + whore + whose + whosoever + whup + why + WI + Wichita + wick + wicket + wide + widen + widespread + widgeon + widget + widow + widowhood + width + widthwise + wield + wiener + Wier + wife + wig + wigging + Wiggins + wiggle + wiggly + Wightman + wigmake + wigwam + Wilbur + Wilcox + wild + wildcat + wildcatter + wilderness + wildfire + wildlife + wile + Wiley + Wilfred + wilful + Wilhelm + Wilhelmina + Wilkes + Wilkie + Wilkins + Wilkinson + will + Willa + Willard + willful + William + Williams + Williamsburg + Williamson + Willie + Willis + Willoughby + willow + willowy + Wills + Wilma + Wilmington + Wilshire + Wilson + Wilsonian + wilt + wily + win + wince + winch + Winchester + wind + windbag + windbreak + windfall + windmill + window + windowpane + windowsill + windshield + Windsor + windstorm + windsurf + windup + windward + windy + wine + winemake + winemaster + winery + wineskin + Winfield + wing + wingback + wingman + wingmen + wingspan + wingtip + Winifred + wink + winkle + Winnetka + Winnie + Winnipeg + Winnipesaukee + winnow + wino + Winslow + winsome + Winston + winter + Winters + wintertime + Winthrop + wintry + winy + wipe + wire + wireman + wiremen + wiretap + wiretapper + wiretapping + wiry + Wisconsin + wisdom + wise + wiseacre + wisecrack + wisenheimer + wish + wishbone + wishful + wishy + wisp + wispy + wistful + wit + witch + witchcraft + with + withal + withdraw + withdrawal + withdrawn + withdrew + withe + wither + withheld + withhold + within + without + withstand + withstood + withy + witness + Witt + witty + wive + wizard + wobble + woe + woebegone + woeful + wok + woke + Wolcott + wold + wolf + Wolfe + Wolff + Wolfgang + wolfish + wolve + wolves + woman + womanhood + womb + wombat + women + won + wonder + wonderful + wonderland + wondrous + Wong + won't + wont + woo + wood + Woodard + Woodbury + woodcarver + woodcock + woodcut + wooden + woodgrain + woodhen + woodland + Woodlawn + woodlot + woodpeck + Woodrow + woodrow + woodruff + Woods + woodshed + woodside + Woodward + woodward + woodwind + woodwork + woody + woodyard + wool + woolgather + Woolworth + Wooster + wop + Worcester + word + Wordsworth + wordy + wore + work + workaday + workbench + workbook + workday + workforce + workhorse + workload + workman + workmanlike + workmen + workout + workpiece + workplace + worksheet + workshop + workspace + workstation + worktable + world + worldwide + worm + wormy + worn + worrisome + worry + worse + worsen + worship + worshipful + worst + worth + Worthington + worthwhile + worthy + Wotan + would + wouldn't + wound + wove + woven + wow + wrack + wraith + wrangle + wrap + wrapup + wrath + wrathful + wreak + wreath + wreathe + wreck + wreckage + wrench + wrest + wrestle + wretch + wriggle + wright + Wrigley + wring + wrinkle + wrist + wristband + wristwatch + writ + write + writeup + writhe + written + wrong + wrongdo + wrongdoer + wrongdoing + wrongful + Wronskian + wrote + wrought + wry + w's + Wu + Wuhan + WV + WY + Wyandotte + Wyatt + Wyeth + Wylie + Wyman + Wyner + wynn + Wyoming + x + Xavier + xenon + xenophobia + xerography + Xerox + xerox + Xerxes + xi + x's + xylem + xylene + xylophone + y + yacht + yachtsman + yachtsmen + yah + yak + Yakima + Yale + Yalta + yam + Yamaha + yang + yank + Yankee + Yankton + Yaounde + yap + yapping + Yaqui + yard + yardage + yardstick + Yarmouth + yarmulke + yarn + yarrow + Yates + yaw + yawl + yawn + ye + yea + Yeager + yeah + year + yearbook + yearn + yeast + yeasty + Yeats + yell + yellow + yellowish + Yellowknife + Yellowstone + yelp + Yemen + yen + yeoman + yeomanry + Yerkes + yeshiva + yesterday + yesteryear + yet + Yiddish + yield + yin + yip + yipping + YMCA + yodel + Yoder + yoga + yoghurt + yogi + yogurt + yoke + yokel + Yokohama + Yokuts + yolk + yon + yond + Yonkers + yore + York + Yorktown + Yosemite + Yost + you + you'd + you'll + young + youngish + youngster + Youngstown + your + you're + yourself + yourselves + youth + youthful + you've + yow + Ypsilanti + y's + ytterbium + yttrium + Yucatan + yucca + yuck + Yugoslav + Yugoslavia + yuh + Yuki + Yukon + yule + Yves + Yvette + YWCA + z + Zachary + zag + zagging + Zagreb + Zaire + Zambia + Zan + Zanzibar + zap + zazen + zeal + Zealand + zealot + zealous + zebra + Zeiss + Zellerbach + Zen + zenith + zero + zeroes + zeroth + zest + zesty + zeta + Zeus + Ziegler + zig + zigging + zigzag + zigzagging + zilch + Zimmerman + zinc + zing + Zion + Zionism + zip + zippy + zircon + zirconium + zloty + zodiac + zodiacal + Zoe + Zomba + zombie + zone + zoo + zoology + zoom + Zorn + Zoroaster + Zoroastrian + zounds + z's + zucchini + Zurich + zygote From criswell at cs.uiuc.edu Mon Feb 23 11:12:19 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Feb 23 11:12:19 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/LICENSE.TXT Makefile alloca.c array.c awk.y builtin.c debug.c eval.c field.c gawk.h io.c main.c missing.c msg.c node.c patchlevel.h regex.c regex.h version.sh Message-ID: <200402231706.LAA00359@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk: LICENSE.TXT added (r1.1) Makefile added (r1.1) alloca.c added (r1.1) array.c added (r1.1) awk.y added (r1.1) builtin.c added (r1.1) debug.c added (r1.1) eval.c added (r1.1) field.c added (r1.1) gawk.h added (r1.1) io.c added (r1.1) main.c added (r1.1) missing.c added (r1.1) msg.c added (r1.1) node.c added (r1.1) patchlevel.h added (r1.1) regex.c added (r1.1) regex.h added (r1.1) version.sh added (r1.1) --- Log message: Adding gawk Malloc Benchmark. --- Diffs of the changes: (+10097 -0) Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/LICENSE.TXT diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/LICENSE.TXT:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/LICENSE.TXT Mon Feb 23 11:05:56 2004 *************** *** 0 **** --- 1,10 ---- + gawk - Part of the Malloc Benchmark Suite + ------------------------------------------------------------------------------- + All files are licensed under the LLVM license with the following additions: + + These files are licensed to you under the GNU General Public License (version + 1 or later). Redistribution must follow the additional restrictions required + by the GPL. + + Please see individiual files for additional copyright information. + Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/Makefile diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/Makefile:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/Makefile Mon Feb 23 11:05:56 2004 *************** *** 0 **** --- 1,20 ---- + LEVEL = ../../../../../.. + RUN_OPTIONS = -f $(SourceDir)/INPUT/adj.awk type=l linelen=70 indent=5 $(SourceDir)/INPUT/words-large.awk + PROG = gawk + LIBS += -lm + LDFLAGS += -lm + + Source = alloca.c awk.tab.c debug.c field.c main.c msg.c regex.c array.c \ + builtin.c eval.c io.c node.c + + all:: + + awk.tab.c: awk.y + $(YACC) -v awk.y + mv y.tab.c awk.tab.c + + CPPFLAGS += -DBCOPY_MISSING -DSPRINTF_INT -DDOPRNT_MISSING -DGCVT_MISSING -DSTRCASE_MISSING -DSTRTOD_MISSING -DTMPNAM_MISSING + include ../../../Makefile.multisrc + + clean:: + rm -f awk.tab.c Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/alloca.c diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/alloca.c:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/alloca.c Mon Feb 23 11:05:56 2004 *************** *** 0 **** --- 1,205 ---- + /* + alloca -- (mostly) portable public-domain implementation -- D A Gwyn + + last edit: 86/05/30 rms + include config.h, since on VMS it renames some symbols. + Use xmalloc instead of malloc. + + This implementation of the PWB library alloca() function, + which is used to allocate space off the run-time stack so + that it is automatically reclaimed upon procedure exit, + was inspired by discussions with J. Q. Johnson of Cornell. + + It should work under any C implementation that uses an + actual procedure stack (as opposed to a linked list of + frames). There are some preprocessor constants that can + be defined when compiling for your specific system, for + improved efficiency; however, the defaults should be okay. + + The general concept of this implementation is to keep + track of all alloca()-allocated blocks, and reclaim any + that are found to be deeper in the stack than the current + invocation. This heuristic does not reclaim storage as + soon as it becomes invalid, but it will do so eventually. + + As a special case, alloca(0) reclaims storage without + allocating any. It is a good idea to use alloca(0) in + your main control loop, etc. to force garbage collection. + */ + #ifndef lint + static char SCCSid[] = "@(#)alloca.c 1.1"; /* for the "what" utility */ + #endif + + #ifdef emacs + #include "config.h" + #ifdef static + /* actually, only want this if static is defined as "" + -- this is for usg, in which emacs must undefine static + in order to make unexec workable + */ + #ifndef STACK_DIRECTION + you + lose + -- must know STACK_DIRECTION at compile-time + #endif /* STACK_DIRECTION undefined */ + #endif /* static */ + #endif /* emacs */ + + #ifdef X3J11 + typedef void *pointer; /* generic pointer type */ + #else + typedef char *pointer; /* generic pointer type */ + #endif + + #define NULL 0 /* null pointer constant */ + + extern void free(); + extern pointer xmalloc(); + + /* + Define STACK_DIRECTION if you know the direction of stack + growth for your system; otherwise it will be automatically + deduced at run-time. + + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown + */ + + #ifndef STACK_DIRECTION + #define STACK_DIRECTION 0 /* direction unknown */ + #endif + + #if STACK_DIRECTION != 0 + + #define STACK_DIR STACK_DIRECTION /* known at compile-time */ + + #else /* STACK_DIRECTION == 0; need run-time code */ + + static int stack_dir; /* 1 or -1 once known */ + #define STACK_DIR stack_dir + + static void + find_stack_direction (/* void */) + { + static char *addr = NULL; /* address of first + `dummy', once known */ + auto char dummy; /* to get stack address */ + + if (addr == NULL) + { /* initial entry */ + addr = &dummy; + + find_stack_direction (); /* recurse once */ + } + else /* second entry */ + if (&dummy > addr) + stack_dir = 1; /* stack grew upward */ + else + stack_dir = -1; /* stack grew downward */ + } + + #endif /* STACK_DIRECTION == 0 */ + + /* + An "alloca header" is used to: + (a) chain together all alloca()ed blocks; + (b) keep track of stack depth. + + It is very important that sizeof(header) agree with malloc() + alignment chunk size. The following default should work okay. + */ + + #ifndef ALIGN_SIZE + #define ALIGN_SIZE sizeof(double) + #endif + + typedef union hdr + { + char align[ALIGN_SIZE]; /* to force sizeof(header) */ + struct + { + union hdr *next; /* for chaining headers */ + char *deep; /* for stack depth measure */ + } h; + } header; + + /* + alloca( size ) returns a pointer to at least `size' bytes of + storage which will be automatically reclaimed upon exit from + the procedure that called alloca(). Originally, this space + was supposed to be taken from the current stack frame of the + caller, but that method cannot be made to work for some + implementations of C, for example under Gould's UTX/32. + */ + + static header *last_alloca_header = NULL; /* -> last alloca header */ + + pointer + alloca (size) /* returns pointer to storage */ + unsigned size; /* # bytes to allocate */ + { + auto char probe; /* probes stack depth: */ + register char *depth = &probe; + + #if STACK_DIRECTION == 0 + if (STACK_DIR == 0) /* unknown growth direction */ + find_stack_direction (); + #endif + + /* Reclaim garbage, defined as all alloca()ed storage that + was allocated from deeper in the stack than currently. */ + + { + register header *hp; /* traverses linked list */ + + for (hp = last_alloca_header; hp != NULL;) + if (STACK_DIR > 0 && hp->h.deep > depth + || STACK_DIR < 0 && hp->h.deep < depth) + { + register header *np = hp->h.next; + + free ((pointer) hp); /* collect garbage */ + + hp = np; /* -> next header */ + } + else + break; /* rest are not deeper */ + + last_alloca_header = hp; /* -> last valid storage */ + } + + if (size == 0) + return NULL; /* no allocation required */ + + /* Allocate combined header + user data storage. */ + + { + register pointer new = xmalloc (sizeof (header) + size); + /* address of header */ + + ((header *)new)->h.next = last_alloca_header; + ((header *)new)->h.deep = depth; + + last_alloca_header = (header *)new; + + /* User storage begins just after header. */ + + return (pointer)((char *)new + sizeof(header)); + } + } + + pointer xmalloc(n) + unsigned int n; + { + extern pointer malloc(); + pointer cp; + static char mesg[] = "xmalloc: no memory!\n"; + + cp = malloc(n); + if (! cp) { + write (2, mesg, sizeof(mesg) - 1); + exit(1); + } + return cp; + } Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/array.c diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/array.c:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/array.c Mon Feb 23 11:05:56 2004 *************** *** 0 **** --- 1,265 ---- + /* + * array.c - routines for associative arrays. + */ + + /* + * Copyright (C) 1986, 1988, 1989 the Free Software Foundation, Inc. + * + * This file is part of GAWK, the GNU implementation of the + * AWK Progamming Language. + * + * GAWK is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 1, or (at your option) + * any later version. + * + * GAWK is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GAWK; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + #include "gawk.h" + + #ifdef DONTDEF + int primes[] = {31, 61, 127, 257, 509, 1021, 2053, 4099, 8191, 16381}; + #endif + + #define ASSOC_HASHSIZE 127 + #define STIR_BITS(n) ((n) << 5 | (((n) >> 27) & 0x1f)) + #define HASHSTEP(old, c) ((old << 1) + c) + #define MAKE_POS(v) (v & ~0x80000000) /* make number positive */ + + NODE * + concat_exp(tree) + NODE *tree; + { + NODE *r; + char *str; + char *s; + unsigned len; + int offset; + int subseplen; + char *subsep; + + if (tree->type != Node_expression_list) + return force_string(tree_eval(tree)); + r = force_string(tree_eval(tree->lnode)); + if (tree->rnode == NULL) + return r; + subseplen = SUBSEP_node->lnode->stlen; + subsep = SUBSEP_node->lnode->stptr; + len = r->stlen + subseplen + 1; + emalloc(str, char *, len, "concat_exp"); + memcpy(str, r->stptr, r->stlen+1); + s = str + r->stlen; + free_temp(r); + tree = tree->rnode; + while (tree) { + if (subseplen == 1) + *s++ = *subsep; + else { + memcpy(s, subsep, subseplen+1); + s += subseplen; + } + r = force_string(tree_eval(tree->lnode)); + len += r->stlen + subseplen; + offset = s - str; + erealloc(str, char *, len, "concat_exp"); + s = str + offset; + memcpy(s, r->stptr, r->stlen+1); + s += r->stlen; + free_temp(r); + tree = tree->rnode; + } + r = tmp_string(str, s - str); + free(str); + return r; + } + + /* Flush all the values in symbol[] before doing a split() */ + void + assoc_clear(symbol) + NODE *symbol; + { + int i; + NODE *bucket, *next; + + if (symbol->var_array == 0) + return; + for (i = 0; i < ASSOC_HASHSIZE; i++) { + for (bucket = symbol->var_array[i]; bucket; bucket = next) { + next = bucket->ahnext; + deref = bucket->ahname; + do_deref(); + deref = bucket->ahvalue; + do_deref(); + freenode(bucket); + } + symbol->var_array[i] = 0; + } + } + + /* + * calculate the hash function of the string subs, also returning in *typtr + * the type (string or number) + */ + static int + hash_calc(subs) + NODE *subs; + { + register int hash1 = 0, i; + + subs = force_string(subs); + for (i = 0; i < subs->stlen; i++) + hash1 = HASHSTEP(hash1, subs->stptr[i]); + + hash1 = MAKE_POS(STIR_BITS((int) hash1)) % ASSOC_HASHSIZE; + return (hash1); + } + + /* + * locate symbol[subs], given hash of subs and type + */ + static NODE * /* NULL if not found */ + assoc_find(symbol, subs, hash1) + NODE *symbol, *subs; + int hash1; + { + register NODE *bucket; + + for (bucket = symbol->var_array[hash1]; bucket; bucket = bucket->ahnext) { + if (cmp_nodes(bucket->ahname, subs)) + continue; + return bucket; + } + return NULL; + } + + /* + * test whether the array element symbol[subs] exists or not + */ + int + in_array(symbol, subs) + NODE *symbol, *subs; + { + register int hash1; + + if (symbol->type == Node_param_list) + symbol = stack_ptr[symbol->param_cnt]; + if (symbol->var_array == 0) + return 0; + subs = concat_exp(subs); + hash1 = hash_calc(subs); + if (assoc_find(symbol, subs, hash1) == NULL) { + free_temp(subs); + return 0; + } else { + free_temp(subs); + return 1; + } + } + + /* + * SYMBOL is the address of the node (or other pointer) being dereferenced. + * SUBS is a number or string used as the subscript. + * + * Find SYMBOL[SUBS] in the assoc array. Install it with value "" if it + * isn't there. Returns a pointer ala get_lhs to where its value is stored + */ + NODE ** + assoc_lookup(symbol, subs) + NODE *symbol, *subs; + { + register int hash1, i; + register NODE *bucket; + + hash1 = hash_calc(subs); + + if (symbol->var_array == 0) { /* this table really should grow + * dynamically */ + emalloc(symbol->var_array, NODE **, (sizeof(NODE *) * + ASSOC_HASHSIZE), "assoc_lookup"); + for (i = 0; i < ASSOC_HASHSIZE; i++) + symbol->var_array[i] = 0; + symbol->type = Node_var_array; + } else { + bucket = assoc_find(symbol, subs, hash1); + if (bucket != NULL) { + free_temp(subs); + return &(bucket->ahvalue); + } + } + bucket = newnode(Node_ahash); + bucket->ahname = dupnode(subs); + bucket->ahvalue = Nnull_string; + bucket->ahnext = symbol->var_array[hash1]; + symbol->var_array[hash1] = bucket; + return &(bucket->ahvalue); + } + + void + do_delete(symbol, tree) + NODE *symbol, *tree; + { + register int hash1; + register NODE *bucket, *last; + NODE *subs; + + if (symbol->var_array == 0) + return; + subs = concat_exp(tree); + hash1 = hash_calc(subs); + + last = NULL; + for (bucket = symbol->var_array[hash1]; bucket; last = bucket, bucket = bucket->ahnext) + if (cmp_nodes(bucket->ahname, subs) == 0) + break; + free_temp(subs); + if (bucket == NULL) + return; + if (last) + last->ahnext = bucket->ahnext; + else + symbol->var_array[hash1] = bucket->ahnext; + deref = bucket->ahname; + do_deref(); + deref = bucket->ahvalue; + do_deref(); + freenode(bucket); + } + + struct search * + assoc_scan(symbol) + NODE *symbol; + { + struct search *lookat; + + if (!symbol->var_array) + return 0; + emalloc(lookat, struct search *, sizeof(struct search), "assoc_scan"); + lookat->numleft = ASSOC_HASHSIZE; + lookat->arr_ptr = symbol->var_array; + lookat->bucket = symbol->var_array[0]; + return assoc_next(lookat); + } + + struct search * + assoc_next(lookat) + struct search *lookat; + { + for (; lookat->numleft; lookat->numleft--) { + while (lookat->bucket != 0) { + lookat->retval = lookat->bucket->ahname; + lookat->bucket = lookat->bucket->ahnext; + return lookat; + } + lookat->bucket = *++(lookat->arr_ptr); + } + free((char *) lookat); + return 0; + } Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/awk.y diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/awk.y:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/awk.y Mon Feb 23 11:05:56 2004 *************** *** 0 **** --- 1,1694 ---- + /* + * awk.y --- yacc/bison parser + */ + + /* + * Copyright (C) 1986, 1988, 1989 the Free Software Foundation, Inc. + * + * This file is part of GAWK, the GNU implementation of the + * AWK Progamming Language. + * + * GAWK is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 1, or (at your option) + * any later version. + * + * GAWK is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GAWK; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + %{ + #ifdef DEBUG + #define YYDEBUG 12 + #endif + + #include "gawk.h" + + /* + * This line is necessary since the Bison parser skeleton uses bcopy. + * Systems without memcpy should use -DMEMCPY_MISSING, per the Makefile. + * It should not hurt anything if Yacc is being used instead of Bison. + */ + #define bcopy(s,d,n) memcpy((d),(s),(n)) + + extern void msg(char * message, ...); + extern struct re_pattern_buffer *mk_re_parse(); + + NODE *node(); + NODE *lookup(); + NODE *install(); + + static NODE *snode(); + static NODE *mkrangenode(); + static FILE *pathopen(); + static NODE *make_for_loop(); + static NODE *append_right(); + static void func_install(); + static NODE *make_param(); + static int hashf(); + static void pop_params(); + static void pop_var(); + static int yylex (); + static void yyerror(char * msg, ...); + + static int want_regexp; /* lexical scanning kludge */ + static int want_assign; /* lexical scanning kludge */ + static int can_return; /* lexical scanning kludge */ + static int io_allowed = 1; /* lexical scanning kludge */ + static int lineno = 1; /* for error msgs */ + static char *lexptr; /* pointer to next char during parsing */ + static char *lexptr_begin; /* keep track of where we were for error msgs */ + static int curinfile = -1; /* index into sourcefiles[] */ + static int param_counter; + + NODE *variables[HASHSIZE]; + + extern int errcount; + extern NODE *begin_block; + extern NODE *end_block; + %} + + %union { + long lval; + AWKNUM fval; + NODE *nodeval; + NODETYPE nodetypeval; + char *sval; + NODE *(*ptrval)(); + } + + %type function_prologue function_body + %type rexp exp start program rule simp_exp + %type pattern + %type action variable param_list + %type rexpression_list opt_rexpression_list + %type expression_list opt_expression_list + %type statements statement if_statement opt_param_list + %type opt_exp opt_variable regexp + %type input_redir output_redir + %type r_paren comma nls opt_nls print + + %type func_name + %token FUNC_CALL NAME REGEXP + %token ERROR + %token NUMBER YSTRING + %token RELOP APPEND_OP + %token ASSIGNOP MATCHOP NEWLINE CONCAT_OP + %token LEX_BEGIN LEX_END LEX_IF LEX_ELSE LEX_RETURN LEX_DELETE + %token LEX_WHILE LEX_DO LEX_FOR LEX_BREAK LEX_CONTINUE + %token LEX_PRINT LEX_PRINTF LEX_NEXT LEX_EXIT LEX_FUNCTION + %token LEX_GETLINE + %token LEX_IN + %token LEX_AND LEX_OR INCREMENT DECREMENT + %token LEX_BUILTIN LEX_LENGTH + + /* these are just yylval numbers */ + + /* Lowest to highest */ + %right ASSIGNOP + %right '?' ':' + %left LEX_OR + %left LEX_AND + %left LEX_GETLINE + %nonassoc LEX_IN + %left FUNC_CALL LEX_BUILTIN LEX_LENGTH + %nonassoc MATCHOP + %nonassoc RELOP '<' '>' '|' APPEND_OP + %left CONCAT_OP + %left YSTRING NUMBER + %left '+' '-' + %left '*' '/' '%' + %right '!' UNARY + %right '^' + %left INCREMENT DECREMENT + %left '$' + %left '(' ')' + + %% + + start + : opt_nls program opt_nls + { expression_value = $2; } + ; + + program + : rule + { + if ($1 != NULL) + $$ = $1; + else + $$ = NULL; + yyerrok; + } + | program rule + /* add the rule to the tail of list */ + { + if ($2 == NULL) + $$ = $1; + else if ($1 == NULL) + $$ = $2; + else { + if ($1->type != Node_rule_list) + $1 = node($1, Node_rule_list, + (NODE*)NULL); + $$ = append_right ($1, + node($2, Node_rule_list,(NODE *) NULL)); + } + yyerrok; + } + | error { $$ = NULL; } + | program error { $$ = NULL; } + ; + + rule + : LEX_BEGIN { io_allowed = 0; } + action + { + if (begin_block) { + if (begin_block->type != Node_rule_list) + begin_block = node(begin_block, Node_rule_list, + (NODE *)NULL); + append_right (begin_block, node( + node((NODE *)NULL, Node_rule_node, $3), + Node_rule_list, (NODE *)NULL) ); + } else + begin_block = node((NODE *)NULL, Node_rule_node, $3); + $$ = NULL; + io_allowed = 1; + yyerrok; + } + | LEX_END { io_allowed = 0; } + action + { + if (end_block) { + if (end_block->type != Node_rule_list) + end_block = node(end_block, Node_rule_list, + (NODE *)NULL); + append_right (end_block, node( + node((NODE *)NULL, Node_rule_node, $3), + Node_rule_list, (NODE *)NULL)); + } else + end_block = node((NODE *)NULL, Node_rule_node, $3); + $$ = NULL; + io_allowed = 1; + yyerrok; + } + | LEX_BEGIN statement_term + { + msg ("error near line %d: BEGIN blocks must have an action part", lineno); + errcount++; + yyerrok; + } + | LEX_END statement_term + { + msg ("error near line %d: END blocks must have an action part", lineno); + errcount++; + yyerrok; + } + | pattern action + { $$ = node ($1, Node_rule_node, $2); yyerrok; } + | action + { $$ = node ((NODE *)NULL, Node_rule_node, $1); yyerrok; } + | pattern statement_term + { if($1) $$ = node ($1, Node_rule_node, (NODE *)NULL); yyerrok; } + | function_prologue function_body + { + func_install($1, $2); + $$ = NULL; + yyerrok; + } + ; + + func_name + : NAME + { $$ = $1; } + | FUNC_CALL + { $$ = $1; } + ; + + function_prologue + : LEX_FUNCTION + { + param_counter = 0; + } + func_name '(' opt_param_list r_paren opt_nls + { + $$ = append_right(make_param($3), $5); + can_return = 1; + } + ; + + function_body + : l_brace statements r_brace + { + $$ = $2; + can_return = 0; + } + ; + + + pattern + : exp + { $$ = $1; } + | exp comma exp + { $$ = mkrangenode ( node($1, Node_cond_pair, $3) ); } + ; + + regexp + /* + * In this rule, want_regexp tells yylex that the next thing + * is a regexp so it should read up to the closing slash. + */ + : '/' + { ++want_regexp; } + REGEXP '/' + { + want_regexp = 0; + $$ = node((NODE *)NULL,Node_regex,(NODE *)mk_re_parse($3, 0)); + $$ -> re_case = 0; + emalloc ($$ -> re_text, char *, strlen($3)+1, "regexp"); + strcpy ($$ -> re_text, $3); + } + ; + + action + : l_brace r_brace opt_semi + { + /* empty actions are different from missing actions */ + $$ = node ((NODE *) NULL, Node_illegal, (NODE *) NULL); + } + | l_brace statements r_brace opt_semi + { $$ = $2 ; } + ; + + statements + : statement + { $$ = $1; } + | statements statement + { + if ($1 == NULL || $1->type != Node_statement_list) + $1 = node($1, Node_statement_list,(NODE *)NULL); + $$ = append_right($1, + node( $2, Node_statement_list, (NODE *)NULL)); + yyerrok; + } + | error + { $$ = NULL; } + | statements error + { $$ = NULL; } + ; + + statement_term + : nls + { $$ = Node_illegal; } + | semi opt_nls + { $$ = Node_illegal; } + ; + + + statement + : semi opt_nls + { $$ = NULL; } + | l_brace r_brace + { $$ = NULL; } + | l_brace statements r_brace + { $$ = $2; } + | if_statement + { $$ = $1; } + | LEX_WHILE '(' exp r_paren opt_nls statement + { $$ = node ($3, Node_K_while, $6); } + | LEX_DO opt_nls statement LEX_WHILE '(' exp r_paren opt_nls + { $$ = node ($6, Node_K_do, $3); } + | LEX_FOR '(' NAME LEX_IN NAME r_paren opt_nls statement + { + $$ = node ($8, Node_K_arrayfor, make_for_loop(variable($3), + (NODE *)NULL, variable($5))); + } + | LEX_FOR '(' opt_exp semi exp semi opt_exp r_paren opt_nls statement + { + $$ = node($10, Node_K_for, (NODE *)make_for_loop($3, $5, $7)); + } + | LEX_FOR '(' opt_exp semi semi opt_exp r_paren opt_nls statement + { + $$ = node ($9, Node_K_for, + (NODE *)make_for_loop($3, (NODE *)NULL, $6)); + } + | LEX_BREAK statement_term + /* for break, maybe we'll have to remember where to break to */ + { $$ = node ((NODE *)NULL, Node_K_break, (NODE *)NULL); } + | LEX_CONTINUE statement_term + /* similarly */ + { $$ = node ((NODE *)NULL, Node_K_continue, (NODE *)NULL); } + | print '(' expression_list r_paren output_redir statement_term + { $$ = node ($3, $1, $5); } + | print opt_rexpression_list output_redir statement_term + { $$ = node ($2, $1, $3); } + | LEX_NEXT + { if (! io_allowed) yyerror("next used in BEGIN or END action"); } + statement_term + { $$ = node ((NODE *)NULL, Node_K_next, (NODE *)NULL); } + | LEX_EXIT opt_exp statement_term + { $$ = node ($2, Node_K_exit, (NODE *)NULL); } + | LEX_RETURN + { if (! can_return) yyerror("return used outside function context"); } + opt_exp statement_term + { $$ = node ($3, Node_K_return, (NODE *)NULL); } + | LEX_DELETE NAME '[' expression_list ']' statement_term + { $$ = node (variable($2), Node_K_delete, $4); } + | exp statement_term + { $$ = $1; } + ; + + print + : LEX_PRINT + { $$ = $1; } + | LEX_PRINTF + { $$ = $1; } + ; + + if_statement + : LEX_IF '(' exp r_paren opt_nls statement + { + $$ = node($3, Node_K_if, + node($6, Node_if_branches, (NODE *)NULL)); + } + | LEX_IF '(' exp r_paren opt_nls statement + LEX_ELSE opt_nls statement + { $$ = node ($3, Node_K_if, + node ($6, Node_if_branches, $9)); } + ; + + nls + : NEWLINE + { $$ = 0; } + | nls NEWLINE + { $$ = 0; } + ; + + opt_nls + : /* empty */ + { $$ = 0; } + | nls + { $$ = 0; } + ; + + input_redir + : /* empty */ + { $$ = NULL; } + | '<' simp_exp + { $$ = node ($2, Node_redirect_input, (NODE *)NULL); } + ; + + output_redir + : /* empty */ + { $$ = NULL; } + | '>' exp + { $$ = node ($2, Node_redirect_output, (NODE *)NULL); } + | APPEND_OP exp + { $$ = node ($2, Node_redirect_append, (NODE *)NULL); } + | '|' exp + { $$ = node ($2, Node_redirect_pipe, (NODE *)NULL); } + ; + + opt_param_list + : /* empty */ + { $$ = NULL; } + | param_list + { $$ = $1; } + ; + + param_list + : NAME + { $$ = make_param($1); } + | param_list comma NAME + { $$ = append_right($1, make_param($3)); yyerrok; } + | error + { $$ = NULL; } + | param_list error + { $$ = NULL; } + | param_list comma error + { $$ = NULL; } + ; + + /* optional expression, as in for loop */ + opt_exp + : /* empty */ + { $$ = NULL; } + | exp + { $$ = $1; } + ; + + opt_rexpression_list + : /* empty */ + { $$ = NULL; } + | rexpression_list + { $$ = $1; } + ; + + rexpression_list + : rexp + { $$ = node ($1, Node_expression_list, (NODE *)NULL); } + | rexpression_list comma rexp + { + $$ = append_right($1, + node( $3, Node_expression_list, (NODE *)NULL)); + yyerrok; + } + | error + { $$ = NULL; } + | rexpression_list error + { $$ = NULL; } + | rexpression_list error rexp + { $$ = NULL; } + | rexpression_list comma error + { $$ = NULL; } + ; + + opt_expression_list + : /* empty */ + { $$ = NULL; } + | expression_list + { $$ = $1; } + ; + + expression_list + : exp + { $$ = node ($1, Node_expression_list, (NODE *)NULL); } + | expression_list comma exp + { + $$ = append_right($1, + node( $3, Node_expression_list, (NODE *)NULL)); + yyerrok; + } + | error + { $$ = NULL; } + | expression_list error + { $$ = NULL; } + | expression_list error exp + { $$ = NULL; } + | expression_list comma error + { $$ = NULL; } + ; + + /* Expressions, not including the comma operator. */ + exp : variable ASSIGNOP + { want_assign = 0; } + exp + { $$ = node ($1, $2, $4); } + | '(' expression_list r_paren LEX_IN NAME + { $$ = node (variable($5), Node_in_array, $2); } + | exp '|' LEX_GETLINE opt_variable + { + $$ = node ($4, Node_K_getline, + node ($1, Node_redirect_pipein, (NODE *)NULL)); + } + | LEX_GETLINE opt_variable input_redir + { + /* "too painful to do right" */ + /* + if (! io_allowed && $3 == NULL) + yyerror("non-redirected getline illegal inside BEGIN or END action"); + */ + $$ = node ($2, Node_K_getline, $3); + } + | exp LEX_AND exp + { $$ = node ($1, Node_and, $3); } + | exp LEX_OR exp + { $$ = node ($1, Node_or, $3); } + | exp MATCHOP exp + { $$ = node ($1, $2, $3); } + | regexp + { $$ = $1; } + | '!' regexp %prec UNARY + { $$ = node((NODE *) NULL, Node_nomatch, $2); } + | exp LEX_IN NAME + { $$ = node (variable($3), Node_in_array, $1); } + | exp RELOP exp + { $$ = node ($1, $2, $3); } + | exp '<' exp + { $$ = node ($1, Node_less, $3); } + | exp '>' exp + { $$ = node ($1, Node_greater, $3); } + | exp '?' exp ':' exp + { $$ = node($1, Node_cond_exp, node($3, Node_if_branches, $5));} + | simp_exp + { $$ = $1; } + | exp exp %prec CONCAT_OP + { $$ = node ($1, Node_concat, $2); } + ; + + rexp + : variable ASSIGNOP + { want_assign = 0; } + rexp + { $$ = node ($1, $2, $4); } + | rexp LEX_AND rexp + { $$ = node ($1, Node_and, $3); } + | rexp LEX_OR rexp + { $$ = node ($1, Node_or, $3); } + | LEX_GETLINE opt_variable input_redir + { + /* "too painful to do right" */ + /* + if (! io_allowed && $3 == NULL) + yyerror("non-redirected getline illegal inside BEGIN or END action"); + */ + $$ = node ($2, Node_K_getline, $3); + } + | regexp + { $$ = $1; } + | '!' regexp %prec UNARY + { $$ = node((NODE *) NULL, Node_nomatch, $2); } + | rexp MATCHOP rexp + { $$ = node ($1, $2, $3); } + | rexp LEX_IN NAME + { $$ = node (variable($3), Node_in_array, $1); } + | rexp RELOP rexp + { $$ = node ($1, $2, $3); } + | rexp '?' rexp ':' rexp + { $$ = node($1, Node_cond_exp, node($3, Node_if_branches, $5));} + | simp_exp + { $$ = $1; } + | rexp rexp %prec CONCAT_OP + { $$ = node ($1, Node_concat, $2); } + ; + + simp_exp + : '!' simp_exp %prec UNARY + { $$ = node ($2, Node_not,(NODE *) NULL); } + | '(' exp r_paren + { $$ = $2; } + | LEX_BUILTIN '(' opt_expression_list r_paren + { $$ = snode ($3, Node_builtin, $1); } + | LEX_LENGTH '(' opt_expression_list r_paren + { $$ = snode ($3, Node_builtin, $1); } + | LEX_LENGTH + { $$ = snode ((NODE *)NULL, Node_builtin, $1); } + | FUNC_CALL '(' opt_expression_list r_paren + { + $$ = node ($3, Node_func_call, make_string($1, strlen($1))); + } + | INCREMENT variable + { $$ = node ($2, Node_preincrement, (NODE *)NULL); } + | DECREMENT variable + { $$ = node ($2, Node_predecrement, (NODE *)NULL); } + | variable INCREMENT + { $$ = node ($1, Node_postincrement, (NODE *)NULL); } + | variable DECREMENT + { $$ = node ($1, Node_postdecrement, (NODE *)NULL); } + | variable + { $$ = $1; } + | NUMBER + { $$ = $1; } + | YSTRING + { $$ = $1; } + + /* Binary operators in order of decreasing precedence. */ + | simp_exp '^' simp_exp + { $$ = node ($1, Node_exp, $3); } + | simp_exp '*' simp_exp + { $$ = node ($1, Node_times, $3); } + | simp_exp '/' simp_exp + { $$ = node ($1, Node_quotient, $3); } + | simp_exp '%' simp_exp + { $$ = node ($1, Node_mod, $3); } + | simp_exp '+' simp_exp + { $$ = node ($1, Node_plus, $3); } + | simp_exp '-' simp_exp + { $$ = node ($1, Node_minus, $3); } + | '-' simp_exp %prec UNARY + { $$ = node ($2, Node_unary_minus, (NODE *)NULL); } + | '+' simp_exp %prec UNARY + { $$ = $2; } + ; + + opt_variable + : /* empty */ + { $$ = NULL; } + | variable + { $$ = $1; } + ; + + variable + : NAME + { want_assign = 1; $$ = variable ($1); } + | NAME '[' expression_list ']' + { want_assign = 1; $$ = node (variable($1), Node_subscript, $3); } + | '$' simp_exp + { want_assign = 1; $$ = node ($2, Node_field_spec, (NODE *)NULL); } + ; + + l_brace + : '{' opt_nls + ; + + r_brace + : '}' opt_nls { yyerrok; } + ; + + r_paren + : ')' { $$ = Node_illegal; yyerrok; } + ; + + opt_semi + : /* empty */ + | semi + ; + + semi + : ';' { yyerrok; } + ; + + comma : ',' opt_nls { $$ = Node_illegal; yyerrok; } + ; + + %% + + struct token { + char *operator; /* text to match */ + NODETYPE value; /* node type */ + int class; /* lexical class */ + short nostrict; /* ignore if in strict compatibility mode */ + NODE *(*ptr) (); /* function that implements this keyword */ + }; + + extern NODE + *do_exp(), *do_getline(), *do_index(), *do_length(), + *do_sqrt(), *do_log(), *do_sprintf(), *do_substr(), + *do_split(), *do_system(), *do_int(), *do_close(), + *do_atan2(), *do_sin(), *do_cos(), *do_rand(), + *do_srand(), *do_match(), *do_tolower(), *do_toupper(), + *do_sub(), *do_gsub(); + + /* Special functions for debugging */ + #ifdef DEBUG + NODE *do_prvars(), *do_bp(); + #endif + + /* Tokentab is sorted ascii ascending order, so it can be binary searched. */ + + static struct token tokentab[] = { + { "BEGIN", Node_illegal, LEX_BEGIN, 0, 0 }, + { "END", Node_illegal, LEX_END, 0, 0 }, + { "atan2", Node_builtin, LEX_BUILTIN, 0, do_atan2 }, + #ifdef DEBUG + { "bp", Node_builtin, LEX_BUILTIN, 0, do_bp }, + #endif + { "break", Node_K_break, LEX_BREAK, 0, 0 }, + { "close", Node_builtin, LEX_BUILTIN, 0, do_close }, + { "continue", Node_K_continue, LEX_CONTINUE, 0, 0 }, + { "cos", Node_builtin, LEX_BUILTIN, 0, do_cos }, + { "delete", Node_K_delete, LEX_DELETE, 0, 0 }, + { "do", Node_K_do, LEX_DO, 0, 0 }, + { "else", Node_illegal, LEX_ELSE, 0, 0 }, + { "exit", Node_K_exit, LEX_EXIT, 0, 0 }, + { "exp", Node_builtin, LEX_BUILTIN, 0, do_exp }, + { "for", Node_K_for, LEX_FOR, 0, 0 }, + { "func", Node_K_function, LEX_FUNCTION, 0, 0 }, + { "function", Node_K_function, LEX_FUNCTION, 0, 0 }, + { "getline", Node_K_getline, LEX_GETLINE, 0, 0 }, + { "gsub", Node_builtin, LEX_BUILTIN, 0, do_gsub }, + { "if", Node_K_if, LEX_IF, 0, 0 }, + { "in", Node_illegal, LEX_IN, 0, 0 }, + { "index", Node_builtin, LEX_BUILTIN, 0, do_index }, + { "int", Node_builtin, LEX_BUILTIN, 0, do_int }, + { "length", Node_builtin, LEX_LENGTH, 0, do_length }, + { "log", Node_builtin, LEX_BUILTIN, 0, do_log }, + { "match", Node_builtin, LEX_BUILTIN, 0, do_match }, + { "next", Node_K_next, LEX_NEXT, 0, 0 }, + { "print", Node_K_print, LEX_PRINT, 0, 0 }, + { "printf", Node_K_printf, LEX_PRINTF, 0, 0 }, + #ifdef DEBUG + { "prvars", Node_builtin, LEX_BUILTIN, 0, do_prvars }, + #endif + { "rand", Node_builtin, LEX_BUILTIN, 0, do_rand }, + { "return", Node_K_return, LEX_RETURN, 0, 0 }, + { "sin", Node_builtin, LEX_BUILTIN, 0, do_sin }, + { "split", Node_builtin, LEX_BUILTIN, 0, do_split }, + { "sprintf", Node_builtin, LEX_BUILTIN, 0, do_sprintf }, + { "sqrt", Node_builtin, LEX_BUILTIN, 0, do_sqrt }, + { "srand", Node_builtin, LEX_BUILTIN, 0, do_srand }, + { "sub", Node_builtin, LEX_BUILTIN, 0, do_sub }, + { "substr", Node_builtin, LEX_BUILTIN, 0, do_substr }, + { "system", Node_builtin, LEX_BUILTIN, 0, do_system }, + { "tolower", Node_builtin, LEX_BUILTIN, 0, do_tolower }, + { "toupper", Node_builtin, LEX_BUILTIN, 0, do_toupper }, + { "while", Node_K_while, LEX_WHILE, 0, 0 }, + }; + + static char *token_start; + + /* VARARGS0 */ + static void + yyerror(char * the_msg, ...) + { + va_list args; + char *mesg; + register char *ptr, *beg; + char *scan; + + errcount++; + /* Find the current line in the input file */ + if (! lexptr) { + beg = "(END OF FILE)"; + ptr = beg + 13; + } else { + if (*lexptr == '\n' && lexptr != lexptr_begin) + --lexptr; + for (beg = lexptr; beg != lexptr_begin && *beg != '\n'; --beg) + ; + /* NL isn't guaranteed */ + for (ptr = lexptr; *ptr && *ptr != '\n'; ptr++) + ; + if (beg != lexptr_begin) + beg++; + } + msg("syntax error near line %d:\n%.*s", lineno, ptr - beg, beg); + scan = beg; + while (scan < token_start) + if (*scan++ == '\t') + putc('\t', stderr); + else + putc(' ', stderr); + putc('^', stderr); + putc(' ', stderr); + va_start(args, the_msg); + mesg = va_arg(args, char *); + vfprintf(stderr, mesg, args); + va_end(args); + putc('\n', stderr); + exit(1); + } + + /* + * Parse a C escape sequence. STRING_PTR points to a variable containing a + * pointer to the string to parse. That pointer is updated past the + * characters we use. The value of the escape sequence is returned. + * + * A negative value means the sequence \ newline was seen, which is supposed to + * be equivalent to nothing at all. + * + * If \ is followed by a null character, we return a negative value and leave + * the string pointer pointing at the null character. + * + * If \ is followed by 000, we return 0 and leave the string pointer after the + * zeros. A value of 0 does not mean end of string. + */ + + int + parse_escape(string_ptr) + char **string_ptr; + { + register int c = *(*string_ptr)++; + register int i; + register int count; + + switch (c) { + case 'a': + return BELL; + case 'b': + return '\b'; + case 'f': + return '\f'; + case 'n': + return '\n'; + case 'r': + return '\r'; + case 't': + return '\t'; + case 'v': + return '\v'; + case '\n': + return -2; + case 0: + (*string_ptr)--; + return -1; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + i = c - '0'; + count = 0; + while (++count < 3) { + if ((c = *(*string_ptr)++) >= '0' && c <= '7') { + i *= 8; + i += c - '0'; + } else { + (*string_ptr)--; + break; + } + } + return i; + case 'x': + i = 0; + while (1) { + if (isxdigit((c = *(*string_ptr)++))) { + if (isdigit(c)) + i += c - '0'; + else if (isupper(c)) + i += c - 'A' + 10; + else + i += c - 'a' + 10; + } else { + (*string_ptr)--; + break; + } + } + return i; + default: + return c; + } + } + + /* + * Read the input and turn it into tokens. Input is now read from a file + * instead of from malloc'ed memory. The main program takes a program + * passed as a command line argument and writes it to a temp file. Otherwise + * the file name is made available in an external variable. + */ + + static int + yylex() + { + register int c; + register int namelen; + register char *tokstart; + char *tokkey; + static did_newline = 0; /* the grammar insists that actions end + * with newlines. This was easier than + * hacking the grammar. */ + int seen_e = 0; /* These are for numbers */ + int seen_point = 0; + int esc_seen; + extern char **sourcefile; + extern int tempsource, numfiles; + static int file_opened = 0; + static FILE *fin; + static char cbuf[BUFSIZ]; + int low, mid, high; + #ifdef DEBUG + extern int debugging; + #endif + + if (! file_opened) { + file_opened = 1; + #ifdef DEBUG + if (debugging) { + int i; + + for (i = 0; i <= numfiles; i++) + fprintf (stderr, "sourcefile[%d] = %s\n", i, + sourcefile[i]); + } + #endif + nextfile: + if ((fin = pathopen (sourcefile[++curinfile])) == NULL) + fatal("cannot open `%s' for reading (%s)", + sourcefile[curinfile], + strerror(errno)); + *(lexptr = cbuf) = '\0'; + /* + * immediately unlink the tempfile so that it will + * go away cleanly if we bomb. + */ + if (tempsource && curinfile == 0) + (void) unlink (sourcefile[curinfile]); + } + + retry: + if (! *lexptr) + if (fgets (cbuf, sizeof cbuf, fin) == NULL) { + if (fin != NULL) + fclose (fin); /* be neat and clean */ + if (curinfile < numfiles) + goto nextfile; + return 0; + } else + lexptr = lexptr_begin = cbuf; + + if (want_regexp) { + int in_brack = 0; + + want_regexp = 0; + token_start = tokstart = lexptr; + while (c = *lexptr++) { + switch (c) { + case '[': + in_brack = 1; + break; + case ']': + in_brack = 0; + break; + case '\\': + if (*lexptr++ == '\0') { + yyerror("unterminated regexp ends with \\"); + return ERROR; + } else if (lexptr[-1] == '\n') + goto retry; + break; + case '/': /* end of the regexp */ + if (in_brack) + break; + + lexptr--; + yylval.sval = tokstart; + return REGEXP; + case '\n': + lineno++; + case '\0': + lexptr--; /* so error messages work */ + yyerror("unterminated regexp"); + return ERROR; + } + } + } + + if (*lexptr == '\n') { + lexptr++; + lineno++; + return NEWLINE; + } + + while (*lexptr == ' ' || *lexptr == '\t') + lexptr++; + + token_start = tokstart = lexptr; + + switch (c = *lexptr++) { + case 0: + return 0; + + case '\n': + lineno++; + return NEWLINE; + + case '#': /* it's a comment */ + while (*lexptr != '\n' && *lexptr != '\0') + lexptr++; + goto retry; + + case '\\': + if (*lexptr == '\n') { + lineno++; + lexptr++; + goto retry; + } else + break; + case ')': + case ']': + case '(': + case '[': + case '$': + case ';': + case ':': + case '?': + + /* + * set node type to ILLEGAL because the action should set it + * to the right thing + */ + yylval.nodetypeval = Node_illegal; + return c; + + case '{': + case ',': + yylval.nodetypeval = Node_illegal; + return c; + + case '*': + if (*lexptr == '=') { + yylval.nodetypeval = Node_assign_times; + lexptr++; + return ASSIGNOP; + } else if (*lexptr == '*') { /* make ** and **= aliases + * for ^ and ^= */ + if (lexptr[1] == '=') { + yylval.nodetypeval = Node_assign_exp; + lexptr += 2; + return ASSIGNOP; + } else { + yylval.nodetypeval = Node_illegal; + lexptr++; + return '^'; + } + } + yylval.nodetypeval = Node_illegal; + return c; + + case '/': + if (want_assign && *lexptr == '=') { + yylval.nodetypeval = Node_assign_quotient; + lexptr++; + return ASSIGNOP; + } + yylval.nodetypeval = Node_illegal; + return c; + + case '%': + if (*lexptr == '=') { + yylval.nodetypeval = Node_assign_mod; + lexptr++; + return ASSIGNOP; + } + yylval.nodetypeval = Node_illegal; + return c; + + case '^': + if (*lexptr == '=') { + yylval.nodetypeval = Node_assign_exp; + lexptr++; + return ASSIGNOP; + } + yylval.nodetypeval = Node_illegal; + return c; + + case '+': + if (*lexptr == '=') { + yylval.nodetypeval = Node_assign_plus; + lexptr++; + return ASSIGNOP; + } + if (*lexptr == '+') { + yylval.nodetypeval = Node_illegal; + lexptr++; + return INCREMENT; + } + yylval.nodetypeval = Node_illegal; + return c; + + case '!': + if (*lexptr == '=') { + yylval.nodetypeval = Node_notequal; + lexptr++; + return RELOP; + } + if (*lexptr == '~') { + yylval.nodetypeval = Node_nomatch; + lexptr++; + return MATCHOP; + } + yylval.nodetypeval = Node_illegal; + return c; + + case '<': + if (*lexptr == '=') { + yylval.nodetypeval = Node_leq; + lexptr++; + return RELOP; + } + yylval.nodetypeval = Node_less; + return c; + + case '=': + if (*lexptr == '=') { + yylval.nodetypeval = Node_equal; + lexptr++; + return RELOP; + } + yylval.nodetypeval = Node_assign; + return ASSIGNOP; + + case '>': + if (*lexptr == '=') { + yylval.nodetypeval = Node_geq; + lexptr++; + return RELOP; + } else if (*lexptr == '>') { + yylval.nodetypeval = Node_redirect_append; + lexptr++; + return APPEND_OP; + } + yylval.nodetypeval = Node_greater; + return c; + + case '~': + yylval.nodetypeval = Node_match; + return MATCHOP; + + case '}': + /* + * Added did newline stuff. Easier than + * hacking the grammar + */ + if (did_newline) { + did_newline = 0; + return c; + } + did_newline++; + --lexptr; + return NEWLINE; + + case '"': + esc_seen = 0; + while (*lexptr != '\0') { + switch (*lexptr++) { + case '\\': + esc_seen = 1; + if (*lexptr == '\n') + yyerror("newline in string"); + if (*lexptr++ != '\0') + break; + /* fall through */ + case '\n': + lexptr--; + yyerror("unterminated string"); + return ERROR; + case '"': + yylval.nodeval = make_str_node(tokstart + 1, + lexptr-tokstart-2, esc_seen); + yylval.nodeval->flags |= PERM; + return YSTRING; + } + } + return ERROR; + + case '-': + if (*lexptr == '=') { + yylval.nodetypeval = Node_assign_minus; + lexptr++; + return ASSIGNOP; + } + if (*lexptr == '-') { + yylval.nodetypeval = Node_illegal; + lexptr++; + return DECREMENT; + } + yylval.nodetypeval = Node_illegal; + return c; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '.': + /* It's a number */ + for (namelen = 0; (c = tokstart[namelen]) != '\0'; namelen++) { + switch (c) { + case '.': + if (seen_point) + goto got_number; + ++seen_point; + break; + case 'e': + case 'E': + if (seen_e) + goto got_number; + ++seen_e; + if (tokstart[namelen + 1] == '-' || + tokstart[namelen + 1] == '+') + namelen++; + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + break; + default: + goto got_number; + } + } + + got_number: + lexptr = tokstart + namelen; + /* + yylval.nodeval = make_string(tokstart, namelen); + (void) force_number(yylval.nodeval); + */ + yylval.nodeval = make_number(atof(tokstart)); + yylval.nodeval->flags |= PERM; + return NUMBER; + + case '&': + if (*lexptr == '&') { + yylval.nodetypeval = Node_and; + while (c = *++lexptr) { + if (c == '#') + while ((c = *++lexptr) != '\n' + && c != '\0') + ; + if (c == '\n') + lineno++; + else if (! isspace(c)) + break; + } + return LEX_AND; + } + return ERROR; + + case '|': + if (*lexptr == '|') { + yylval.nodetypeval = Node_or; + while (c = *++lexptr) { + if (c == '#') + while ((c = *++lexptr) != '\n' + && c != '\0') + ; + if (c == '\n') + lineno++; + else if (! isspace(c)) + break; + } + return LEX_OR; + } + yylval.nodetypeval = Node_illegal; + return c; + } + + if (c != '_' && ! isalpha(c)) { + yyerror("Invalid char '%c' in expression\n", c); + return ERROR; + } + + /* it's some type of name-type-thing. Find its length */ + for (namelen = 0; is_identchar(tokstart[namelen]); namelen++) + /* null */ ; + emalloc(tokkey, char *, namelen+1, "yylex"); + memcpy(tokkey, tokstart, namelen); + tokkey[namelen] = '\0'; + + /* See if it is a special token. */ + low = 0; + high = (sizeof (tokentab) / sizeof (tokentab[0])) - 1; + while (low <= high) { + int i, c; + + mid = (low + high) / 2; + c = *tokstart - tokentab[mid].operator[0]; + i = c ? c : strcmp (tokkey, tokentab[mid].operator); + + if (i < 0) { /* token < mid */ + high = mid - 1; + } else if (i > 0) { /* token > mid */ + low = mid + 1; + } else { + lexptr = tokstart + namelen; + if (strict && tokentab[mid].nostrict) + break; + if (tokentab[mid].class == LEX_BUILTIN + || tokentab[mid].class == LEX_LENGTH) + yylval.ptrval = tokentab[mid].ptr; + else + yylval.nodetypeval = tokentab[mid].value; + return tokentab[mid].class; + } + } + + /* It's a name. See how long it is. */ + yylval.sval = tokkey; + lexptr = tokstart + namelen; + if (*lexptr == '(') + return FUNC_CALL; + else + return NAME; + } + + #ifndef DEFPATH + #ifdef MSDOS + #define DEFPATH "." + #define ENVSEP ';' + #else + #define DEFPATH ".:/usr/lib/awk:/usr/local/lib/awk" + #define ENVSEP ':' + #endif + #endif + + static FILE * + pathopen (file) + char *file; + { + static char *savepath = DEFPATH; + static int first = 1; + char *awkpath, *cp; + char trypath[BUFSIZ]; + FILE *fp; + #ifdef DEBUG + extern int debugging; + #endif + int fd; + + if (strcmp (file, "-") == 0) + return (stdin); + + if (strict) + return (fopen (file, "r")); + + if (first) { + first = 0; + if ((awkpath = getenv ("AWKPATH")) != NULL && *awkpath) + savepath = awkpath; /* used for restarting */ + } + awkpath = savepath; + + /* some kind of path name, no search */ + #ifndef MSDOS + if (strchr (file, '/') != NULL) + #else + if (strchr (file, '/') != NULL || strchr (file, '\\') != NULL + || strchr (file, ':') != NULL) + #endif + return ( (fd = devopen (file, "r")) >= 0 ? + fdopen(fd, "r") : + NULL); + + do { + trypath[0] = '\0'; + /* this should take into account limits on size of trypath */ + for (cp = trypath; *awkpath && *awkpath != ENVSEP; ) + *cp++ = *awkpath++; + + if (cp != trypath) { /* nun-null element in path */ + *cp++ = '/'; + strcpy (cp, file); + } else + strcpy (trypath, file); + #ifdef DEBUG + if (debugging) + fprintf(stderr, "trying: %s\n", trypath); + #endif + if ((fd = devopen (trypath, "r")) >= 0 + && (fp = fdopen(fd, "r")) != NULL) + return (fp); + + /* no luck, keep going */ + if(*awkpath == ENVSEP && awkpath[1] != '\0') + awkpath++; /* skip colon */ + } while (*awkpath); + #ifdef MSDOS + /* + * Under DOS (and probably elsewhere) you might have one of the awk + * paths defined, WITHOUT the current working directory in it. + * Therefore you should try to open the file in the current directory. + */ + return ( (fd = devopen(file, "r")) >= 0 ? fdopen(fd, "r") : NULL); + #else + return (NULL); + #endif + } + + static NODE * + node_common(op) + NODETYPE op; + { + register NODE *r; + extern int numfiles; + extern int tempsource; + extern char **sourcefile; + + r = newnode(op); + r->source_line = lineno; + if (numfiles > -1 && ! tempsource) + r->source_file = sourcefile[curinfile]; + else + r->source_file = NULL; + return r; + } + + /* + * This allocates a node with defined lnode and rnode. + * This should only be used by yyparse+co while reading in the program + */ + NODE * + node(left, op, right) + NODE *left, *right; + NODETYPE op; + { + register NODE *r; + + r = node_common(op); + r->lnode = left; + r->rnode = right; + return r; + } + + /* + * This allocates a node with defined subnode and proc + * Otherwise like node() + */ + static NODE * + snode(subn, op, procp) + NODETYPE op; + NODE *(*procp) (); + NODE *subn; + { + register NODE *r; + + r = node_common(op); + r->subnode = subn; + r->proc = procp; + return r; + } + + /* + * This allocates a Node_line_range node with defined condpair and + * zeroes the trigger word to avoid the temptation of assuming that calling + * 'node( foo, Node_line_range, 0)' will properly initialize 'triggered'. + */ + /* Otherwise like node() */ + static NODE * + mkrangenode(cpair) + NODE *cpair; + { + register NODE *r; + + r = newnode(Node_line_range); + r->condpair = cpair; + r->triggered = 0; + return r; + } + + /* Build a for loop */ + static NODE * + make_for_loop(init, cond, incr) + NODE *init, *cond, *incr; + { + register FOR_LOOP_HEADER *r; + NODE *n; + + emalloc(r, FOR_LOOP_HEADER *, sizeof(FOR_LOOP_HEADER), "make_for_loop"); + n = newnode(Node_illegal); + r->init = init; + r->cond = cond; + r->incr = incr; + n->sub.nodep.r.hd = r; + return n; + } + + /* + * Install a name in the hash table specified, even if it is already there. + * Name stops with first non alphanumeric. Caller must check against + * redefinition if that is desired. + */ + NODE * + install(table, name, value) + NODE **table; + char *name; + NODE *value; + { + register NODE *hp; + register int len, bucket; + register char *p; + + len = 0; + p = name; + while (is_identchar(*p)) + p++; + len = p - name; + + hp = newnode(Node_hashnode); + bucket = hashf(name, len, HASHSIZE); + hp->hnext = table[bucket]; + table[bucket] = hp; + hp->hlength = len; + hp->hvalue = value; + emalloc(hp->hname, char *, len + 1, "install"); + memcpy(hp->hname, name, len); + hp->hname[len] = '\0'; + return hp->hvalue; + } + + /* + * find the most recent hash node for name name (ending with first + * non-identifier char) installed by install + */ + NODE * + lookup(table, name) + NODE **table; + char *name; + { + register char *bp; + register NODE *bucket; + register int len; + + for (bp = name; is_identchar(*bp); bp++) + ; + len = bp - name; + bucket = table[hashf(name, len, HASHSIZE)]; + while (bucket) { + if (bucket->hlength == len && STREQN(bucket->hname, name, len)) + return bucket->hvalue; + bucket = bucket->hnext; + } + return NULL; + } + + #define HASHSTEP(old, c) ((old << 1) + c) + #define MAKE_POS(v) (v & ~0x80000000) /* make number positive */ + + /* + * return hash function on name. + */ + static int + hashf(name, len, hashsize) + register char *name; + register int len; + int hashsize; + { + register int r = 0; + + while (len--) + r = HASHSTEP(r, *name++); + + r = MAKE_POS(r) % hashsize; + return r; + } + + /* + * Add new to the rightmost branch of LIST. This uses n^2 time, so we make + * a simple attempt at optimizing it. + */ + static NODE * + append_right(list, new) + NODE *list, *new; + + { + register NODE *oldlist; + static NODE *savefront = NULL, *savetail = NULL; + + oldlist = list; + if (savefront == oldlist) { + savetail = savetail->rnode = new; + return oldlist; + } else + savefront = oldlist; + while (list->rnode != NULL) + list = list->rnode; + savetail = list->rnode = new; + return oldlist; + } + + /* + * check if name is already installed; if so, it had better have Null value, + * in which case def is added as the value. Otherwise, install name with def + * as value. + */ + static void + func_install(params, def) + NODE *params; + NODE *def; + { + NODE *r; + + pop_params(params->rnode); + pop_var(params, 0); + r = lookup(variables, params->param); + if (r != NULL) { + fatal("function name `%s' previously defined", params->param); + } else + (void) install(variables, params->param, + node(params, Node_func, def)); + } + + static void + pop_var(np, freeit) + NODE *np; + int freeit; + { + register char *bp; + register NODE *bucket, **save; + register int len; + char *name; + + name = np->param; + for (bp = name; is_identchar(*bp); bp++) + ; + len = bp - name; + save = &(variables[hashf(name, len, HASHSIZE)]); + bucket = *save; + while (bucket != NULL) { + NODE *next = bucket->hnext; + + /* for (bucket = *save; bucket; bucket = bucket->hnext) { + */ + + if (len == bucket->hlength && STREQN(bucket->hname, name, len)) { + *save = bucket->hnext; + save = &(bucket->hnext); + free(bucket->hname); + freenode(bucket); + if (freeit) + free(np->param); + return; + } else { + save = &(bucket->hnext); + } + bucket = next; + } + } + + static void + pop_params(params) + NODE *params; + { + register NODE *np; + + for (np = params; np != NULL; np = np->rnode) + pop_var(np, 1); + } + + static NODE * + make_param(name) + char *name; + { + NODE *r; + + r = newnode(Node_param_list); + r->param = name; + r->rnode = NULL; + r->param_cnt = param_counter++; + return (install(variables, name, r)); + } + + /* Name points to a variable name. Make sure its in the symbol table */ + NODE * + variable(name) + char *name; + { + register NODE *r; + + if ((r = lookup(variables, name)) == NULL) + r = install(variables, name, + node(Nnull_string, Node_var, (NODE *) NULL)); + return r; + } Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/builtin.c diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/builtin.c:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/builtin.c Mon Feb 23 11:05:56 2004 *************** *** 0 **** --- 1,1055 ---- + /* + * builtin.c - Builtin functions and various utility procedures + */ + + /* + * Copyright (C) 1986, 1988, 1989 the Free Software Foundation, Inc. + * + * This file is part of GAWK, the GNU implementation of the + * AWK Progamming Language. + * + * GAWK is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 1, or (at your option) + * any later version. + * + * GAWK is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GAWK; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + #include "gawk.h" + + extern void srandom(); + extern char *initstate(); + extern char *setstate(); + extern long random(); + + extern NODE **fields_arr; + + static void get_one(); + static void get_two(); + static int get_three(); + + /* Builtin functions */ + NODE * + do_exp(tree) + NODE *tree; + { + NODE *tmp; + double d, res; + double exp(); + + get_one(tree, &tmp); + d = force_number(tmp); + free_temp(tmp); + errno = 0; + res = exp(d); + if (errno == ERANGE) + warning("exp argument %g is out of range", d); + return tmp_number((AWKNUM) res); + } + + NODE * + do_index(tree) + NODE *tree; + { + NODE *s1, *s2; + register char *p1, *p2; + register int l1, l2; + long ret; + + + get_two(tree, &s1, &s2); + force_string(s1); + force_string(s2); + p1 = s1->stptr; + p2 = s2->stptr; + l1 = s1->stlen; + l2 = s2->stlen; + ret = 0; + if (! strict && IGNORECASE_node->var_value->numbr != 0.0) { + while (l1) { + if (casetable[*p1] == casetable[*p2] + && strncasecmp(p1, p2, l2) == 0) { + ret = 1 + s1->stlen - l1; + break; + } + l1--; + p1++; + } + } else { + while (l1) { + if (STREQN(p1, p2, l2)) { + ret = 1 + s1->stlen - l1; + break; + } + l1--; + p1++; + } + } + free_temp(s1); + free_temp(s2); + return tmp_number((AWKNUM) ret); + } + + NODE * + do_int(tree) + NODE *tree; + { + NODE *tmp; + double floor(); + double d; + + get_one(tree, &tmp); + d = floor((double)force_number(tmp)); + free_temp(tmp); + return tmp_number((AWKNUM) d); + } + + NODE * + do_length(tree) + NODE *tree; + { + NODE *tmp; + int len; + + get_one(tree, &tmp); + len = force_string(tmp)->stlen; + free_temp(tmp); + return tmp_number((AWKNUM) len); + } + + NODE * + do_log(tree) + NODE *tree; + { + NODE *tmp; + double log(); + double d, arg; + + get_one(tree, &tmp); + arg = (double) force_number(tmp); + if (arg < 0.0) + warning("log called with negative argument %g", arg); + d = log(arg); + free_temp(tmp); + return tmp_number((AWKNUM) d); + } + + /* + * Note that the output buffer cannot be static because sprintf may get + * called recursively by force_string. Hence the wasteful alloca calls + */ + + /* %e and %f formats are not properly implemented. Someone should fix them */ + NODE * + do_sprintf(tree) + NODE *tree; + { + #define bchunk(s,l) if(l) {\ + while((l)>ofre) {\ + char *tmp;\ + tmp=(char *)alloca(osiz*2);\ + memcpy(tmp,obuf,olen);\ + obuf=tmp;\ + ofre+=osiz;\ + osiz*=2;\ + }\ + memcpy(obuf+olen,s,(l));\ + olen+=(l);\ + ofre-=(l);\ + } + + /* Is there space for something L big in the buffer? */ + #define chksize(l) if((l)>ofre) {\ + char *tmp;\ + tmp=(char *)alloca(osiz*2);\ + memcpy(tmp,obuf,olen);\ + obuf=tmp;\ + ofre+=osiz;\ + osiz*=2;\ + } + + /* + * Get the next arg to be formatted. If we've run out of args, + * return "" (Null string) + */ + #define parse_next_arg() {\ + if(!carg) arg= Nnull_string;\ + else {\ + get_one(carg,&arg);\ + carg=carg->rnode;\ + }\ + } + + char *obuf; + int osiz, ofre, olen; + static char chbuf[] = "0123456789abcdef"; + static char sp[] = " "; + char *s0, *s1; + int n0; + NODE *sfmt, *arg; + register NODE *carg; + long fw, prec, lj, alt, big; + long *cur; + long val; + #ifdef sun386 /* Can't cast unsigned (int/long) from ptr->value */ + long tmp_uval; /* on 386i 4.0.1 C compiler -- it just hangs */ + #endif + unsigned long uval; + int sgn; + int base; + char cpbuf[30]; /* if we have numbers bigger than 30 */ + char *cend = &cpbuf[30];/* chars, we lose, but seems unlikely */ + char *cp; + char *fill; + double tmpval; + char *pr_str; + int ucasehex = 0; + extern char *gcvt(); + + + obuf = (char *) alloca(120); + osiz = 120; + ofre = osiz; + olen = 0; + get_one(tree, &sfmt); + sfmt = force_string(sfmt); + carg = tree->rnode; + for (s0 = s1 = sfmt->stptr, n0 = sfmt->stlen; n0-- > 0;) { + if (*s1 != '%') { + s1++; + continue; + } + bchunk(s0, s1 - s0); + s0 = s1; + cur = &fw; + fw = 0; + prec = 0; + lj = alt = big = 0; + fill = sp; + cp = cend; + s1++; + + retry: + --n0; + switch (*s1++) { + case '%': + bchunk("%", 1); + s0 = s1; + break; + + case '0': + if (fill != sp || lj) + goto lose; + if (cur == &fw) + fill = "0"; /* FALL through */ + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (cur == 0) + goto lose; + *cur = s1[-1] - '0'; + while (n0 > 0 && *s1 >= '0' && *s1 <= '9') { + --n0; + *cur = *cur * 10 + *s1++ - '0'; + } + goto retry; + #ifdef not_yet + case ' ': /* print ' ' or '-' */ + case '+': /* print '+' or '-' */ + #endif + case '-': + if (lj || fill != sp) + goto lose; + lj++; + goto retry; + case '.': + if (cur != &fw) + goto lose; + cur = ≺ + goto retry; + case '#': + if (alt) + goto lose; + alt++; + goto retry; + case 'l': + if (big) + goto lose; + big++; + goto retry; + case 'c': + parse_next_arg(); + if (arg->flags & NUMERIC) { + #ifdef sun386 + tmp_uval = arg->numbr; + uval= (unsigned long) tmp_uval; + #else + uval = (unsigned long) arg->numbr; + #endif + cpbuf[0] = uval; + prec = 1; + pr_str = cpbuf; + goto dopr_string; + } + if (! prec) + prec = 1; + else if (prec > arg->stlen) + prec = arg->stlen; + pr_str = arg->stptr; + goto dopr_string; + case 's': + parse_next_arg(); + arg = force_string(arg); + if (!prec || prec > arg->stlen) + prec = arg->stlen; + pr_str = arg->stptr; + + dopr_string: + if (fw > prec && !lj) { + while (fw > prec) { + bchunk(sp, 1); + fw--; + } + } + bchunk(pr_str, (int) prec); + if (fw > prec) { + while (fw > prec) { + bchunk(sp, 1); + fw--; + } + } + s0 = s1; + free_temp(arg); + break; + case 'd': + case 'i': + parse_next_arg(); + val = (long) force_number(arg); + free_temp(arg); + if (val < 0) { + sgn = 1; + val = -val; + } else + sgn = 0; + do { + *--cp = '0' + val % 10; + val /= 10; + } while (val); + if (sgn) + *--cp = '-'; + if (prec > fw) + fw = prec; + prec = cend - cp; + if (fw > prec && !lj) { + if (fill != sp && *cp == '-') { + bchunk(cp, 1); + cp++; + prec--; + fw--; + } + while (fw > prec) { + bchunk(fill, 1); + fw--; + } + } + bchunk(cp, (int) prec); + if (fw > prec) { + while (fw > prec) { + bchunk(fill, 1); + fw--; + } + } + s0 = s1; + break; + case 'u': + base = 10; + goto pr_unsigned; + case 'o': + base = 8; + goto pr_unsigned; + case 'X': + ucasehex = 1; + case 'x': + base = 16; + goto pr_unsigned; + pr_unsigned: + parse_next_arg(); + uval = (unsigned long) force_number(arg); + free_temp(arg); + do { + *--cp = chbuf[uval % base]; + if (ucasehex && isalpha(*cp)) + *cp = toupper(*cp); + uval /= base; + } while (uval); + if (alt && (base == 8 || base == 16)) { + if (base == 16) { + if (ucasehex) + *--cp = 'X'; + else + *--cp = 'x'; + } + *--cp = '0'; + } + prec = cend - cp; + if (fw > prec && !lj) { + while (fw > prec) { + bchunk(fill, 1); + fw--; + } + } + bchunk(cp, (int) prec); + if (fw > prec) { + while (fw > prec) { + bchunk(fill, 1); + fw--; + } + } + s0 = s1; + break; + case 'g': + parse_next_arg(); + tmpval = force_number(arg); + free_temp(arg); + if (prec == 0) + prec = 13; + (void) gcvt(tmpval, (int) prec, cpbuf); + prec = strlen(cpbuf); + cp = cpbuf; + if (fw > prec && !lj) { + if (fill != sp && *cp == '-') { + bchunk(cp, 1); + cp++; + prec--; + } /* Deal with .5 as 0.5 */ + if (fill == sp && *cp == '.') { + --fw; + while (--fw >= prec) { + bchunk(fill, 1); + } + bchunk("0", 1); + } else + while (fw-- > prec) + bchunk(fill, 1); + } else {/* Turn .5 into 0.5 */ + /* FOO */ + if (*cp == '.' && fill == sp) { + bchunk("0", 1); + --fw; + } + } + bchunk(cp, (int) prec); + if (fw > prec) + while (fw-- > prec) + bchunk(fill, 1); + s0 = s1; + break; + case 'f': + parse_next_arg(); + tmpval = force_number(arg); + free_temp(arg); + chksize(fw + prec + 5); /* 5==slop */ + + cp = cpbuf; + *cp++ = '%'; + if (lj) + *cp++ = '-'; + if (fill != sp) + *cp++ = '0'; + if (cur != &fw) { + (void) strcpy(cp, "*.*f"); + (void) sprintf(obuf + olen, cpbuf, (int) fw, (int) prec, (double) tmpval); + } else { + (void) strcpy(cp, "*f"); + (void) sprintf(obuf + olen, cpbuf, (int) fw, (double) tmpval); + } + ofre -= strlen(obuf + olen); + olen += strlen(obuf + olen); /* There may be nulls */ + s0 = s1; + break; + case 'e': + parse_next_arg(); + tmpval = force_number(arg); + free_temp(arg); + chksize(fw + prec + 5); /* 5==slop */ + cp = cpbuf; + *cp++ = '%'; + if (lj) + *cp++ = '-'; + if (fill != sp) + *cp++ = '0'; + if (cur != &fw) { + (void) strcpy(cp, "*.*e"); + (void) sprintf(obuf + olen, cpbuf, (int) fw, (int) prec, (double) tmpval); + } else { + (void) strcpy(cp, "*e"); + (void) sprintf(obuf + olen, cpbuf, (int) fw, (double) tmpval); + } + ofre -= strlen(obuf + olen); + olen += strlen(obuf + olen); /* There may be nulls */ + s0 = s1; + break; + + default: + lose: + break; + } + } + bchunk(s0, s1 - s0); + free_temp(sfmt); + return tmp_string(obuf, olen); + } + + void + do_printf(tree) + NODE *tree; + { + struct redirect *rp = NULL; + register FILE *fp = stdout; + int errflg = 0; /* not used, sigh */ + + if (tree->rnode) { + rp = redirect(tree->rnode, &errflg); + if (rp) + fp = rp->fp; + } + if (fp) + print_simple(do_sprintf(tree->lnode), fp); + if (rp && (rp->flag & RED_NOBUF)) + fflush(fp); + } + + NODE * + do_sqrt(tree) + NODE *tree; + { + NODE *tmp; + double sqrt(); + double d, arg; + + get_one(tree, &tmp); + arg = (double) force_number(tmp); + if (arg < 0.0) + warning("sqrt called with negative argument %g", arg); + d = sqrt(arg); + free_temp(tmp); + return tmp_number((AWKNUM) d); + } + + NODE * + do_substr(tree) + NODE *tree; + { + NODE *t1, *t2, *t3; + NODE *r; + register int indx, length; + + t1 = t2 = t3 = NULL; + length = -1; + if (get_three(tree, &t1, &t2, &t3) == 3) + length = (int) force_number(t3); + indx = (int) force_number(t2) - 1; + t1 = force_string(t1); + if (length == -1) + length = t1->stlen; + if (indx < 0) + indx = 0; + if (indx >= t1->stlen || length <= 0) { + if (t3) + free_temp(t3); + free_temp(t2); + free_temp(t1); + return Nnull_string; + } + if (indx + length > t1->stlen) + length = t1->stlen - indx; + if (t3) + free_temp(t3); + free_temp(t2); + r = tmp_string(t1->stptr + indx, length); + free_temp(t1); + return r; + } + + NODE * + do_system(tree) + NODE *tree; + { + #if defined(unix) || defined(MSDOS) /* || defined(gnu) */ + NODE *tmp; + int ret; + + (void) flush_io (); /* so output is synchronous with gawk's */ + get_one(tree, &tmp); + ret = system(force_string(tmp)->stptr); + ret = (ret >> 8) & 0xff; + free_temp(tmp); + return tmp_number((AWKNUM) ret); + #else + fatal("the \"system\" function is not supported."); + /* NOTREACHED */ + #endif + } + + void + do_print(tree) + register NODE *tree; + { + struct redirect *rp = NULL; + register FILE *fp = stdout; + int errflg = 0; /* not used, sigh */ + + if (tree->rnode) { + rp = redirect(tree->rnode, &errflg); + if (rp) + fp = rp->fp; + } + if (!fp) + return; + tree = tree->lnode; + if (!tree) + tree = WHOLELINE; + if (tree->type != Node_expression_list) { + if (!(tree->flags & STR)) + cant_happen(); + print_simple(tree, fp); + } else { + while (tree) { + print_simple(force_string(tree_eval(tree->lnode)), fp); + tree = tree->rnode; + if (tree) + print_simple(OFS_node->var_value, fp); + } + } + print_simple(ORS_node->var_value, fp); + if (rp && (rp->flag & RED_NOBUF)) + fflush(fp); + } + + NODE * + do_tolower(tree) + NODE *tree; + { + NODE *t1, *t2; + register char *cp, *cp2; + + get_one(tree, &t1); + t1 = force_string(t1); + t2 = tmp_string(t1->stptr, t1->stlen); + for (cp = t2->stptr, cp2 = t2->stptr + t2->stlen; cp < cp2; cp++) + if (isupper(*cp)) + *cp = tolower(*cp); + free_temp(t1); + return t2; + } + + NODE * + do_toupper(tree) + NODE *tree; + { + NODE *t1, *t2; + register char *cp; + + get_one(tree, &t1); + t1 = force_string(t1); + t2 = tmp_string(t1->stptr, t1->stlen); + for (cp = t2->stptr; cp < t2->stptr + t2->stlen; cp++) + if (islower(*cp)) + *cp = toupper(*cp); + free_temp(t1); + return t2; + } + + /* + * Get the arguments to functions. No function cares if you give it too many + * args (they're ignored). Only a few fuctions complain about being given + * too few args. The rest have defaults. + */ + + static void + get_one(tree, res) + NODE *tree, **res; + { + if (!tree) { + *res = WHOLELINE; + return; + } + *res = tree_eval(tree->lnode); + } + + static void + get_two(tree, res1, res2) + NODE *tree, **res1, **res2; + { + if (!tree) { + *res1 = WHOLELINE; + return; + } + *res1 = tree_eval(tree->lnode); + if (!tree->rnode) + return; + tree = tree->rnode; + *res2 = tree_eval(tree->lnode); + } + + static int + get_three(tree, res1, res2, res3) + NODE *tree, **res1, **res2, **res3; + { + if (!tree) { + *res1 = WHOLELINE; + return 0; + } + *res1 = tree_eval(tree->lnode); + if (!tree->rnode) + return 1; + tree = tree->rnode; + *res2 = tree_eval(tree->lnode); + if (!tree->rnode) + return 2; + tree = tree->rnode; + *res3 = tree_eval(tree->lnode); + return 3; + } + + int + a_get_three(tree, res1, res2, res3) + NODE *tree, **res1, **res2, **res3; + { + if (!tree) { + *res1 = WHOLELINE; + return 0; + } + *res1 = tree_eval(tree->lnode); + if (!tree->rnode) + return 1; + tree = tree->rnode; + *res2 = tree->lnode; + if (!tree->rnode) + return 2; + tree = tree->rnode; + *res3 = tree_eval(tree->lnode); + return 3; + } + + void + print_simple(tree, fp) + NODE *tree; + FILE *fp; + { + if (fwrite(tree->stptr, sizeof(char), tree->stlen, fp) != tree->stlen) + warning("fwrite: %s", strerror(errno)); + free_temp(tree); + } + + NODE * + do_atan2(tree) + NODE *tree; + { + NODE *t1, *t2; + extern double atan2(); + double d1, d2; + + get_two(tree, &t1, &t2); + d1 = force_number(t1); + d2 = force_number(t2); + free_temp(t1); + free_temp(t2); + return tmp_number((AWKNUM) atan2(d1, d2)); + } + + NODE * + do_sin(tree) + NODE *tree; + { + NODE *tmp; + extern double sin(); + double d; + + get_one(tree, &tmp); + d = sin((double)force_number(tmp)); + free_temp(tmp); + return tmp_number((AWKNUM) d); + } + + NODE * + do_cos(tree) + NODE *tree; + { + NODE *tmp; + extern double cos(); + double d; + + get_one(tree, &tmp); + d = cos((double)force_number(tmp)); + free_temp(tmp); + return tmp_number((AWKNUM) d); + } + + static int firstrand = 1; + static char state[256]; + + #define MAXLONG 2147483647 /* maximum value for long int */ + + /* ARGSUSED */ + NODE * + do_rand(tree) + NODE *tree; + { + if (firstrand) { + (void) initstate((unsigned) 1, state, sizeof state); + srandom(1); + firstrand = 0; + } + return tmp_number((AWKNUM) random() / MAXLONG); + } + + NODE * + do_srand(tree) + NODE *tree; + { + NODE *tmp; + static long save_seed = 1; + long ret = save_seed; /* SVR4 awk srand returns previous seed */ + extern long time(); + + if (firstrand) + (void) initstate((unsigned) 1, state, sizeof state); + else + (void) setstate(state); + + if (!tree) + srandom((int) (save_seed = time((long *) 0))); + else { + get_one(tree, &tmp); + srandom((int) (save_seed = (long) force_number(tmp))); + free_temp(tmp); + } + firstrand = 0; + return tmp_number((AWKNUM) ret); + } + + NODE * + do_match(tree) + NODE *tree; + { + NODE *t1; + int rstart; + struct re_registers reregs; + struct re_pattern_buffer *rp; + int need_to_free = 0; + + t1 = force_string(tree_eval(tree->lnode)); + tree = tree->rnode; + if (tree == NULL || tree->lnode == NULL) + fatal("match called with only one argument"); + tree = tree->lnode; + if (tree->type == Node_regex) { + rp = tree->rereg; + if (!strict && ((IGNORECASE_node->var_value->numbr != 0) + ^ (tree->re_case != 0))) { + /* recompile since case sensitivity differs */ + rp = tree->rereg = + mk_re_parse(tree->re_text, + (IGNORECASE_node->var_value->numbr != 0)); + tree->re_case = + (IGNORECASE_node->var_value->numbr != 0); + } + } else { + need_to_free = 1; + rp = make_regexp(force_string(tree_eval(tree)), + (IGNORECASE_node->var_value->numbr != 0)); + if (rp == NULL) + cant_happen(); + } + rstart = re_search(rp, t1->stptr, t1->stlen, 0, t1->stlen, &reregs); + free_temp(t1); + if (rstart >= 0) { + rstart++; /* 1-based indexing */ + /* RSTART set to rstart below */ + RLENGTH_node->var_value->numbr = + (AWKNUM) (reregs.end[0] - reregs.start[0]); + } else { + /* + * Match failed. Set RSTART to 0, RLENGTH to -1. + * Return the value of RSTART. + */ + rstart = 0; /* used as return value */ + RLENGTH_node->var_value->numbr = -1.0; + } + RSTART_node->var_value->numbr = (AWKNUM) rstart; + if (need_to_free) { + free(rp->buffer); + free(rp->fastmap); + free((char *) rp); + } + return tmp_number((AWKNUM) rstart); + } + + static NODE * + sub_common(tree, global) + NODE *tree; + int global; + { + register int len; + register char *scan; + register char *bp, *cp; + int search_start = 0; + int match_length; + int matches = 0; + char *buf; + struct re_pattern_buffer *rp; + NODE *s; /* subst. pattern */ + NODE *t; /* string to make sub. in; $0 if none given */ + struct re_registers reregs; + unsigned int saveflags; + NODE *tmp; + NODE **lhs; + char *lastbuf; + int need_to_free = 0; + + if (tree == NULL) + fatal("sub or gsub called with 0 arguments"); + tmp = tree->lnode; + if (tmp->type == Node_regex) { + rp = tmp->rereg; + if (! strict && ((IGNORECASE_node->var_value->numbr != 0) + ^ (tmp->re_case != 0))) { + /* recompile since case sensitivity differs */ + rp = tmp->rereg = + mk_re_parse(tmp->re_text, + (IGNORECASE_node->var_value->numbr != 0)); + tmp->re_case = (IGNORECASE_node->var_value->numbr != 0); + } + } else { + need_to_free = 1; + rp = make_regexp(force_string(tree_eval(tmp)), + (IGNORECASE_node->var_value->numbr != 0)); + if (rp == NULL) + cant_happen(); + } + tree = tree->rnode; + if (tree == NULL) + fatal("sub or gsub called with only 1 argument"); + s = force_string(tree_eval(tree->lnode)); + tree = tree->rnode; + deref = 0; + field_num = -1; + if (tree == NULL) { + t = node0_valid ? fields_arr[0] : *get_field(0, 0); + lhs = &fields_arr[0]; + field_num = 0; + deref = t; + } else { + t = tree->lnode; + lhs = get_lhs(t, 1); + t = force_string(tree_eval(t)); + } + /* + * create a private copy of the string + */ + if (t->stref > 1 || (t->flags & PERM)) { + saveflags = t->flags; + t->flags &= ~MALLOC; + tmp = dupnode(t); + t->flags = saveflags; + do_deref(); + t = tmp; + if (lhs) + *lhs = tmp; + } + lastbuf = t->stptr; + do { + if (re_search(rp, t->stptr, t->stlen, search_start, + t->stlen-search_start, &reregs) == -1 + || reregs.start[0] == reregs.end[0]) + break; + matches++; + + /* + * first, make a pass through the sub. pattern, to calculate + * the length of the string after substitution + */ + match_length = reregs.end[0] - reregs.start[0]; + len = t->stlen - match_length; + for (scan = s->stptr; scan < s->stptr + s->stlen; scan++) + if (*scan == '&') + len += match_length; + else if (*scan == '\\' && *(scan+1) == '&') { + scan++; + len++; + } else + len++; + emalloc(buf, char *, len + 1, "do_sub"); + bp = buf; + + /* + * now, create the result, copying in parts of the original + * string + */ + for (scan = t->stptr; scan < t->stptr + reregs.start[0]; scan++) + *bp++ = *scan; + for (scan = s->stptr; scan < s->stptr + s->stlen; scan++) + if (*scan == '&') + for (cp = t->stptr + reregs.start[0]; + cp < t->stptr + reregs.end[0]; cp++) + *bp++ = *cp; + else if (*scan == '\\' && *(scan+1) == '&') { + scan++; + *bp++ = *scan; + } else + *bp++ = *scan; + search_start = bp - buf; + for (scan = t->stptr + reregs.end[0]; + scan < t->stptr + t->stlen; scan++) + *bp++ = *scan; + *bp = '\0'; + free(lastbuf); + t->stptr = buf; + lastbuf = buf; + t->stlen = len; + } while (global && search_start < t->stlen); + + free_temp(s); + if (need_to_free) { + free(rp->buffer); + free(rp->fastmap); + free((char *) rp); + } + if (matches > 0) { + if (field_num == 0) + set_record(fields_arr[0]->stptr, fields_arr[0]->stlen); + t->flags &= ~(NUM|NUMERIC); + } + field_num = -1; + return tmp_number((AWKNUM) matches); + } + + NODE * + do_gsub(tree) + NODE *tree; + { + return sub_common(tree, 1); + } + + NODE * + do_sub(tree) + NODE *tree; + { + return sub_common(tree, 0); + } + Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/debug.c diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/debug.c:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/debug.c Mon Feb 23 11:05:56 2004 *************** *** 0 **** --- 1,561 ---- + /* + * debug.c -- Various debugging routines + */ + + /* + * Copyright (C) 1986, 1988, 1989 the Free Software Foundation, Inc. + * + * This file is part of GAWK, the GNU implementation of the + * AWK Progamming Language. + * + * GAWK is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 1, or (at your option) + * any later version. + * + * GAWK is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GAWK; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + #include "gawk.h" + + #ifdef DEBUG + + extern NODE **fields_arr; + + + /* This is all debugging stuff. Ignore it and maybe it'll go away. */ + + /* + * Some of it could be turned into a really cute trace command, if anyone + * wants to. + */ + char *nnames[] = { + "illegal", "times", "quotient", "mod", "plus", + "minus", "cond_pair", "subscript", "concat", "exp", + /* 10 */ + "preincrement", "predecrement", "postincrement", "postdecrement", + "unary_minus", + "field_spec", "assign", "assign_times", "assign_quotient", "assign_mod", + /* 20 */ + "assign_plus", "assign_minus", "assign_exp", "and", "or", + "equal", "notequal", "less", "greater", "leq", + /* 30 */ + "geq", "match", "nomatch", "not", "rule_list", + "rule_node", "statement_list", "if_branches", "expression_list", + "param_list", + /* 40 */ + "K_if", "K_while", "K_for", "K_arrayfor", "K_break", + "K_continue", "K_print", "K_printf", "K_next", "K_exit", + /* 50 */ + "K_do", "K_return", "K_delete", "K_getline", "K_function", + "redirect_output", "redirect_append", "redirect_pipe", + "redirect_pipein", "redirect_input", + /* 60 */ + "var", "var_array", "val", "builtin", "line_range", + "in_array", "func", "func_call", "cond_exp", "regex", + /* 70 */ + "hashnode", "ahash" + }; + + ptree(n) + NODE *n; + { + print_parse_tree(n); + } + + pt() + { + long x; + + (void) scanf("%x", &x); + printf("0x%x\n", x); + print_parse_tree((NODE *) x); + fflush(stdout); + } + + static depth = 0; + + print_parse_tree(ptr) + NODE *ptr; + { + if (!ptr) { + printf("NULL\n"); + return; + } + if ((int) (ptr->type) < 0 || (int) (ptr->type) > sizeof(nnames) / sizeof(nnames[0])) { + printf("(0x%x Type %d??)\n", ptr, ptr->type); + return; + } + printf("(%d)%*s", depth, depth, ""); + switch ((int) ptr->type) { + case (int) Node_val: + printf("(0x%x Value ", ptr); + if (ptr->flags&STR) + printf("str: \"%.*s\" ", ptr->stlen, ptr->stptr); + if (ptr->flags&NUM) + printf("num: %g", ptr->numbr); + printf(")\n"); + return; + case (int) Node_var_array: + { + struct search *l; + + printf("(0x%x Array)\n", ptr); + for (l = assoc_scan(ptr); l; l = assoc_next(l)) { + printf("\tindex: "); + print_parse_tree(l->retval); + printf("\tvalue: "); + print_parse_tree(*assoc_lookup(ptr, l->retval)); + printf("\n"); + } + return; + } + case Node_param_list: + printf("(0x%x Local variable %s)\n", ptr, ptr->param); + if (ptr->rnode) + print_parse_tree(ptr->rnode); + return; + case Node_regex: + printf("(0x%x Regular expression %s\n", ptr, ptr->re_text); + return; + } + if (ptr->lnode) + printf("0x%x = left<--", ptr->lnode); + printf("(0x%x %s.%d)", ptr, nnames[(int) (ptr->type)], ptr->type); + if (ptr->rnode) + printf("-->right = 0x%x", ptr->rnode); + printf("\n"); + depth++; + if (ptr->lnode) + print_parse_tree(ptr->lnode); + switch ((int) ptr->type) { + case (int) Node_line_range: + case (int) Node_match: + case (int) Node_nomatch: + break; + case (int) Node_builtin: + printf("Builtin: %d\n", ptr->proc); + break; + case (int) Node_K_for: + case (int) Node_K_arrayfor: + printf("(%s:)\n", nnames[(int) (ptr->type)]); + print_parse_tree(ptr->forloop->init); + printf("looping:\n"); + print_parse_tree(ptr->forloop->cond); + printf("doing:\n"); + print_parse_tree(ptr->forloop->incr); + break; + default: + if (ptr->rnode) + print_parse_tree(ptr->rnode); + break; + } + --depth; + } + + + /* + * print out all the variables in the world + */ + + dump_vars() + { + register int n; + register NODE *buc; + + #ifdef notdef + printf("Fields:"); + dump_fields(); + #endif + printf("Vars:\n"); + for (n = 0; n < HASHSIZE; n++) { + for (buc = variables[n]; buc; buc = buc->hnext) { + printf("'%.*s': ", buc->hlength, buc->hname); + print_parse_tree(buc->hvalue); + } + } + printf("End\n"); + } + + #ifdef notdef + dump_fields() + { + register NODE **p; + register int n; + + printf("%d fields\n", f_arr_siz); + for (n = 0, p = &fields_arr[0]; n < f_arr_siz; n++, p++) { + printf("$%d is '", n); + print_simple(*p, stdout); + printf("'\n"); + } + } + #endif + + /* VARARGS1 */ + print_debug(str, n) + char *str; + { + extern int debugging; + + if (debugging) + printf("%s:0x%x\n", str, n); + } + + int indent = 0; + + print_a_node(ptr) + NODE *ptr; + { + NODE *p1; + char *str, *str2; + int n; + NODE *buc; + + if (!ptr) + return; /* don't print null ptrs */ + switch (ptr->type) { + case Node_val: + if (ptr->flags&NUM) + printf("%g", ptr->numbr); + else + printf("\"%.*s\"", ptr->stlen, ptr->stptr); + return; + case Node_times: + str = "*"; + goto pr_twoop; + case Node_quotient: + str = "/"; + goto pr_twoop; + case Node_mod: + str = "%"; + goto pr_twoop; + case Node_plus: + str = "+"; + goto pr_twoop; + case Node_minus: + str = "-"; + goto pr_twoop; + case Node_exp: + str = "^"; + goto pr_twoop; + case Node_concat: + str = " "; + goto pr_twoop; + case Node_assign: + str = "="; + goto pr_twoop; + case Node_assign_times: + str = "*="; + goto pr_twoop; + case Node_assign_quotient: + str = "/="; + goto pr_twoop; + case Node_assign_mod: + str = "%="; + goto pr_twoop; + case Node_assign_plus: + str = "+="; + goto pr_twoop; + case Node_assign_minus: + str = "-="; + goto pr_twoop; + case Node_assign_exp: + str = "^="; + goto pr_twoop; + case Node_and: + str = "&&"; + goto pr_twoop; + case Node_or: + str = "||"; + goto pr_twoop; + case Node_equal: + str = "=="; + goto pr_twoop; + case Node_notequal: + str = "!="; + goto pr_twoop; + case Node_less: + str = "<"; + goto pr_twoop; + case Node_greater: + str = ">"; + goto pr_twoop; + case Node_leq: + str = "<="; + goto pr_twoop; + case Node_geq: + str = ">="; + goto pr_twoop; + + pr_twoop: + print_a_node(ptr->lnode); + printf("%s", str); + print_a_node(ptr->rnode); + return; + + case Node_not: + str = "!"; + str2 = ""; + goto pr_oneop; + case Node_field_spec: + str = "$("; + str2 = ")"; + goto pr_oneop; + case Node_postincrement: + str = ""; + str2 = "++"; + goto pr_oneop; + case Node_postdecrement: + str = ""; + str2 = "--"; + goto pr_oneop; + case Node_preincrement: + str = "++"; + str2 = ""; + goto pr_oneop; + case Node_predecrement: + str = "--"; + str2 = ""; + goto pr_oneop; + pr_oneop: + printf(str); + print_a_node(ptr->subnode); + printf(str2); + return; + + case Node_expression_list: + print_a_node(ptr->lnode); + if (ptr->rnode) { + printf(","); + print_a_node(ptr->rnode); + } + return; + + case Node_var: + for (n = 0; n < HASHSIZE; n++) { + for (buc = variables[n]; buc; buc = buc->hnext) { + if (buc->hvalue == ptr) { + printf("%.*s", buc->hlength, buc->hname); + n = HASHSIZE; + break; + } + } + } + return; + case Node_subscript: + print_a_node(ptr->lnode); + printf("["); + print_a_node(ptr->rnode); + printf("]"); + return; + case Node_builtin: + printf("some_builtin("); + print_a_node(ptr->subnode); + printf(")"); + return; + + case Node_statement_list: + printf("{\n"); + indent++; + for (n = indent; n; --n) + printf(" "); + while (ptr) { + print_maybe_semi(ptr->lnode); + if (ptr->rnode) + for (n = indent; n; --n) + printf(" "); + ptr = ptr->rnode; + } + --indent; + for (n = indent; n; --n) + printf(" "); + printf("}\n"); + for (n = indent; n; --n) + printf(" "); + return; + + case Node_K_if: + printf("if("); + print_a_node(ptr->lnode); + printf(") "); + ptr = ptr->rnode; + if (ptr->lnode->type == Node_statement_list) { + printf("{\n"); + indent++; + for (p1 = ptr->lnode; p1; p1 = p1->rnode) { + for (n = indent; n; --n) + printf(" "); + print_maybe_semi(p1->lnode); + } + --indent; + for (n = indent; n; --n) + printf(" "); + if (ptr->rnode) { + printf("} else "); + } else { + printf("}\n"); + return; + } + } else { + print_maybe_semi(ptr->lnode); + if (ptr->rnode) { + for (n = indent; n; --n) + printf(" "); + printf("else "); + } else + return; + } + if (!ptr->rnode) + return; + deal_with_curls(ptr->rnode); + return; + + case Node_K_while: + printf("while("); + print_a_node(ptr->lnode); + printf(") "); + deal_with_curls(ptr->rnode); + return; + + case Node_K_do: + printf("do "); + deal_with_curls(ptr->rnode); + printf("while("); + print_a_node(ptr->lnode); + printf(") "); + return; + + case Node_K_for: + printf("for("); + print_a_node(ptr->forloop->init); + printf(";"); + print_a_node(ptr->forloop->cond); + printf(";"); + print_a_node(ptr->forloop->incr); + printf(") "); + deal_with_curls(ptr->forsub); + return; + case Node_K_arrayfor: + printf("for("); + print_a_node(ptr->forloop->init); + printf(" in "); + print_a_node(ptr->forloop->incr); + printf(") "); + deal_with_curls(ptr->forsub); + return; + + case Node_K_printf: + printf("printf("); + print_a_node(ptr->lnode); + printf(")"); + return; + case Node_K_print: + printf("print("); + print_a_node(ptr->lnode); + printf(")"); + return; + case Node_K_next: + printf("next"); + return; + case Node_K_break: + printf("break"); + return; + case Node_K_delete: + printf("delete "); + print_a_node(ptr->lnode); + return; + case Node_func: + printf("function %s (", ptr->lnode->param); + if (ptr->lnode->rnode) + print_a_node(ptr->lnode->rnode); + printf(")\n"); + print_a_node(ptr->rnode); + return; + case Node_param_list: + printf("%s", ptr->param); + if (ptr->rnode) { + printf(", "); + print_a_node(ptr->rnode); + } + return; + default: + print_parse_tree(ptr); + return; + } + } + + print_maybe_semi(ptr) + NODE *ptr; + { + print_a_node(ptr); + switch (ptr->type) { + case Node_K_if: + case Node_K_for: + case Node_K_arrayfor: + case Node_statement_list: + break; + default: + printf(";\n"); + break; + } + } + + deal_with_curls(ptr) + NODE *ptr; + { + int n; + + if (ptr->type == Node_statement_list) { + printf("{\n"); + indent++; + while (ptr) { + for (n = indent; n; --n) + printf(" "); + print_maybe_semi(ptr->lnode); + ptr = ptr->rnode; + } + --indent; + for (n = indent; n; --n) + printf(" "); + printf("}\n"); + } else { + print_maybe_semi(ptr); + } + } + + NODE * + do_prvars() + { + dump_vars(); + return Nnull_string; + } + + NODE * + do_bp() + { + return Nnull_string; + } + + #endif + + #ifdef MEMDEBUG + + #undef free + extern void free(); + + void + do_free(s) + char *s; + { + free(s); + } + + #endif Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/eval.c diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/eval.c:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/eval.c Mon Feb 23 11:05:56 2004 *************** *** 0 **** --- 1,1139 ---- + /* + * eval.c - gawk parse tree interpreter + */ + + /* + * Copyright (C) 1986, 1988, 1989 the Free Software Foundation, Inc. + * + * This file is part of GAWK, the GNU implementation of the + * AWK Progamming Language. + * + * GAWK is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 1, or (at your option) + * any later version. + * + * GAWK is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GAWK; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + #include "gawk.h" + + extern void do_print(); + extern void do_printf(); + extern NODE *do_match(); + extern NODE *do_sub(); + extern NODE *do_getline(); + extern NODE *concat_exp(); + extern int in_array(); + extern void do_delete(); + extern double pow(); + + static int eval_condition(); + static NODE *op_assign(); + static NODE *func_call(); + static NODE *match_op(); + + NODE *_t; /* used as a temporary in macros */ + #ifdef MSDOS + double _msc51bug; /* to get around a bug in MSC 5.1 */ + #endif + NODE *ret_node; + + /* More of that debugging stuff */ + #ifdef DEBUG + #define DBG_P(X) print_debug X + #else + #define DBG_P(X) + #endif + + /* Macros and variables to save and restore function and loop bindings */ + /* + * the val variable allows return/continue/break-out-of-context to be + * caught and diagnosed + */ + #define PUSH_BINDING(stack, x, val) (memcpy ((char *)(stack), (char *)(x), sizeof (jmp_buf)), val++) + #define RESTORE_BINDING(stack, x, val) (memcpy ((char *)(x), (char *)(stack), sizeof (jmp_buf)), val--) + + static jmp_buf loop_tag; /* always the current binding */ + static int loop_tag_valid = 0; /* nonzero when loop_tag valid */ + static int func_tag_valid = 0; + static jmp_buf func_tag; + extern int exiting, exit_val; + + /* + * This table is used by the regexp routines to do case independant + * matching. Basically, every ascii character maps to itself, except + * uppercase letters map to lower case ones. This table has 256 + * entries, which may be overkill. Note also that if the system this + * is compiled on doesn't use 7-bit ascii, casetable[] should not be + * defined to the linker, so gawk should not load. + * + * Do NOT make this array static, it is used in several spots, not + * just in this file. + */ + #if 'a' == 97 /* it's ascii */ + char casetable[] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + /* ' ' '!' '"' '#' '$' '%' '&' ''' */ + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + /* '(' ')' '*' '+' ',' '-' '.' '/' */ + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + /* '0' '1' '2' '3' '4' '5' '6' '7' */ + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + /* '8' '9' ':' ';' '<' '=' '>' '?' */ + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + /* '@' 'A' 'B' 'C' 'D' 'E' 'F' 'G' */ + '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + /* 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O' */ + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + /* 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' */ + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + /* 'X' 'Y' 'Z' '[' '\' ']' '^' '_' */ + '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', + /* '`' 'a' 'b' 'c' 'd' 'e' 'f' 'g' */ + '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + /* 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' */ + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + /* 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' */ + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + /* 'x' 'y' 'z' '{' '|' '}' '~' */ + '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', + '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', + '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', + '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', + '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307', + '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317', + '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327', + '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377', + }; + #else + #include "You lose. You will need a translation table for your character set." + #endif + + /* + * Tree is a bunch of rules to run. Returns zero if it hit an exit() + * statement + */ + int + interpret(tree) + NODE *tree; + { + volatile jmp_buf loop_tag_stack; /* shallow binding stack for loop_tag */ + static jmp_buf rule_tag;/* tag the rule currently being run, for NEXT + * and EXIT statements. It is static because + * there are no nested rules */ + register NODE *t = NULL;/* temporary */ + volatile NODE **lhs; /* lhs == Left Hand Side for assigns, etc */ + volatile struct search *l; /* For array_for */ + volatile NODE *stable_tree; + + if (tree == NULL) + return 1; + sourceline = tree->source_line; + source = tree->source_file; + switch (tree->type) { + case Node_rule_list: + for (t = tree; t != NULL; t = t->rnode) { + tree = t->lnode; + /* FALL THROUGH */ + case Node_rule_node: + sourceline = tree->source_line; + source = tree->source_file; + switch (setjmp(rule_tag)) { + case 0: /* normal non-jump */ + /* test pattern, if any */ + if (tree->lnode == NULL + || eval_condition(tree->lnode)) { + DBG_P(("Found a rule", tree->rnode)); + if (tree->rnode == NULL) { + /* + * special case: pattern with + * no action is equivalent to + * an action of {print} + */ + NODE printnode; + + printnode.type = Node_K_print; + printnode.lnode = NULL; + printnode.rnode = NULL; + do_print(&printnode); + } else if (tree->rnode->type == Node_illegal) { + /* + * An empty statement + * (``{ }'') is different + * from a missing statement. + * A missing statement is + * equal to ``{ print }'' as + * above, but an empty + * statement is as in C, do + * nothing. + */ + } else + (void) interpret(tree->rnode); + } + break; + case TAG_CONTINUE: /* NEXT statement */ + return 1; + case TAG_BREAK: + return 0; + default: + cant_happen(); + } + if (t == NULL) + break; + } + break; + + case Node_statement_list: + for (t = tree; t != NULL; t = t->rnode) { + DBG_P(("Statements", t->lnode)); + (void) interpret(t->lnode); + } + break; + + case Node_K_if: + DBG_P(("IF", tree->lnode)); + if (eval_condition(tree->lnode)) { + DBG_P(("True", tree->rnode->lnode)); + (void) interpret(tree->rnode->lnode); + } else { + DBG_P(("False", tree->rnode->rnode)); + (void) interpret(tree->rnode->rnode); + } + break; + + case Node_K_while: + PUSH_BINDING(loop_tag_stack, loop_tag, loop_tag_valid); + + DBG_P(("WHILE", tree->lnode)); + stable_tree = tree; + while (eval_condition(stable_tree->lnode)) { + switch (setjmp(loop_tag)) { + case 0: /* normal non-jump */ + DBG_P(("DO", stable_tree->rnode)); + (void) interpret(stable_tree->rnode); + break; + case TAG_CONTINUE: /* continue statement */ + break; + case TAG_BREAK: /* break statement */ + RESTORE_BINDING(loop_tag_stack, loop_tag, loop_tag_valid); + return 1; + default: + cant_happen(); + } + } + RESTORE_BINDING(loop_tag_stack, loop_tag, loop_tag_valid); + break; + + case Node_K_do: + PUSH_BINDING(loop_tag_stack, loop_tag, loop_tag_valid); + stable_tree = tree; + do { + switch (setjmp(loop_tag)) { + case 0: /* normal non-jump */ + DBG_P(("DO", stable_tree->rnode)); + (void) interpret(stable_tree->rnode); + break; + case TAG_CONTINUE: /* continue statement */ + break; + case TAG_BREAK: /* break statement */ + RESTORE_BINDING(loop_tag_stack, loop_tag, loop_tag_valid); + return 1; + default: + cant_happen(); + } + DBG_P(("WHILE", stable_tree->lnode)); + } while (eval_condition(stable_tree->lnode)); + RESTORE_BINDING(loop_tag_stack, loop_tag, loop_tag_valid); + break; + + case Node_K_for: + PUSH_BINDING(loop_tag_stack, loop_tag, loop_tag_valid); + DBG_P(("FOR", tree->forloop->init)); + (void) interpret(tree->forloop->init); + DBG_P(("FOR.WHILE", tree->forloop->cond)); + stable_tree = tree; + while (eval_condition(stable_tree->forloop->cond)) { + switch (setjmp(loop_tag)) { + case 0: /* normal non-jump */ + DBG_P(("FOR.DO", stable_tree->lnode)); + (void) interpret(stable_tree->lnode); + /* fall through */ + case TAG_CONTINUE: /* continue statement */ + DBG_P(("FOR.INCR", stable_tree->forloop->incr)); + (void) interpret(stable_tree->forloop->incr); + break; + case TAG_BREAK: /* break statement */ + RESTORE_BINDING(loop_tag_stack, loop_tag, loop_tag_valid); + return 1; + default: + cant_happen(); + } + } + RESTORE_BINDING(loop_tag_stack, loop_tag, loop_tag_valid); + break; + + case Node_K_arrayfor: + #define hakvar forloop->init + #define arrvar forloop->incr + PUSH_BINDING(loop_tag_stack, loop_tag, loop_tag_valid); + DBG_P(("AFOR.VAR", tree->hakvar)); + lhs = (volatile NODE **) get_lhs(tree->hakvar, 1); + t = tree->arrvar; + if (t->type == Node_param_list) + t = stack_ptr[t->param_cnt]; + stable_tree = tree; + for (l = assoc_scan(t); l; l = assoc_next((struct search *)l)) { + deref = *((NODE **) lhs); + do_deref(); + *lhs = dupnode(l->retval); + if (field_num == 0) + set_record(fields_arr[0]->stptr, + fields_arr[0]->stlen); + DBG_P(("AFOR.NEXTIS", *lhs)); + switch (setjmp(loop_tag)) { + case 0: + DBG_P(("AFOR.DO", stable_tree->lnode)); + (void) interpret(stable_tree->lnode); + case TAG_CONTINUE: + break; + + case TAG_BREAK: + RESTORE_BINDING(loop_tag_stack, loop_tag, loop_tag_valid); + field_num = -1; + return 1; + default: + cant_happen(); + } + } + field_num = -1; + RESTORE_BINDING(loop_tag_stack, loop_tag, loop_tag_valid); + break; + + case Node_K_break: + DBG_P(("BREAK", NULL)); + if (loop_tag_valid == 0) + fatal("unexpected break"); + longjmp(loop_tag, TAG_BREAK); + break; + + case Node_K_continue: + DBG_P(("CONTINUE", NULL)); + if (loop_tag_valid == 0) + fatal("unexpected continue"); + longjmp(loop_tag, TAG_CONTINUE); + break; + + case Node_K_print: + DBG_P(("PRINT", tree)); + do_print(tree); + break; + + case Node_K_printf: + DBG_P(("PRINTF", tree)); + do_printf(tree); + break; + + case Node_K_next: + DBG_P(("NEXT", NULL)); + longjmp(rule_tag, TAG_CONTINUE); + break; + + case Node_K_exit: + /* + * In A,K,&W, p. 49, it says that an exit statement "... + * causes the program to behave as if the end of input had + * occurred; no more input is read, and the END actions, if + * any are executed." This implies that the rest of the rules + * are not done. So we immediately break out of the main loop. + */ + DBG_P(("EXIT", NULL)); + exiting = 1; + if (tree) { + t = tree_eval(tree->lnode); + exit_val = (int) force_number(t); + } + free_temp(t); + longjmp(rule_tag, TAG_BREAK); + break; + + case Node_K_return: + DBG_P(("RETURN", NULL)); + t = tree_eval(tree->lnode); + ret_node = dupnode(t); + free_temp(t); + longjmp(func_tag, TAG_RETURN); + break; + + default: + /* + * Appears to be an expression statement. Throw away the + * value. + */ + DBG_P(("E", NULL)); + t = tree_eval(tree); + free_temp(t); + break; + } + return 1; + } + + /* evaluate a subtree, allocating strings on a temporary stack. */ + + NODE * + r_tree_eval(tree) + NODE *tree; + { + register NODE *r, *t1, *t2; /* return value & temporary subtrees */ + int i; + register NODE **lhs; + int di; + AWKNUM x, x2; + long lx; + extern NODE **fields_arr; + + source = tree->source_file; + sourceline = tree->source_line; + switch (tree->type) { + case Node_and: + DBG_P(("AND", tree)); + return tmp_number((AWKNUM) (eval_condition(tree->lnode) + && eval_condition(tree->rnode))); + + case Node_or: + DBG_P(("OR", tree)); + return tmp_number((AWKNUM) (eval_condition(tree->lnode) + || eval_condition(tree->rnode))); + + case Node_not: + DBG_P(("NOT", tree)); + return tmp_number((AWKNUM) ! eval_condition(tree->lnode)); + + /* Builtins */ + case Node_builtin: + DBG_P(("builtin", tree)); + return ((*tree->proc) (tree->subnode)); + + case Node_K_getline: + DBG_P(("GETLINE", tree)); + return (do_getline(tree)); + + case Node_in_array: + DBG_P(("IN_ARRAY", tree)); + return tmp_number((AWKNUM) in_array(tree->lnode, tree->rnode)); + + case Node_func_call: + DBG_P(("func_call", tree)); + return func_call(tree->rnode, tree->lnode); + + case Node_K_delete: + DBG_P(("DELETE", tree)); + do_delete(tree->lnode, tree->rnode); + return Nnull_string; + + /* unary operations */ + + case Node_var: + case Node_var_array: + case Node_param_list: + case Node_subscript: + case Node_field_spec: + DBG_P(("var_type ref", tree)); + lhs = get_lhs(tree, 0); + field_num = -1; + deref = 0; + return *lhs; + + case Node_unary_minus: + DBG_P(("UMINUS", tree)); + t1 = tree_eval(tree->subnode); + x = -force_number(t1); + free_temp(t1); + return tmp_number(x); + + case Node_cond_exp: + DBG_P(("?:", tree)); + if (eval_condition(tree->lnode)) { + DBG_P(("True", tree->rnode->lnode)); + return tree_eval(tree->rnode->lnode); + } + DBG_P(("False", tree->rnode->rnode)); + return tree_eval(tree->rnode->rnode); + + case Node_match: + case Node_nomatch: + case Node_regex: + DBG_P(("[no]match_op", tree)); + return match_op(tree); + + case Node_func: + fatal("function `%s' called with space between name and (,\n%s", + tree->lnode->param, + "or used in other expression context"); + + /* assignments */ + case Node_assign: + DBG_P(("ASSIGN", tree)); + r = tree_eval(tree->rnode); + lhs = get_lhs(tree->lnode, 1); + *lhs = dupnode(r); + free_temp(r); + do_deref(); + if (field_num == 0) + set_record(fields_arr[0]->stptr, fields_arr[0]->stlen); + field_num = -1; + return *lhs; + + /* other assignment types are easier because they are numeric */ + case Node_preincrement: + case Node_predecrement: + case Node_postincrement: + case Node_postdecrement: + case Node_assign_exp: + case Node_assign_times: + case Node_assign_quotient: + case Node_assign_mod: + case Node_assign_plus: + case Node_assign_minus: + return op_assign(tree); + default: + break; /* handled below */ + } + + /* evaluate subtrees in order to do binary operation, then keep going */ + t1 = tree_eval(tree->lnode); + t2 = tree_eval(tree->rnode); + + switch (tree->type) { + case Node_concat: + DBG_P(("CONCAT", tree)); + t1 = force_string(t1); + t2 = force_string(t2); + + r = newnode(Node_val); + r->flags |= (STR|TEMP); + r->stlen = t1->stlen + t2->stlen; + r->stref = 1; + emalloc(r->stptr, char *, r->stlen + 1, "tree_eval"); + memcpy(r->stptr, t1->stptr, t1->stlen); + memcpy(r->stptr + t1->stlen, t2->stptr, t2->stlen + 1); + free_temp(t1); + free_temp(t2); + return r; + + case Node_geq: + case Node_leq: + case Node_greater: + case Node_less: + case Node_notequal: + case Node_equal: + di = cmp_nodes(t1, t2); + free_temp(t1); + free_temp(t2); + switch (tree->type) { + case Node_equal: + DBG_P(("EQUAL", tree)); + return tmp_number((AWKNUM) (di == 0)); + case Node_notequal: + DBG_P(("NOT_EQUAL", tree)); + return tmp_number((AWKNUM) (di != 0)); + case Node_less: + DBG_P(("LESS_THAN", tree)); + return tmp_number((AWKNUM) (di < 0)); + case Node_greater: + DBG_P(("GREATER_THAN", tree)); + return tmp_number((AWKNUM) (di > 0)); + case Node_leq: + DBG_P(("LESS_THAN_EQUAL", tree)); + return tmp_number((AWKNUM) (di <= 0)); + case Node_geq: + DBG_P(("GREATER_THAN_EQUAL", tree)); + return tmp_number((AWKNUM) (di >= 0)); + default: + cant_happen(); + } + break; + default: + break; /* handled below */ + } + + (void) force_number(t1); + (void) force_number(t2); + + switch (tree->type) { + case Node_exp: + DBG_P(("EXPONENT", tree)); + if ((lx = t2->numbr) == t2->numbr) { /* integer exponent */ + if (lx == 0) + x = 1; + else if (lx == 1) + x = t1->numbr; + else { + /* doing it this way should be more precise */ + for (x = x2 = t1->numbr; --lx; ) + x *= x2; + } + } else + x = pow((double) t1->numbr, (double) t2->numbr); + free_temp(t1); + free_temp(t2); + return tmp_number(x); + + case Node_times: + DBG_P(("MULT", tree)); + x = t1->numbr * t2->numbr; + free_temp(t1); + free_temp(t2); + return tmp_number(x); + + case Node_quotient: + DBG_P(("DIVIDE", tree)); + x = t2->numbr; + free_temp(t2); + if (x == (AWKNUM) 0) + fatal("division by zero attempted"); + /* NOTREACHED */ + else { + x = t1->numbr / x; + free_temp(t1); + return tmp_number(x); + } + + case Node_mod: + DBG_P(("MODULUS", tree)); + x = t2->numbr; + free_temp(t2); + if (x == (AWKNUM) 0) + fatal("division by zero attempted in mod"); + /* NOTREACHED */ + lx = t1->numbr / x; /* assignment to long truncates */ + x2 = lx * x; + x = t1->numbr - x2; + free_temp(t1); + return tmp_number(x); + + case Node_plus: + DBG_P(("PLUS", tree)); + x = t1->numbr + t2->numbr; + free_temp(t1); + free_temp(t2); + return tmp_number(x); + + case Node_minus: + DBG_P(("MINUS", tree)); + x = t1->numbr - t2->numbr; + free_temp(t1); + free_temp(t2); + return tmp_number(x); + + default: + fatal("illegal type (%d) in tree_eval", tree->type); + } + return 0; + } + + /* + * This makes numeric operations slightly more efficient. Just change the + * value of a numeric node, if possible + */ + void + assign_number(ptr, value) + NODE **ptr; + AWKNUM value; + { + extern NODE *deref; + register NODE *n = *ptr; + + #ifdef DEBUG + if (n->type != Node_val) + cant_happen(); + #endif + if (n == Nnull_string) { + *ptr = make_number(value); + deref = 0; + return; + } + if (n->stref > 1) { + *ptr = make_number(value); + return; + } + if ((n->flags & STR) && (n->flags & (MALLOC|TEMP))) + free(n->stptr); + n->numbr = value; + n->flags |= (NUM|NUMERIC); + n->flags &= ~STR; + n->stref = 0; + deref = 0; + } + + + /* Is TREE true or false? Returns 0==false, non-zero==true */ + static int + eval_condition(tree) + NODE *tree; + { + register NODE *t1; + int ret; + + if (tree == NULL) /* Null trees are the easiest kinds */ + return 1; + if (tree->type == Node_line_range) { + /* + * Node_line_range is kind of like Node_match, EXCEPT: the + * lnode field (more properly, the condpair field) is a node + * of a Node_cond_pair; whether we evaluate the lnode of that + * node or the rnode depends on the triggered word. More + * precisely: if we are not yet triggered, we tree_eval the + * lnode; if that returns true, we set the triggered word. + * If we are triggered (not ELSE IF, note), we tree_eval the + * rnode, clear triggered if it succeeds, and perform our + * action (regardless of success or failure). We want to be + * able to begin and end on a single input record, so this + * isn't an ELSE IF, as noted above. + */ + if (!tree->triggered) + if (!eval_condition(tree->condpair->lnode)) + return 0; + else + tree->triggered = 1; + /* Else we are triggered */ + if (eval_condition(tree->condpair->rnode)) + tree->triggered = 0; + return 1; + } + + /* + * Could just be J.random expression. in which case, null and 0 are + * false, anything else is true + */ + + t1 = tree_eval(tree); + if (t1->flags & NUMERIC) + ret = t1->numbr != 0.0; + else + ret = t1->stlen != 0; + free_temp(t1); + return ret; + } + + int + cmp_nodes(t1, t2) + NODE *t1, *t2; + { + AWKNUM d; + AWKNUM d1; + AWKNUM d2; + int ret; + int len1, len2; + + if (t1 == t2) + return 0; + d1 = force_number(t1); + d2 = force_number(t2); + if ((t1->flags & NUMERIC) && (t2->flags & NUMERIC)) { + d = d1 - d2; + if (d == 0.0) /* from profiling, this is most common */ + return 0; + if (d > 0.0) + return 1; + return -1; + } + t1 = force_string(t1); + t2 = force_string(t2); + len1 = t1->stlen; + len2 = t2->stlen; + if (len1 == 0) { + if (len2 == 0) + return 0; + else + return -1; + } else if (len2 == 0) + return 1; + ret = memcmp(t1->stptr, t2->stptr, len1 <= len2 ? len1 : len2); + if (ret == 0 && len1 != len2) + return len1 < len2 ? -1: 1; + return ret; + } + + static NODE * + op_assign(tree) + NODE *tree; + { + AWKNUM rval, lval; + NODE **lhs; + AWKNUM t1, t2; + long ltemp; + NODE *tmp; + + lhs = get_lhs(tree->lnode, 1); + lval = force_number(*lhs); + + switch(tree->type) { + case Node_preincrement: + case Node_predecrement: + DBG_P(("+-X", tree)); + assign_number(lhs, + lval + (tree->type == Node_preincrement ? 1.0 : -1.0)); + do_deref(); + if (field_num == 0) + set_record(fields_arr[0]->stptr, fields_arr[0]->stlen); + field_num = -1; + return *lhs; + + case Node_postincrement: + case Node_postdecrement: + DBG_P(("X+-", tree)); + assign_number(lhs, + lval + (tree->type == Node_postincrement ? 1.0 : -1.0)); + do_deref(); + if (field_num == 0) + set_record(fields_arr[0]->stptr, fields_arr[0]->stlen); + field_num = -1; + return tmp_number(lval); + default: + break; /* handled below */ + } + + tmp = tree_eval(tree->rnode); + rval = force_number(tmp); + free_temp(tmp); + switch(tree->type) { + case Node_assign_exp: + DBG_P(("ASSIGN_exp", tree)); + if ((ltemp = rval) == rval) { /* integer exponent */ + if (ltemp == 0) + assign_number(lhs, (AWKNUM) 1); + else if (ltemp == 1) + assign_number(lhs, lval); + else { + /* doing it this way should be more precise */ + for (t1 = t2 = lval; --ltemp; ) + t1 *= t2; + assign_number(lhs, t1); + } + } else + assign_number(lhs, (AWKNUM) pow((double) lval, (double) rval)); + break; + + case Node_assign_times: + DBG_P(("ASSIGN_times", tree)); + assign_number(lhs, lval * rval); + break; + + case Node_assign_quotient: + DBG_P(("ASSIGN_quotient", tree)); + if (rval == (AWKNUM) 0) + fatal("division by zero attempted in /="); + assign_number(lhs, lval / rval); + break; + + case Node_assign_mod: + DBG_P(("ASSIGN_mod", tree)); + if (rval == (AWKNUM) 0) + fatal("division by zero attempted in %="); + ltemp = lval / rval; /* assignment to long truncates */ + t1 = ltemp * rval; + t2 = lval - t1; + assign_number(lhs, t2); + break; + + case Node_assign_plus: + DBG_P(("ASSIGN_plus", tree)); + assign_number(lhs, lval + rval); + break; + + case Node_assign_minus: + DBG_P(("ASSIGN_minus", tree)); + assign_number(lhs, lval - rval); + break; + default: + cant_happen(); + } + do_deref(); + if (field_num == 0) + set_record(fields_arr[0]->stptr, fields_arr[0]->stlen); + field_num = -1; + return *lhs; + } + + NODE **stack_ptr; + + static NODE * + func_call(name, arg_list) + NODE *name; /* name is a Node_val giving function name */ + NODE *arg_list; /* Node_expression_list of calling args. */ + { + register NODE *arg, *argp, *r; + NODE *n, *f; + volatile jmp_buf func_tag_stack; + volatile jmp_buf loop_tag_stack; + volatile int save_loop_tag_valid = 0; + volatile NODE **save_stack, *save_ret_node; + NODE **local_stack, **sp; + int count; + extern NODE *ret_node; + + /* + * retrieve function definition node + */ + f = lookup(variables, name->stptr); + if (!f || f->type != Node_func) + fatal("function `%s' not defined", name->stptr); + #ifdef FUNC_TRACE + fprintf(stderr, "function %s called\n", name->stptr); + #endif + count = f->lnode->param_cnt; + emalloc(local_stack, NODE **, count * sizeof(NODE *), "func_call"); + sp = local_stack; + + /* + * for each calling arg. add NODE * on stack + */ + for (argp = arg_list; count && argp != NULL; argp = argp->rnode) { + arg = argp->lnode; + r = newnode(Node_var); + /* + * call by reference for arrays; see below also + */ + if (arg->type == Node_param_list) + arg = stack_ptr[arg->param_cnt]; + if (arg->type == Node_var_array) + *r = *arg; + else { + n = tree_eval(arg); + r->lnode = dupnode(n); + r->rnode = (NODE *) NULL; + free_temp(n); + } + *sp++ = r; + count--; + } + if (argp != NULL) /* left over calling args. */ + warning( + "function `%s' called with more arguments than declared", + name->stptr); + /* + * add remaining params. on stack with null value + */ + while (count-- > 0) { + r = newnode(Node_var); + r->lnode = Nnull_string; + r->rnode = (NODE *) NULL; + *sp++ = r; + } + + /* + * Execute function body, saving context, as a return statement + * will longjmp back here. + * + * Have to save and restore the loop_tag stuff so that a return + * inside a loop in a function body doesn't scrog any loops going + * on in the main program. We save the necessary info in variables + * local to this function so that function nesting works OK. + * We also only bother to save the loop stuff if we're in a loop + * when the function is called. + */ + if (loop_tag_valid) { + int junk = 0; + + save_loop_tag_valid = (volatile int) loop_tag_valid; + PUSH_BINDING(loop_tag_stack, loop_tag, junk); + loop_tag_valid = 0; + } + save_stack = (volatile NODE **) stack_ptr; + stack_ptr = local_stack; + PUSH_BINDING(func_tag_stack, func_tag, func_tag_valid); + save_ret_node = (volatile NODE *) ret_node; + ret_node = Nnull_string; /* default return value */ + if (setjmp(func_tag) == 0) + (void) interpret(f->rnode); + + r = ret_node; + ret_node = (NODE *) save_ret_node; + RESTORE_BINDING(func_tag_stack, func_tag, func_tag_valid); + stack_ptr = (NODE **) save_stack; + + /* + * here, we pop each parameter and check whether + * it was an array. If so, and if the arg. passed in was + * a simple variable, then the value should be copied back. + * This achieves "call-by-reference" for arrays. + */ + sp = local_stack; + count = f->lnode->param_cnt; + for (argp = arg_list; count > 0 && argp != NULL; argp = argp->rnode) { + arg = argp->lnode; + n = *sp++; + if (arg->type == Node_var && n->type == Node_var_array) { + arg->var_array = n->var_array; + arg->type = Node_var_array; + } + deref = n->lnode; + do_deref(); + freenode(n); + count--; + } + while (count-- > 0) { + n = *sp++; + deref = n->lnode; + do_deref(); + freenode(n); + } + free((char *) local_stack); + + /* Restore the loop_tag stuff if necessary. */ + if (save_loop_tag_valid) { + int junk = 0; + + loop_tag_valid = (int) save_loop_tag_valid; + RESTORE_BINDING(loop_tag_stack, loop_tag, junk); + } + + if (!(r->flags & PERM)) + r->flags |= TEMP; + return r; + } + + /* + * This returns a POINTER to a node pointer. get_lhs(ptr) is the current + * value of the var, or where to store the var's new value + */ + + NODE ** + get_lhs(ptr, assign) + NODE *ptr; + int assign; /* this is being called for the LHS of an assign. */ + { + register NODE **aptr; + NODE *n; + + #ifdef DEBUG + if (ptr == NULL) + cant_happen(); + #endif + deref = NULL; + field_num = -1; + switch (ptr->type) { + case Node_var: + case Node_var_array: + if (ptr == NF_node && (int) NF_node->var_value->numbr == -1) + (void) get_field(HUGE-1, assign); /* parse record */ + deref = ptr->var_value; + #ifdef DEBUG + if (deref->type != Node_val) + cant_happen(); + if (deref->flags == 0) + cant_happen(); + #endif + return &(ptr->var_value); + + case Node_param_list: + n = stack_ptr[ptr->param_cnt]; + deref = n->var_value; + #ifdef DEBUG + if (deref->type != Node_val) + cant_happen(); + if (deref->flags == 0) + cant_happen(); + #endif + return &(n->var_value); + + case Node_field_spec: + n = tree_eval(ptr->lnode); + field_num = (int) force_number(n); + free_temp(n); + if (field_num < 0) + fatal("attempt to access field %d", field_num); + aptr = get_field(field_num, assign); + deref = *aptr; + return aptr; + + case Node_subscript: + n = ptr->lnode; + if (n->type == Node_param_list) + n = stack_ptr[n->param_cnt]; + aptr = assoc_lookup(n, concat_exp(ptr->rnode)); + deref = *aptr; + #ifdef DEBUG + if (deref->type != Node_val) + cant_happen(); + if (deref->flags == 0) + cant_happen(); + #endif + return aptr; + case Node_func: + fatal ("`%s' is a function, assignment is not allowed", + ptr->lnode->param); + default: + cant_happen(); + } + return 0; + } + + static NODE * + match_op(tree) + NODE *tree; + { + NODE *t1; + struct re_pattern_buffer *rp; + int i; + int match = 1; + + if (tree->type == Node_nomatch) + match = 0; + if (tree->type == Node_regex) + t1 = WHOLELINE; + else { + if (tree->lnode) + t1 = force_string(tree_eval(tree->lnode)); + else + t1 = WHOLELINE; + tree = tree->rnode; + } + if (tree->type == Node_regex) { + rp = tree->rereg; + if (!strict && ((IGNORECASE_node->var_value->numbr != 0) + ^ (tree->re_case != 0))) { + /* recompile since case sensitivity differs */ + rp = tree->rereg = + mk_re_parse(tree->re_text, + (IGNORECASE_node->var_value->numbr != 0)); + tree->re_case = + (IGNORECASE_node->var_value->numbr != 0); + } + } else { + rp = make_regexp(force_string(tree_eval(tree)), + (IGNORECASE_node->var_value->numbr != 0)); + if (rp == NULL) + cant_happen(); + } + i = re_search(rp, t1->stptr, t1->stlen, 0, t1->stlen, + (struct re_registers *) NULL); + i = (i == -1) ^ (match == 1); + free_temp(t1); + if (tree->type != Node_regex) { + free(rp->buffer); + free(rp->fastmap); + free((char *) rp); + } + return tmp_number((AWKNUM) i); + } Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/field.c diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/field.c:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/field.c Mon Feb 23 11:05:56 2004 *************** *** 0 **** --- 1,424 ---- + /* + * field.c - routines for dealing with fields and record parsing + */ + + /* + * Copyright (C) 1986, 1988, 1989 the Free Software Foundation, Inc. + * + * This file is part of GAWK, the GNU implementation of the + * AWK Progamming Language. + * + * GAWK is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 1, or (at your option) + * any later version. + * + * GAWK is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GAWK; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + #include "gawk.h" + + extern void assoc_clear(); + extern int a_get_three(); + extern int get_rs(); + + static char *get_fs(); + static int re_split(); + static int parse_fields(); + static void set_element(); + + char *line_buf = NULL; /* holds current input line */ + + static char *parse_extent; /* marks where to restart parse of record */ + static int parse_high_water=0; /* field number that we have parsed so far */ + static char f_empty[] = ""; + static char *save_fs = " "; /* save current value of FS when line is read, + * to be used in deferred parsing + */ + + + NODE **fields_arr; /* array of pointers to the field nodes */ + NODE node0; /* node for $0 which never gets free'd */ + int node0_valid = 1; /* $(>0) has not been changed yet */ + + void + init_fields() + { + emalloc(fields_arr, NODE **, sizeof(NODE *), "init_fields"); + node0.type = Node_val; + node0.stref = 0; + node0.stptr = ""; + node0.flags = (STR|PERM); /* never free buf */ + fields_arr[0] = &node0; + } + + /* + * Danger! Must only be called for fields we know have just been blanked, or + * fields we know don't exist yet. + */ + + /*ARGSUSED*/ + static void + set_field(num, str, len, dummy) + int num; + char *str; + int len; + NODE *dummy; /* not used -- just to make interface same as set_element */ + { + NODE *n; + int t; + static int nf_high_water = 0; + + if (num > nf_high_water) { + erealloc(fields_arr, NODE **, (num + 1) * sizeof(NODE *), "set_field"); + nf_high_water = num; + } + /* fill in fields that don't exist */ + for (t = parse_high_water + 1; t < num; t++) + fields_arr[t] = Nnull_string; + n = make_string(str, len); + (void) force_number(n); + fields_arr[num] = n; + parse_high_water = num; + } + + /* Someone assigned a value to $(something). Fix up $0 to be right */ + static void + rebuild_record() + { + register int tlen; + register NODE *tmp; + NODE *ofs; + char *ops; + register char *cops; + register NODE **ptr; + register int ofslen; + + tlen = 0; + ofs = force_string(OFS_node->var_value); + ofslen = ofs->stlen; + ptr = &fields_arr[parse_high_water]; + while (ptr > &fields_arr[0]) { + tmp = force_string(*ptr); + tlen += tmp->stlen; + ptr--; + } + tlen += (parse_high_water - 1) * ofslen; + emalloc(ops, char *, tlen + 1, "fix_fields"); + cops = ops; + ops[0] = '\0'; + for (ptr = &fields_arr[1]; ptr <= &fields_arr[parse_high_water]; ptr++) { + tmp = *ptr; + if (tmp->stlen == 1) + *cops++ = tmp->stptr[0]; + else if (tmp->stlen != 0) { + memcpy(cops, tmp->stptr, tmp->stlen); + cops += tmp->stlen; + } + if (ptr != &fields_arr[parse_high_water]) { + if (ofslen == 1) + *cops++ = ofs->stptr[0]; + else if (ofslen != 0) { + memcpy(cops, ofs->stptr, ofslen); + cops += ofslen; + } + } + } + tmp = make_string(ops, tlen); + free(ops); + deref = fields_arr[0]; + do_deref(); + fields_arr[0] = tmp; + } + + /* + * setup $0, but defer parsing rest of line until reference is made to $(>0) + * or to NF. At that point, parse only as much as necessary. + */ + void + set_record(buf, cnt) + char *buf; + int cnt; + { + register int i; + + assign_number(&NF_node->var_value, (AWKNUM)-1); + for (i = 1; i <= parse_high_water; i++) { + deref = fields_arr[i]; + do_deref(); + } + parse_high_water = 0; + node0_valid = 1; + if (buf == line_buf) { + deref = fields_arr[0]; + do_deref(); + save_fs = get_fs(); + node0.type = Node_val; + node0.stptr = buf; + node0.stlen = cnt; + node0.stref = 1; + node0.flags = (STR|PERM); /* never free buf */ + fields_arr[0] = &node0; + } + } + + NODE ** + get_field(num, assign) + int num; + int assign; /* this field is on the LHS of an assign */ + { + int n; + + /* + * if requesting whole line but some other field has been altered, + * then the whole line must be rebuilt + */ + if (num == 0 && (node0_valid == 0 || assign)) { + /* first, parse remainder of input record */ + if (NF_node->var_value->numbr == -1) { + if (parse_high_water == 0) + parse_extent = node0.stptr; + n = parse_fields(HUGE-1, &parse_extent, + node0.stlen - (parse_extent - node0.stptr), + save_fs, set_field, (NODE *)NULL); + assign_number(&NF_node->var_value, (AWKNUM)n); + } + if (node0_valid == 0) + rebuild_record(); + return &fields_arr[0]; + } + if (num > 0 && assign) + node0_valid = 0; + if (num <= parse_high_water) /* we have already parsed this field */ + return &fields_arr[num]; + if (parse_high_water == 0 && num > 0) /* starting at the beginning */ + parse_extent = fields_arr[0]->stptr; + /* + * parse up to num fields, calling set_field() for each, and saving + * in parse_extent the point where the parse left off + */ + n = parse_fields(num, &parse_extent, + fields_arr[0]->stlen - (parse_extent-fields_arr[0]->stptr), + save_fs, set_field, (NODE *)NULL); + if (num == HUGE-1) + num = n; + if (n < num) { /* requested field number beyond end of record; + * set_field will just extend the number of fields, + * with empty fields + */ + set_field(num, f_empty, 0, (NODE *) NULL); + /* + * if this field is onthe LHS of an assignment, then we want to + * set NF to this value, below + */ + if (assign) + n = num; + } + /* + * if we reached the end of the record, set NF to the number of fields + * so far. Note that num might actually refer to a field that + * is beyond the end of the record, but we won't set NF to that value at + * this point, since this is only a reference to the field and NF + * only gets set if the field is assigned to -- in this case n has + * been set to num above + */ + if (*parse_extent == '\0') + assign_number(&NF_node->var_value, (AWKNUM)n); + + return &fields_arr[num]; + } + + /* + * this is called both from get_field() and from do_split() + */ + static int + parse_fields(up_to, buf, len, fs, set, n) + int up_to; /* parse only up to this field number */ + char **buf; /* on input: string to parse; on output: point to start next */ + int len; + register char *fs; + void (*set) (); /* routine to set the value of the parsed field */ + NODE *n; + { + char *s = *buf; + register char *field; + register char *scan; + register char *end = s + len; + int NF = parse_high_water; + char rs = get_rs(); + + + if (up_to == HUGE) + NF = 0; + if (*fs && *(fs + 1) != '\0') { /* fs is a regexp */ + struct re_registers reregs; + + scan = s; + if (rs == 0 && STREQ(FS_node->var_value->stptr, " ")) { + while ((*scan == '\n' || *scan == ' ' || *scan == '\t') + && scan < end) + scan++; + } + s = scan; + while (scan < end + && re_split(scan, (int)(end - scan), fs, &reregs) != -1 + && NF < up_to) { + if (reregs.end[0] == 0) { /* null match */ + scan++; + if (scan == end) { + (*set)(++NF, s, scan - s, n); + up_to = NF; + break; + } + continue; + } + (*set)(++NF, s, scan - s + reregs.start[0], n); + scan += reregs.end[0]; + s = scan; + } + if (NF != up_to && scan <= end) { + if (!(rs == 0 && scan == end)) { + (*set)(++NF, scan, (int)(end - scan), n); + scan = end; + } + } + *buf = scan; + return (NF); + } + for (scan = s; scan < end && NF < up_to; scan++) { + /* + * special case: fs is single space, strip leading + * whitespace + */ + if (*fs == ' ') { + while ((*scan == ' ' || *scan == '\t') && scan < end) + scan++; + if (scan >= end) + break; + } + field = scan; + if (*fs == ' ') + while (*scan != ' ' && *scan != '\t' && scan < end) + scan++; + else { + while (*scan != *fs && scan < end) + scan++; + if (rs && scan == end-1 && *scan == *fs) { + (*set)(++NF, field, (int)(scan - field), n); + field = scan; + } + } + (*set)(++NF, field, (int)(scan - field), n); + if (scan == end) + break; + } + *buf = scan; + return NF; + } + + static int + re_split(buf, len, fs, reregsp) + char *buf, *fs; + int len; + struct re_registers *reregsp; + { + typedef struct re_pattern_buffer RPAT; + static RPAT *rp; + static char *last_fs = NULL; + + if ((last_fs != NULL && !STREQ(fs, last_fs)) + || (rp && ! strict && ((IGNORECASE_node->var_value->numbr != 0) + ^ (rp->translate != NULL)))) + { + /* fs has changed or IGNORECASE has changed */ + free(rp->buffer); + free(rp->fastmap); + free((char *) rp); + free(last_fs); + last_fs = NULL; + } + if (last_fs == NULL) { /* first time */ + emalloc(rp, RPAT *, sizeof(RPAT), "re_split"); + memset((char *) rp, 0, sizeof(RPAT)); + emalloc(rp->buffer, char *, 8, "re_split"); + rp->allocated = 8; + emalloc(rp->fastmap, char *, 256, "re_split"); + emalloc(last_fs, char *, strlen(fs) + 1, "re_split"); + (void) strcpy(last_fs, fs); + if (! strict && IGNORECASE_node->var_value->numbr != 0.0) + rp->translate = casetable; + else + rp->translate = NULL; + if (re_compile_pattern(fs, strlen(fs), rp) != NULL) + fatal("illegal regular expression for FS: `%s'", fs); + } + return re_search(rp, buf, len, 0, len, reregsp); + } + + NODE * + do_split(tree) + NODE *tree; + { + NODE *t1, *t2, *t3; + register char *splitc; + char *s; + NODE *n; + + if (a_get_three(tree, &t1, &t2, &t3) < 3) + splitc = get_fs(); + else + splitc = force_string(t3)->stptr; + + n = t2; + if (t2->type == Node_param_list) + n = stack_ptr[t2->param_cnt]; + if (n->type != Node_var && n->type != Node_var_array) + fatal("second argument of split is not a variable"); + assoc_clear(n); + + tree = force_string(t1); + + s = tree->stptr; + return tmp_number((AWKNUM) + parse_fields(HUGE, &s, tree->stlen, splitc, set_element, n)); + } + + static char * + get_fs() + { + register NODE *tmp; + static char buf[10]; + + tmp = force_string(FS_node->var_value); + if (get_rs() == 0) { + if (tmp->stlen == 1) { + if (tmp->stptr[0] == ' ') + (void) strcpy(buf, "[ \n]+"); + else + sprintf(buf, "[%c\n]", tmp->stptr[0]); + } else if (tmp->stlen == 0) { + buf[0] = '\n'; + buf[1] = '\0'; + } else + return tmp->stptr; + return buf; + } + return tmp->stptr; + } + + static void + set_element(num, s, len, n) + int num; + char *s; + int len; + NODE *n; + { + *assoc_lookup(n, tmp_number((AWKNUM) (num))) = make_string(s, len); + } Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/gawk.h diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/gawk.h:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/gawk.h Mon Feb 23 11:05:56 2004 *************** *** 0 **** --- 1,642 ---- + /* + * awk.h -- Definitions for gawk. + */ + + /* + * Copyright (C) 1986, 1988, 1989 the Free Software Foundation, Inc. + * + * This file is part of GAWK, the GNU implementation of the + * AWK Progamming Language. + * + * GAWK is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 1, or (at your option) + * any later version. + * + * GAWK is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GAWK; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + /* ------------------------------ Includes ------------------------------ */ + #include + #include + #include + //#include + #include + #include + #include + #include + + #include "regex.h" + + /* ------------------- System Functions, Variables, etc ------------------- */ + /* nasty nasty SunOS-ism */ + #ifdef sparc + #include + #ifdef lint + extern char *alloca(); + #endif + #else + extern char *alloca(); + #endif + #ifdef SPRINTF_INT + extern int sprintf(); + #else /* not USG */ + /* nasty nasty berkelixm */ + #define setjmp _setjmp + #define longjmp _longjmp + + extern int sprintf(); + #endif + /* + * if you don't have vprintf, but you are BSD, the version defined in + * vprintf.c should do the trick. Otherwise, use this and cross your fingers. + */ + #if defined(VPRINTF_MISSING) && !defined(DOPRNT_MISSING) && !defined(BSDSTDIO) + #define vfprintf(fp,fmt,arg) _doprnt((fmt), (arg), (fp)) + #endif + + #if 0 + #ifdef __STDC__ + extern void *malloc(unsigned), *realloc(void *, unsigned); + /* LLVM - Changed this to match Linux/Solaris free() */ + extern void free(void *); + /* LLVM - Fixed prototype */ + extern char *getenv(const char *); + + extern char *strcpy(char *, char *), *strcat(char *, char *), *strncpy(char *, char *, int); + extern int strcmp(char *, char *); + extern int strncmp(char *, char *, int); + extern int strncasecmp(char *, char *, int); + extern char *strerror(int); + extern char *strchr(char *, int); + extern int strlen(char *); + extern char *memcpy(char *, char *, int); + extern int memcmp(char *, char *, int); + extern char *memset(char *, int, int); + + /* extern int fprintf(FILE *, char *, ...); */ + extern int fprintf(); + extern int vfprintf(); + #ifndef MSDOS + extern unsigned int fwrite(const void *, unsigned int, unsigned int, FILE *); + #endif + extern int fflush(FILE *); + extern int fclose(FILE *); + extern int pclose(FILE *); + #ifndef MSDOS + extern int fputs(const char *, FILE *); + #endif + extern void abort(); + extern int isatty(int); + extern void exit(int); + /* LLVM - Fixed prototype */ + extern int system(const char *); + extern int sscanf(/* char *, char *, ... */); + + /* LLVM - Fixed prototype */ + extern double atof(const char *); + extern int fstat(int, struct stat *); + extern off_t lseek(int, off_t, int); + extern int fseek(FILE *, long, int); + extern int close(int); + #endif + /* LLVM - Get rid of these prototypes */ + #if 0 + extern int open(); + extern int pipe(int *); + extern int dup2(int, int); + #endif + + #if 0 + #ifndef MSDOS + extern int unlink(char *); + #endif + extern int fork(); + extern int execl(/* char *, char *, ... */); + extern int read(int, char *, int); + extern int wait(int *); + extern void _exit(int); + #else + extern void _exit(); + extern int wait(); + extern int read(); + extern int execl(); + extern int fork(); + extern int unlink(); + extern int dup2(); + extern int pipe(); + extern int open(); + extern int close(); + extern int fseek(); + extern off_t lseek(); + extern int fstat(); + extern void exit(); + extern int system(); + extern int isatty(); + extern void abort(); + extern int fputs(); + extern int fclose(); + extern int pclose(); + extern int fflush(); + extern int fwrite(); + extern int fprintf(); + extern int vfprintf(); + extern int sscanf(); + extern char *malloc(), *realloc(); + extern void free(); + extern char *getenv(); + + extern int strcmp(); + extern int strncmp(); + extern int strncasecmp(); + extern int strlen(); + extern char *strcpy(), *strcat(), *strncpy(); + extern char *memset(); + extern int memcmp(); + extern char *memcpy(); + extern char *strerror(); + extern char *strchr(); + + extern double atof(); + #endif + #endif + + #ifndef MSDOS + extern int errno; + #endif /* MSDOS */ + + /* ------------------ Constants, Structures, Typedefs ------------------ */ + #define AWKNUM double + + typedef enum { + /* illegal entry == 0 */ + Node_illegal, + + /* binary operators lnode and rnode are the expressions to work on */ + Node_times, + Node_quotient, + Node_mod, + Node_plus, + Node_minus, + Node_cond_pair, /* conditional pair (see Node_line_range) */ + Node_subscript, + Node_concat, + Node_exp, + + /* unary operators subnode is the expression to work on */ + /*10*/ Node_preincrement, + Node_predecrement, + Node_postincrement, + Node_postdecrement, + Node_unary_minus, + Node_field_spec, + + /* assignments lnode is the var to assign to, rnode is the exp */ + Node_assign, + Node_assign_times, + Node_assign_quotient, + Node_assign_mod, + /*20*/ Node_assign_plus, + Node_assign_minus, + Node_assign_exp, + + /* boolean binaries lnode and rnode are expressions */ + Node_and, + Node_or, + + /* binary relationals compares lnode and rnode */ + Node_equal, + Node_notequal, + Node_less, + Node_greater, + Node_leq, + /*30*/ Node_geq, + Node_match, + Node_nomatch, + + /* unary relationals works on subnode */ + Node_not, + + /* program structures */ + Node_rule_list, /* lnode is a rule, rnode is rest of list */ + Node_rule_node, /* lnode is pattern, rnode is statement */ + Node_statement_list, /* lnode is statement, rnode is more list */ + Node_if_branches, /* lnode is to run on true, rnode on false */ + Node_expression_list, /* lnode is an exp, rnode is more list */ + Node_param_list, /* lnode is a variable, rnode is more list */ + + /* keywords */ + /*40*/ Node_K_if, /* lnode is conditonal, rnode is if_branches */ + Node_K_while, /* lnode is condtional, rnode is stuff to run */ + Node_K_for, /* lnode is for_struct, rnode is stuff to run */ + Node_K_arrayfor, /* lnode is for_struct, rnode is stuff to run */ + Node_K_break, /* no subs */ + Node_K_continue, /* no stuff */ + Node_K_print, /* lnode is exp_list, rnode is redirect */ + Node_K_printf, /* lnode is exp_list, rnode is redirect */ + Node_K_next, /* no subs */ + Node_K_exit, /* subnode is return value, or NULL */ + Node_K_do, /* lnode is conditional, rnode stuff to run */ + Node_K_return, + Node_K_delete, + Node_K_getline, + Node_K_function, /* lnode is statement list, rnode is params */ + + /* I/O redirection for print statements */ + Node_redirect_output, /* subnode is where to redirect */ + Node_redirect_append, /* subnode is where to redirect */ + Node_redirect_pipe, /* subnode is where to redirect */ + Node_redirect_pipein, /* subnode is where to redirect */ + Node_redirect_input, /* subnode is where to redirect */ + + /* Variables */ + Node_var, /* rnode is value, lnode is array stuff */ + Node_var_array, /* array is ptr to elements, asize num of + * eles */ + Node_val, /* node is a value - type in flags */ + + /* Builtins subnode is explist to work on, proc is func to call */ + Node_builtin, + + /* + * pattern: conditional ',' conditional ; lnode of Node_line_range + * is the two conditionals (Node_cond_pair), other word (rnode place) + * is a flag indicating whether or not this range has been entered. + */ + Node_line_range, + + /* + * boolean test of membership in array lnode is string-valued + * expression rnode is array name + */ + Node_in_array, + + Node_func, /* lnode is param. list, rnode is body */ + Node_func_call, /* lnode is name, rnode is argument list */ + + Node_cond_exp, /* lnode is conditonal, rnode is if_branches */ + Node_regex, + Node_hashnode, + Node_ahash, + } NODETYPE; + + /* + * NOTE - this struct is a rather kludgey -- it is packed to minimize + * space usage, at the expense of cleanliness. Alter at own risk. + */ + typedef struct exp_node { + union { + struct { + union { + struct exp_node *lptr; + char *param_name; + char *retext; + struct exp_node *nextnode; + } l; + union { + struct exp_node *rptr; + struct exp_node *(*pptr) (); + struct re_pattern_buffer *preg; + struct for_loop_header *hd; + struct exp_node **av; + int r_ent; /* range entered */ + } r; + char *name; + short number; + unsigned char recase; + } nodep; + struct { + AWKNUM fltnum; /* this is here for optimal packing of + * the structure on many machines + */ + char *sp; + short slen; + unsigned char sref; + } val; + struct { + struct exp_node *next; + char *name; + int length; + struct exp_node *value; + } hash; + #define hnext sub.hash.next + #define hname sub.hash.name + #define hlength sub.hash.length + #define hvalue sub.hash.value + struct { + struct exp_node *next; + struct exp_node *name; + struct exp_node *value; + } ahash; + #define ahnext sub.ahash.next + #define ahname sub.ahash.name + #define ahvalue sub.ahash.value + } sub; + NODETYPE type; + unsigned char flags; + # define MEM 0x7 + # define MALLOC 1 /* can be free'd */ + # define TEMP 2 /* should be free'd */ + # define PERM 4 /* can't be free'd */ + # define VAL 0x18 + # define NUM 8 /* numeric value is valid */ + # define STR 16 /* string value is valid */ + # define NUMERIC 32 /* entire field is numeric */ + } NODE; + + #define lnode sub.nodep.l.lptr + #define nextp sub.nodep.l.nextnode + #define rnode sub.nodep.r.rptr + #define source_file sub.nodep.name + #define source_line sub.nodep.number + #define param_cnt sub.nodep.number + #define param sub.nodep.l.param_name + + #define subnode lnode + #define proc sub.nodep.r.pptr + + #define reexp lnode + #define rereg sub.nodep.r.preg + #define re_case sub.nodep.recase + #define re_text sub.nodep.l.retext + + #define forsub lnode + #define forloop rnode->sub.nodep.r.hd + + #define stptr sub.val.sp + #define stlen sub.val.slen + #define stref sub.val.sref + #define valstat flags + + #define numbr sub.val.fltnum + + #define var_value lnode + #define var_array sub.nodep.r.av + + #define condpair lnode + #define triggered sub.nodep.r.r_ent + + #define HASHSIZE 101 + + typedef struct for_loop_header { + NODE *init; + NODE *cond; + NODE *incr; + } FOR_LOOP_HEADER; + + /* for "for(iggy in foo) {" */ + struct search { + int numleft; + NODE **arr_ptr; + NODE *bucket; + NODE *retval; + }; + + /* for faster input, bypass stdio */ + typedef struct iobuf { + int fd; + char *buf; + char *off; + int size; /* this will be determined by an fstat() call */ + int cnt; + char *secbuf; + int secsiz; + int flag; + # define IOP_IS_TTY 1 + } IOBUF; + + /* + * structure used to dynamically maintain a linked-list of open files/pipes + */ + struct redirect { + int flag; + # define RED_FILE 1 + # define RED_PIPE 2 + # define RED_READ 4 + # define RED_WRITE 8 + # define RED_APPEND 16 + # define RED_NOBUF 32 + char *value; + FILE *fp; + IOBUF *iop; + int pid; + int status; + long offset; /* used for dynamic management of open files */ + struct redirect *prev; + struct redirect *next; + }; + + /* longjmp return codes, must be nonzero */ + /* Continue means either for loop/while continue, or next input record */ + #define TAG_CONTINUE 1 + /* Break means either for/while break, or stop reading input */ + #define TAG_BREAK 2 + /* Return means return from a function call; leave value in ret_node */ + #define TAG_RETURN 3 + + #ifdef MSDOS + #define HUGE 0x7fff + #else + #define HUGE 0x7fffffff + #endif + + /* -------------------------- External variables -------------------------- */ + /* gawk builtin variables */ + extern NODE *FS_node, *NF_node, *RS_node, *NR_node; + extern NODE *FILENAME_node, *OFS_node, *ORS_node, *OFMT_node; + extern NODE *FNR_node, *RLENGTH_node, *RSTART_node, *SUBSEP_node; + extern NODE *IGNORECASE_node; + + extern NODE **stack_ptr; + extern NODE *Nnull_string; + extern NODE *deref; + extern NODE **fields_arr; + extern int sourceline; + extern char *source; + extern NODE *expression_value; + + extern NODE *variables[]; + + extern NODE *_t; /* used as temporary in tree_eval */ + + extern char *myname; + + extern int node0_valid; + extern int field_num; + extern int strict; + + /* ------------------------- Pseudo-functions ------------------------- */ + #define is_identchar(c) (isalnum(c) || (c) == '_') + + + #define free_temp(n) if ((n)->flags&TEMP) { deref = (n); do_deref(); } else + #define tree_eval(t) (_t = (t),(_t) == NULL ? Nnull_string : \ + ((_t)->type == Node_val ? (_t) : r_tree_eval((_t)))) + #define make_string(s,l) make_str_node((s),(l),0) + + #define cant_happen() fatal("line %d, file: %s; bailing out", \ + __LINE__, __FILE__); + #ifdef MEMDEBUG + #define memmsg(x,y,z,zz) fprintf(stderr, "malloc: %s: %s: %d %0x\n", z, x, y, zz) + #define free(s) fprintf(stderr, "free: s: %0x\n", s), do_free(s) + #else + #define memmsg(x,y,z,zz) + #endif + + #ifdef BWGC + #define emalloc(var,ty,x,str) if ((var = (ty) GC_malloc((unsigned)((x)==0?1:(x)))) == NULL)\ + fatal("%s: %s: can't allocate memory (%s)",\ + (str), "var", strerror(errno)); else\ + memmsg("var", x, str, var) + #define erealloc(var,ty,x,str) if((var=(ty)GC_realloc((char *)var,\ + (unsigned)(x)))==NULL)\ + fatal("%s: %s: can't allocate memory (%s)",\ + (str), "var", strerror(errno)); else\ + memmsg("re: var", x, str, var) + #else + #define emalloc(var,ty,x,str) if ((var = (ty) malloc((unsigned)(x))) == NULL)\ + fatal("%s: %s: can't allocate memory (%s)",\ + (str), "var", strerror(errno)); else\ + memmsg("var", x, str, var) + #define erealloc(var,ty,x,str) if((var=(ty)realloc((char *)var,\ + (unsigned)(x)))==NULL)\ + fatal("%s: %s: can't allocate memory (%s)",\ + (str), "var", strerror(errno)); else\ + memmsg("re: var", x, str, var) + #endif BWGC + #ifdef DEBUG + #define force_number r_force_number + #define force_string r_force_string + #else + #ifdef lint + extern AWKNUM force_number(); + #endif + #ifdef MSDOS + extern double _msc51bug; + #define force_number(n) (_msc51bug=(_t = (n),(_t->flags & NUM) ? _t->numbr : r_force_number(_t))) + #else + #define force_number(n) (_t = (n),(_t->flags & NUM) ? _t->numbr : r_force_number(_t)) + #endif + #define force_string(s) (_t = (s),(_t->flags & STR) ? _t : r_force_string(_t)) + #endif + + #define STREQ(a,b) (*(a) == *(b) && strcmp((a), (b)) == 0) + #define STREQN(a,b,n) ((n) && *(a) == *(b) && strncmp((a), (b), (n)) == 0) + + #define WHOLELINE (node0_valid ? fields_arr[0] : *get_field(0,0)) + + /* ------------- Function prototypes or defs (as appropriate) ------------- */ + #ifdef __STDC__ + extern int parse_escape(char **); + extern int devopen(char *, char *); + extern struct re_pattern_buffer *make_regexp(NODE *, int); + extern struct re_pattern_buffer *mk_re_parse(char *, int); + extern NODE *variable(char *); + extern NODE *install(NODE **, char *, NODE *); + extern NODE *lookup(NODE **, char *); + extern NODE *make_name(char *, NODETYPE); + extern int interpret(NODE *); + extern NODE *r_tree_eval(NODE *); + extern void assign_number(NODE **, double); + extern int cmp_nodes(NODE *, NODE *); + extern struct redirect *redirect(NODE *, int *); + extern int flush_io(void); + extern void print_simple(NODE *, FILE *); + extern void warning(char *,...); + /* extern void warning(); */ + extern void fatal(char *,...); + /* extern void fatal(); */ + extern void set_record(char *, int); + extern NODE **get_field(int, int); + extern NODE **get_lhs(NODE *, int); + extern void do_deref(void ); + extern struct search *assoc_scan(NODE *); + extern struct search *assoc_next(struct search *); + extern NODE **assoc_lookup(NODE *, NODE *); + extern double r_force_number(NODE *); + extern NODE *r_force_string(NODE *); + extern NODE *newnode(NODETYPE); + extern NODE *dupnode(NODE *); + extern NODE *make_number(double); + extern NODE *tmp_number(double); + extern NODE *make_str_node(char *, int, int); + extern NODE *tmp_string(char *, int); + extern char *re_compile_pattern(char *, int, struct re_pattern_buffer *); + extern int re_search(struct re_pattern_buffer *, char *, int, int, int, struct re_registers *); + extern void freenode(NODE *); + + #else + extern int parse_escape(); + extern void freenode(); + extern int devopen(); + extern struct re_pattern_buffer *make_regexp(); + extern struct re_pattern_buffer *mk_re_parse(); + extern NODE *variable(); + extern NODE *install(); + extern NODE *lookup(); + extern int interpret(); + extern NODE *r_tree_eval(); + extern void assign_number(); + extern int cmp_nodes(); + extern struct redirect *redirect(); + extern int flush_io(); + extern void print_simple(); + extern void warning(); + extern void fatal(); + extern void set_record(); + extern NODE **get_field(); + extern NODE **get_lhs(); + extern void do_deref(); + extern struct search *assoc_scan(); + extern struct search *assoc_next(); + extern NODE **assoc_lookup(); + extern double r_force_number(); + extern NODE *r_force_string(); + extern NODE *newnode(); + extern NODE *dupnode(); + extern NODE *make_number(); + extern NODE *tmp_number(); + extern NODE *make_str_node(); + extern NODE *tmp_string(); + extern char *re_compile_pattern(); + extern int re_search(); + #endif + + #if !defined(__STDC__) || __STDC__ <= 0 + #define volatile + #endif + + /* Figure out what '\a' really is. */ + #ifdef __STDC__ + #define BELL '\a' /* sure makes life easy, don't it? */ + #else + # if 'z' - 'a' == 25 /* ascii */ + # if 'a' != 97 /* machine is dumb enough to use mark parity */ + # define BELL '\207' + # else + # define BELL '\07' + # endif + # else + # define BELL '\057' + # endif + #endif + + #ifndef SIGTYPE + #define SIGTYPE void + #endif + + extern char casetable[]; /* for case-independent regexp matching */ + + #ifdef BWGC + #define malloc(n) GC_malloc((n)==0?1:(n)) + #endif + #ifdef IGNOREFREE + #define free(ptr) {}; + #endif Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/io.c diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/io.c:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/io.c Mon Feb 23 11:05:56 2004 *************** *** 0 **** --- 1,811 ---- + /* + * io.c - routines for dealing with input and output and records + */ + + /* + * Copyright (C) 1986, 1988, 1989 the Free Software Foundation, Inc. + * + * This file is part of GAWK, the GNU implementation of the + * AWK Progamming Language. + * + * GAWK is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 1, or (at your option) + * any later version. + * + * GAWK is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GAWK; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + #include "gawk.h" + #ifndef O_RDONLY + #include + #endif + #include + + extern FILE *popen(); + + static void do_file(); + static IOBUF *nextfile(); + static int get_a_record(); + static int iop_close(); + static IOBUF *iop_alloc(); + static void close_one(); + static int close_redir(); + static IOBUF *gawk_popen(); + static int gawk_pclose(); + + static struct redirect *red_head = NULL; + static int getline_redirect = 0; /* "getline cnt != EOF) + return curfile; + for (; i < (int) (ARGC_node->lnode->numbr); i++) { + arg = (*assoc_lookup(ARGV_node, tmp_number((AWKNUM) i)))->stptr; + if (*arg == '\0') + continue; + cp = strchr(arg, '='); + if (cp != NULL) { + *cp++ = '\0'; + variable(arg)->var_value = make_string(cp, strlen(cp)); + *--cp = '='; /* restore original text of ARGV */ + } else { + files++; + if (STREQ(arg, "-")) + fd = 0; + else + fd = devopen(arg, "r"); + if (fd == -1) + fatal("cannot open file `%s' for reading (%s)", + arg, strerror(errno)); + /* NOTREACHED */ + /* This is a kludge. */ + deref = FILENAME_node->var_value; + do_deref(); + FILENAME_node->var_value = + make_string(arg, strlen(arg)); + FNR_node->var_value->numbr = 0.0; + i++; + break; + } + } + if (files == 0) { + files++; + /* no args. -- use stdin */ + /* FILENAME is init'ed to "-" */ + /* FNR is init'ed to 0 */ + fd = 0; + } + if (fd == -1) + return NULL; + return curfile = iop_alloc(fd); + } + + static IOBUF * + iop_alloc(fd) + int fd; + { + IOBUF *iop; + struct stat stb; + + /* + * System V doesn't have the file system block size in the + * stat structure. So we have to make some sort of reasonable + * guess. We use stdio's BUFSIZ, since that is what it was + * meant for in the first place. + */ + #ifdef BLKSIZE_MISSING + #define DEFBLKSIZE BUFSIZ + #else + #define DEFBLKSIZE (stb.st_blksize ? stb.st_blksize : BUFSIZ) + #endif + + if (fd == -1) + return NULL; + emalloc(iop, IOBUF *, sizeof(IOBUF), "nextfile"); + iop->flag = 0; + if (isatty(fd)) { + iop->flag |= IOP_IS_TTY; + iop->size = BUFSIZ; + } else if (fstat(fd, &stb) == -1) + fatal("can't stat fd %d (%s)", fd, strerror(errno)); + else if (lseek(fd, 0L, 0) == -1) + iop->size = DEFBLKSIZE; + else + iop->size = (stb.st_size < DEFBLKSIZE ? + stb.st_size+1 : DEFBLKSIZE); + errno = 0; + iop->fd = fd; + emalloc(iop->buf, char *, iop->size, "nextfile"); + iop->off = iop->buf; + iop->cnt = 0; + iop->secsiz = iop->size < BUFSIZ ? iop->size : BUFSIZ; + emalloc(iop->secbuf, char *, iop->secsiz, "nextfile"); + return iop; + } + + void + do_input() + { + IOBUF *iop; + extern int exiting; + + while ((iop = nextfile()) != NULL) { + do_file(iop); + if (exiting) + break; + } + } + + static int + iop_close(iop) + IOBUF *iop; + { + int ret; + + ret = close(iop->fd); + if (ret == -1) + warning("close of fd %d failed (%s)", iop->fd, strerror(errno)); + free(iop->buf); + free(iop->secbuf); + free((char *)iop); + return ret == -1 ? 1 : 0; + } + + /* + * This reads in a record from the input file + */ + static int + inrec(iop) + IOBUF *iop; + { + int cnt; + int retval = 0; + + cnt = get_a_record(&line_buf, iop); + if (cnt == EOF) { + cnt = 0; + retval = 1; + } else { + if (!getline_redirect) { + assign_number(&NR_node->var_value, + NR_node->var_value->numbr + 1.0); + assign_number(&FNR_node->var_value, + FNR_node->var_value->numbr + 1.0); + } + } + set_record(line_buf, cnt); + + return retval; + } + + static void + do_file(iop) + IOBUF *iop; + { + /* This is where it spends all its time. The infamous MAIN LOOP */ + if (inrec(iop) == 0) + while (interpret(expression_value) && inrec(iop) == 0) + ; + (void) iop_close(iop); + } + + int + get_rs() + { + register NODE *tmp; + + tmp = force_string(RS_node->var_value); + if (tmp->stlen == 0) + return 0; + return *(tmp->stptr); + } + + /* Redirection for printf and print commands */ + struct redirect * + redirect(tree, errflg) + NODE *tree; + int *errflg; + { + register NODE *tmp; + register struct redirect *rp; + register char *str; + int tflag = 0; + int outflag = 0; + char *direction = "to"; + char *mode; + int fd; + + switch (tree->type) { + case Node_redirect_append: + tflag = RED_APPEND; + case Node_redirect_output: + outflag = (RED_FILE|RED_WRITE); + tflag |= outflag; + break; + case Node_redirect_pipe: + tflag = (RED_PIPE|RED_WRITE); + break; + case Node_redirect_pipein: + tflag = (RED_PIPE|RED_READ); + break; + case Node_redirect_input: + tflag = (RED_FILE|RED_READ); + break; + default: + fatal ("invalid tree type %d in redirect()", tree->type); + break; + } + tmp = force_string(tree_eval(tree->subnode)); + str = tmp->stptr; + for (rp = red_head; rp != NULL; rp = rp->next) + if (STREQ(rp->value, str) + && ((rp->flag & ~RED_NOBUF) == tflag + || (outflag + && (rp->flag & (RED_FILE|RED_WRITE)) == outflag))) + break; + if (rp == NULL) { + emalloc(rp, struct redirect *, sizeof(struct redirect), + "redirect"); + emalloc(str, char *, tmp->stlen+1, "redirect"); + memcpy(str, tmp->stptr, tmp->stlen+1); + rp->value = str; + rp->flag = tflag; + rp->offset = 0; + rp->fp = NULL; + rp->iop = NULL; + /* maintain list in most-recently-used first order */ + if (red_head) + red_head->prev = rp; + rp->prev = NULL; + rp->next = red_head; + red_head = rp; + } + while (rp->fp == NULL && rp->iop == NULL) { + mode = NULL; + errno = 0; + switch (tree->type) { + case Node_redirect_output: + mode = "w"; + break; + case Node_redirect_append: + mode = "a"; + break; + case Node_redirect_pipe: + if ((rp->fp = popen(str, "w")) == NULL) + fatal("can't open pipe (\"%s\") for output (%s)", + str, strerror(errno)); + rp->flag |= RED_NOBUF; + break; + case Node_redirect_pipein: + direction = "from"; + if (gawk_popen(str, rp) == NULL) + fatal("can't open pipe (\"%s\") for input (%s)", + str, strerror(errno)); + break; + case Node_redirect_input: + direction = "from"; + rp->iop = iop_alloc(devopen(str, "r")); + break; + default: + cant_happen(); + } + if (mode != NULL) { + fd = devopen(str, mode); + if (fd != -1) { + rp->fp = fdopen(fd, mode); + if (isatty(fd)) + rp->flag |= RED_NOBUF; + } + } + if (rp->fp == NULL && rp->iop == NULL) { + /* too many files open -- close one and try again */ + if (errno == ENFILE || errno == EMFILE) + close_one(); + else { + /* + * Some other reason for failure. + * + * On redirection of input from a file, + * just return an error, so e.g. getline + * can return -1. For output to file, + * complain. The shell will complain on + * a bad command to a pipe. + */ + *errflg = 1; + if (tree->type == Node_redirect_output + || tree->type == Node_redirect_append) + fatal("can't redirect %s `%s' (%s)", + direction, str, strerror(errno)); + else + return NULL; + } + } + } + if (rp->offset != 0) /* this file was previously open */ + if (fseek(rp->fp, rp->offset, 0) == -1) + fatal("can't seek to %ld on `%s' (%s)", + rp->offset, str, strerror(errno)); + free_temp(tmp); + return rp; + } + + static void + close_one() + { + register struct redirect *rp; + register struct redirect *rplast = NULL; + + /* go to end of list first, to pick up least recently used entry */ + for (rp = red_head; rp != NULL; rp = rp->next) + rplast = rp; + /* now work back up through the list */ + for (rp = rplast; rp != NULL; rp = rp->prev) + if (rp->fp && (rp->flag & RED_FILE)) { + rp->offset = ftell(rp->fp); + if (fclose(rp->fp)) + warning("close of \"%s\" failed (%s).", + rp->value, strerror(errno)); + rp->fp = NULL; + break; + } + if (rp == NULL) + /* surely this is the only reason ??? */ + fatal("too many pipes or input files open"); + } + + NODE * + do_close(tree) + NODE *tree; + { + NODE *tmp; + register struct redirect *rp; + + tmp = force_string(tree_eval(tree->subnode)); + for (rp = red_head; rp != NULL; rp = rp->next) { + if (STREQ(rp->value, tmp->stptr)) + break; + } + free_temp(tmp); + if (rp == NULL) /* no match */ + return tmp_number((AWKNUM) 0.0); + fflush(stdout); /* synchronize regular output */ + return tmp_number((AWKNUM)close_redir(rp)); + } + + static int + close_redir(rp) + register struct redirect *rp; + { + int status = 0; + + if ((rp->flag & (RED_PIPE|RED_WRITE)) == (RED_PIPE|RED_WRITE)) + status = pclose(rp->fp); + else if (rp->fp) + status = fclose(rp->fp); + else if (rp->iop) { + if (rp->flag & RED_PIPE) + status = gawk_pclose(rp); + else + status = iop_close(rp->iop); + + } + /* SVR4 awk checks and warns about status of close */ + if (status) + warning("failure status (%d) on %s close of \"%s\" (%s).", + status, + (rp->flag & RED_PIPE) ? "pipe" : + "file", rp->value, strerror(errno)); + if (rp->next) + rp->next->prev = rp->prev; + if (rp->prev) + rp->prev->next = rp->next; + else + red_head = rp->next; + free(rp->value); + free((char *)rp); + return status; + } + + int + flush_io () + { + register struct redirect *rp; + int status = 0; + + errno = 0; + if (fflush(stdout)) { + warning("error writing standard output (%s).", strerror(errno)); + status++; + } + errno = 0; + if (fflush(stderr)) { + warning("error writing standard error (%s).", strerror(errno)); + status++; + } + for (rp = red_head; rp != NULL; rp = rp->next) + /* flush both files and pipes, what the heck */ + if ((rp->flag & RED_WRITE) && rp->fp != NULL) + if (fflush(rp->fp)) { + warning("%s flush of \"%s\" failed (%s).", + (rp->flag & RED_PIPE) ? "pipe" : + "file", rp->value, strerror(errno)); + status++; + } + return status; + } + + int + close_io () + { + register struct redirect *rp; + int status = 0; + + for (rp = red_head; rp != NULL; rp = rp->next) + if (close_redir(rp)) + status++; + return status; + } + + /* devopen --- handle /dev/std{in,out,err}, /dev/fd/N, regular files */ + int + devopen (name, mode) + char *name, *mode; + { + int openfd = -1; + FILE *fdopen (); + char *cp; + int flag = 0; + + switch(mode[0]) { + case 'r': + flag = O_RDONLY; + break; + + case 'w': + flag = O_WRONLY|O_CREAT|O_TRUNC; + break; + + case 'a': + flag = O_WRONLY|O_APPEND|O_CREAT; + break; + default: + cant_happen(); + } + + #if defined(STRICT) || defined(NO_DEV_FD) + return (open (name, flag, 0666)); + #else + if (strict) + return (open (name, flag, 0666)); + + if (!STREQN (name, "/dev/", 5)) + return (open (name, flag, 0666)); + else + cp = name + 5; + + /* XXX - first three tests ignore mode */ + if (STREQ(cp, "stdin")) + return (0); + else if (STREQ(cp, "stdout")) + return (1); + else if (STREQ(cp, "stderr")) + return (2); + else if (STREQN(cp, "fd/", 3)) { + cp += 3; + if (sscanf (cp, "%d", & openfd) == 1 && openfd >= 0) + /* got something */ + return openfd; + else + return -1; + } else + return (open (name, flag, 0666)); + #endif + } + + #ifndef MSDOS + static IOBUF * + gawk_popen(cmd, rp) + char *cmd; + struct redirect *rp; + { + int p[2]; + register int pid; + + rp->pid = -1; + rp->iop = NULL; + if (pipe(p) < 0) + return NULL; + if ((pid = fork()) == 0) { + close(p[0]); + dup2(p[1], 1); + close(p[1]); + execl("/bin/sh", "sh", "-c", cmd, 0); + _exit(127); + } + if (pid == -1) + return NULL; + rp->pid = pid; + close(p[1]); + return (rp->iop = iop_alloc(p[0])); + } + + static int + gawk_pclose(rp) + struct redirect *rp; + { + SIGTYPE (*hstat)(), (*istat)(), (*qstat)(); + int pid; + int status; + struct redirect *redp; + + iop_close(rp->iop); + if (rp->pid == -1) + return rp->status; + hstat = signal(SIGHUP, SIG_IGN); + istat = signal(SIGINT, SIG_IGN); + qstat = signal(SIGQUIT, SIG_IGN); + for (;;) { + pid = wait(&status); + if (pid == -1 && errno == ECHILD) + break; + else if (pid == rp->pid) { + rp->pid = -1; + rp->status = status; + break; + } else { + for (redp = red_head; redp != NULL; redp = redp->next) + if (pid == redp->pid) { + redp->pid = -1; + redp->status = status; + break; + } + } + } + signal(SIGHUP, hstat); + signal(SIGINT, istat); + signal(SIGQUIT, qstat); + return(rp->status); + } + #else + static + struct { + char *command; + char *name; + } pipes[_NFILE]; + + static IOBUF * + gawk_popen(cmd, rp) + char *cmd; + struct redirect *rp; + { + extern char *strdup(const char *); + int current; + char *name; + static char cmdbuf[256]; + + /* get a name to use. */ + if ((name = tempnam(".", "pip")) == NULL) + return NULL; + sprintf(cmdbuf,"%s > %s", cmd, name); + system(cmdbuf); + if ((current = open(name,O_RDONLY)) == -1) + return NULL; + pipes[current].name = name; + pipes[current].command = strdup(cmd); + return (rp->iop = iop_alloc(current)); + } + + static int + gawk_pclose(rp) + struct redirect *rp; + { + int cur = rp->iop->fd; + int rval; + + rval = iop_close(rp->iop); + + /* check for an open file */ + if (pipes[cur].name == NULL) + return -1; + unlink(pipes[cur].name); + free(pipes[cur].name); + pipes[cur].name = NULL; + free(pipes[cur].command); + return rval; + } + #endif + + #define DO_END_OF_BUF len = bp - iop->off;\ + used = last - start;\ + while (len + used > iop->secsiz) {\ + iop->secsiz *= 2;\ + erealloc(iop->secbuf,char *,iop->secsiz,"get");\ + }\ + last = iop->secbuf + used;\ + start = iop->secbuf;\ + memcpy(last, iop->off, len);\ + last += len;\ + iop->cnt = read(iop->fd, iop->buf, iop->size);\ + if (iop->cnt < 0)\ + return iop->cnt;\ + end_data = iop->buf + iop->cnt;\ + iop->off = bp = iop->buf; + + #define DO_END_OF_DATA iop->cnt = read(iop->fd, end_data, end_buf - end_data);\ + if (iop->cnt < 0)\ + return iop->cnt;\ + end_data += iop->cnt;\ + if (iop->cnt == 0)\ + break;\ + iop->cnt = end_data - iop->buf; + + static int + get_a_record(res, iop) + char **res; + IOBUF *iop; + { + register char *end_data; + register char *end_buf; + char *start; + register char *bp; + register char *last; + int len, used; + register char rs = get_rs(); + + if (iop->cnt < 0) + return iop->cnt; + if ((iop->flag & IOP_IS_TTY) && output_is_tty) + fflush(stdout); + end_data = iop->buf + iop->cnt; + if (iop->off >= end_data) { + iop->cnt = read(iop->fd, iop->buf, iop->size); + if (iop->cnt <= 0) + return iop->cnt = EOF; + end_data = iop->buf + iop->cnt; + iop->off = iop->buf; + } + last = start = bp = iop->off; + end_buf = iop->buf + iop->size; + if (rs == 0) { + while (!(*bp == '\n' && bp != iop->buf && bp[-1] == '\n')) { + if (++bp == end_buf) { + DO_END_OF_BUF + } + if (bp == end_data) { + DO_END_OF_DATA + } + } + if (*bp == '\n' && bp != iop->off && bp[-1] == '\n') { + int tmp = 0; + + /* allow for more than two newlines */ + while (*bp == '\n') { + tmp++; + if (++bp == end_buf) { + DO_END_OF_BUF + } + if (bp == end_data) { + DO_END_OF_DATA + } + } + iop->off = bp; + bp -= 1 + tmp; + } else if (bp != iop->buf && bp[-1] != '\n') { + warning("record not terminated"); + iop->off = bp + 2; + } else { + bp--; + iop->off = bp + 2; + } + } else { + while (*bp++ != rs) { + if (bp == end_buf) { + DO_END_OF_BUF + } + if (bp == end_data) { + DO_END_OF_DATA + } + } + if (*--bp != rs) { + warning("record not terminated"); + bp++; + } + iop->off = bp + 1; + } + if (start == iop->secbuf) { + len = bp - iop->buf; + if (len > 0) { + used = last - start; + while (len + used > iop->secsiz) { + iop->secsiz *= 2; + erealloc(iop->secbuf,char *,iop->secsiz,"get2"); + } + last = iop->secbuf + used; + start = iop->secbuf; + memcpy(last, iop->buf, len); + last += len; + } + } else + last = bp; + *last = '\0'; + *res = start; + return last - start; + } + + NODE * + do_getline(tree) + NODE *tree; + { + struct redirect *rp; + IOBUF *iop; + int cnt; + NODE **lhs; + int redir_error = 0; + + if (tree->rnode == NULL) { /* no redirection */ + iop = nextfile(); + if (iop == NULL) /* end of input */ + return tmp_number((AWKNUM) 0.0); + } else { + rp = redirect(tree->rnode, &redir_error); + if (rp == NULL && redir_error) /* failed redirect */ + return tmp_number((AWKNUM) -1.0); + iop = rp->iop; + getline_redirect++; + } + if (tree->lnode == NULL) { /* no optional var. -- read in $0 */ + if (inrec(iop) != 0) { + getline_redirect = 0; + return tmp_number((AWKNUM) 0.0); + } + } else { /* read in a named variable */ + char *s = NULL; + + lhs = get_lhs(tree->lnode, 1); + cnt = get_a_record(&s, iop); + if (!getline_redirect) { + assign_number(&NR_node->var_value, + NR_node->var_value->numbr + 1.0); + assign_number(&FNR_node->var_value, + FNR_node->var_value->numbr + 1.0); + } + if (cnt == EOF) { + getline_redirect = 0; + free(s); + return tmp_number((AWKNUM) 0.0); + } + *lhs = make_string(s, strlen(s)); + do_deref(); + /* we may have to regenerate $0 here! */ + if (field_num == 0) + set_record(fields_arr[0]->stptr, fields_arr[0]->stlen); + field_num = -1; + } + getline_redirect = 0; + return tmp_number((AWKNUM) 1.0); + } Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/main.c diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/main.c:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/main.c Mon Feb 23 11:05:56 2004 *************** *** 0 **** --- 1,567 ---- + /* + * main.c -- Expression tree constructors and main program for gawk. + */ + + /* + * Copyright (C) 1986, 1988, 1989 the Free Software Foundation, Inc. + * + * This file is part of GAWK, the GNU implementation of the + * AWK Progamming Language. + * + * GAWK is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 1, or (at your option) + * any later version. + * + * GAWK is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GAWK; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + #include "gawk.h" + #include "patchlevel.h" + #include + + extern int yyparse(); + extern void do_input(); + extern int close_io(); + extern void init_fields(); + extern int getopt(); + extern int re_set_syntax(); + extern NODE *node(); + + static void usage(); + static void set_fs(); + static void init_vars(); + static void init_args(); + static NODE *spc_var(); + static void pre_assign(); + static void copyleft(); + + /* These nodes store all the special variables AWK uses */ + NODE *FS_node, *NF_node, *RS_node, *NR_node; + NODE *FILENAME_node, *OFS_node, *ORS_node, *OFMT_node; + NODE *FNR_node, *RLENGTH_node, *RSTART_node, *SUBSEP_node; + NODE *ENVIRON_node, *IGNORECASE_node; + NODE *ARGC_node, *ARGV_node; + + /* + * The parse tree and field nodes are stored here. Parse_end is a dummy item + * used to free up unneeded fields without freeing the program being run + */ + int errcount = 0; /* error counter, used by yyerror() */ + + /* The global null string */ + NODE *Nnull_string; + + /* The name the program was invoked under, for error messages */ + char *myname; + + /* A block of AWK code to be run before running the program */ + NODE *begin_block = 0; + + /* A block of AWK code to be run after the last input file */ + NODE *end_block = 0; + + int exiting = 0; /* Was an "exit" statement executed? */ + int exit_val = 0; /* optional exit value */ + + #ifdef DEBUG + /* non-zero means in debugging is enabled. Probably not very useful */ + int debugging = 0; + extern int yydebug; + #endif + + int tempsource = 0; /* source is in a temp file */ + char **sourcefile = NULL; /* source file name(s) */ + int numfiles = -1; /* how many source files */ + + int strict = 0; /* turn off gnu extensions */ + + int output_is_tty = 0; /* control flushing of output */ + + NODE *expression_value; + + /* + * for strict to work, legal options must be first + * + * Unfortunately, -a and -e are orthogonal to -c. + */ + #define EXTENSIONS 8 /* where to clear */ + #ifdef DEBUG + char awk_opts[] = "F:f:v:caeCVdD"; + #else + char awk_opts[] = "F:f:v:caeCV"; + #endif + + char * version_string = "GAWK for MallocBench"; + + int + main(argc, argv) + int argc; + char **argv; + { + #ifdef DEBUG + /* Print out the parse tree. For debugging */ + register int dotree = 0; + #endif + #if 0 + /* LLVM - Don't need this */ + extern char *version_string; + #endif + FILE *fp; + int c; + extern int opterr, optind; + extern char *optarg; + extern char *strrchr(); + extern char *tmpnam(); + extern SIGTYPE catchsig(); + int i; + int nostalgia; + #ifdef somtime_in_the_future + int regex_mode = RE_SYNTAX_POSIX_EGREP; + #else + int regex_mode = RE_SYNTAX_AWK; + #endif + + (void) signal(SIGFPE, catchsig); + (void) signal(SIGSEGV, catchsig); + + #ifdef BWGC + { + extern gc_init(); + /* gc_init(); + */ + } + #endif BWGC + + if (strncmp(version_string, "@(#)", 4) == 0) + version_string += 4; + + myname = strrchr(argv[0], '/'); + if (myname == NULL) + myname = argv[0]; + else + myname++; + if (argc < 2) + usage(); + + /* initialize the null string */ + Nnull_string = make_string("", 0); + Nnull_string->numbr = 0.0; + Nnull_string->type = Node_val; + Nnull_string->flags = (PERM|STR|NUM|NUMERIC); + + /* Set up the special variables */ + + /* + * Note that this must be done BEFORE arg parsing else -F + * breaks horribly + */ + init_vars(); + + /* worst case */ + emalloc(sourcefile, char **, argc * sizeof(char *), "main"); + + + #ifdef STRICT /* strict new awk compatibility */ + strict = 1; + awk_opts[EXTENSIONS] = '\0'; + #endif + + #ifndef STRICT + /* undocumented feature, inspired by nostalgia, and a T-shirt */ + nostalgia = 0; + for (i = 1; i < argc && argv[i][0] == '-'; i++) { + if (argv[i][1] == '-') /* -- */ + break; + else if (argv[i][1] == 'c') { /* compatibility mode */ + nostalgia = 0; + break; + } else if (STREQ(&argv[i][1], "nostalgia")) + nostalgia = 1; + /* keep looping, in case -c after -nostalgia */ + } + if (nostalgia) { + fprintf (stderr, "awk: bailing out near line 1\n"); + abort(); + } + #endif + + while ((c = getopt (argc, argv, awk_opts)) != EOF) { + switch (c) { + #ifdef DEBUG + case 'd': + debugging++; + dotree++; + break; + + case 'D': + debugging++; + yydebug = 2; + break; + #endif + + #ifndef STRICT + case 'c': + strict = 1; + break; + #endif + + case 'F': + set_fs(optarg); + break; + + case 'f': + /* + * a la MKS awk, allow multiple -f options. + * this makes function libraries real easy. + * most of the magic is in the scanner. + */ + sourcefile[++numfiles] = optarg; + break; + + case 'v': + pre_assign(optarg); + break; + + case 'V': + fprintf(stderr, "%s, patchlevel %d\n", + version_string, PATCHLEVEL); + break; + + case 'C': + copyleft(); + break; + + case 'a': /* use old fashioned awk regexps */ + regex_mode = RE_SYNTAX_AWK; + break; + + case 'e': /* use egrep style regexps, per Posix */ + regex_mode = RE_SYNTAX_POSIX_EGREP; + break; + + case '?': + default: + /* getopt will print a message for us */ + /* S5R4 awk ignores bad options and keeps going */ + break; + } + } + + /* Tell the regex routines how they should work. . . */ + (void) re_set_syntax(regex_mode); + + #ifdef DEBUG + setbuf(stdout, (char *) NULL); /* make debugging easier */ + #endif + if (isatty(fileno(stdout))) + output_is_tty = 1; + /* No -f option, use next arg */ + /* write to temp file and save sourcefile name */ + if (numfiles == -1) { + int i; + + if (optind > argc - 1) /* no args left */ + usage(); + numfiles++; + i = strlen (argv[optind]); + if (i == 0) { /* sanity check */ + fprintf(stderr, "%s: empty program text\n", myname); + usage(); + /* NOTREACHED */ + } + sourcefile[0] = tmpnam((char *) NULL); + if ((fp = fopen (sourcefile[0], "w")) == NULL) + fatal("could not save source prog in temp file (%s)", + strerror(errno)); + if (fwrite (argv[optind], 1, i, fp) == 0) + fatal( + "could not write source program to temp file (%s)", + strerror(errno)); + if (argv[optind][i-1] != '\n') + putc ('\n', fp); + (void) fclose (fp); + tempsource++; + optind++; + } + init_args(optind, argc, myname, argv); + + /* Read in the program */ + if (yyparse() || errcount) + exit(1); + + #ifdef DEBUG + if (dotree) + print_parse_tree(expression_value); + #endif + /* Set up the field variables */ + init_fields(); + + if (begin_block) + (void) interpret(begin_block); + if (!exiting && (expression_value || end_block)) + do_input(); + if (end_block) + (void) interpret(end_block); + if (close_io() != 0 && exit_val == 0) + exit_val = 1; + + exit(exit_val); + /* NOTREACHED */ + return exit_val; + } + + static void + usage() + { + char *opt1 = " -f progfile [--]"; + char *opt2 = " [--] 'program'"; + #ifdef STRICT + char *regops = " [-ae] [-F fs] [-v var=val]" + #else + char *regops = " [-aecCV] [-F fs] [-v var=val]"; + #endif + + fprintf(stderr, "usage: %s%s%s file ...\n %s%s%s file ...\n", + myname, regops, opt1, myname, regops, opt2); + exit(11); + } + + /* Generate compiled regular expressions */ + struct re_pattern_buffer * + make_regexp(s, ignorecase) + NODE *s; + int ignorecase; + { + struct re_pattern_buffer *rp; + char *err; + + emalloc(rp, struct re_pattern_buffer *, sizeof(*rp), "make_regexp"); + memset((char *) rp, 0, sizeof(*rp)); + emalloc(rp->buffer, char *, 16, "make_regexp"); + rp->allocated = 16; + emalloc(rp->fastmap, char *, 256, "make_regexp"); + + if (! strict && ignorecase) + rp->translate = casetable; + else + rp->translate = NULL; + if ((err = re_compile_pattern(s->stptr, s->stlen, rp)) != NULL) + fatal("%s: /%s/", err, s->stptr); + free_temp(s); + return rp; + } + + struct re_pattern_buffer * + mk_re_parse(s, ignorecase) + char *s; + int ignorecase; + { + char *src; + register char *dest; + register int c; + int in_brack = 0; + + for (dest = src = s; *src != '\0';) { + if (*src == '\\') { + c = *++src; + switch (c) { + case '/': + case 'a': + case 'b': + case 'f': + case 'n': + case 'r': + case 't': + case 'v': + case 'x': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + c = parse_escape(&src); + if (c < 0) + cant_happen(); + *dest++ = (char)c; + break; + default: + *dest++ = '\\'; + *dest++ = (char)c; + src++; + break; + } + } else if (*src == '/' && ! in_brack) + break; + else { + if (*src == '[') + in_brack = 1; + else if (*src == ']') + in_brack = 0; + + *dest++ = *src++; + } + } + return make_regexp(tmp_string(s, dest-s), ignorecase); + } + + static void + copyleft () + { + extern char *version_string; + char *cp; + static char blurb[] = + "Copyright (C) 1989, Free Software Foundation.\n\ + GNU Awk comes with ABSOLUTELY NO WARRANTY. This is free software, and\n\ + you are welcome to distribute it under the terms of the GNU General\n\ + Public License, which covers both the warranty information and the\n\ + terms for redistribution.\n\n\ + You should have received a copy of the GNU General Public License along\n\ + with this program; if not, write to the Free Software Foundation, Inc.,\n\ + 675 Mass Ave, Cambridge, MA 02139, USA.\n"; + + fprintf (stderr, "%s, patchlevel %d\n", version_string, PATCHLEVEL); + fputs(blurb, stderr); + fflush(stderr); + } + + static void + set_fs(str) + char *str; + { + register NODE **tmp; + + tmp = get_lhs(FS_node, 0); + /* + * Only if in full compatibility mode check for the stupid special + * case so -F\t works as documented in awk even though the shell + * hands us -Ft. Bleah! + */ + if (strict && str[0] == 't' && str[1] == '\0') + str[0] = '\t'; + *tmp = make_string(str, 1); + do_deref(); + } + + static void + init_args(argc0, argc, argv0, argv) + int argc0, argc; + char *argv0; + char **argv; + { + int i, j; + NODE **aptr; + + ARGV_node = spc_var("ARGV", Nnull_string); + aptr = assoc_lookup(ARGV_node, tmp_number(0.0)); + *aptr = make_string(argv0, strlen(argv0)); + for (i = argc0, j = 1; i < argc; i++) { + aptr = assoc_lookup(ARGV_node, tmp_number((AWKNUM) j)); + *aptr = make_string(argv[i], strlen(argv[i])); + j++; + } + ARGC_node = spc_var("ARGC", make_number((AWKNUM) j)); + } + + /* + * Set all the special variables to their initial values. + */ + static void + init_vars() + { + extern char **environ; + char *var, *val; + NODE **aptr; + int i; + + FS_node = spc_var("FS", make_string(" ", 1)); + NF_node = spc_var("NF", make_number(-1.0)); + RS_node = spc_var("RS", make_string("\n", 1)); + NR_node = spc_var("NR", make_number(0.0)); + FNR_node = spc_var("FNR", make_number(0.0)); + FILENAME_node = spc_var("FILENAME", make_string("-", 1)); + OFS_node = spc_var("OFS", make_string(" ", 1)); + ORS_node = spc_var("ORS", make_string("\n", 1)); + OFMT_node = spc_var("OFMT", make_string("%.6g", 4)); + RLENGTH_node = spc_var("RLENGTH", make_number(0.0)); + RSTART_node = spc_var("RSTART", make_number(0.0)); + SUBSEP_node = spc_var("SUBSEP", make_string("\034", 1)); + IGNORECASE_node = spc_var("IGNORECASE", make_number(0.0)); + + ENVIRON_node = spc_var("ENVIRON", Nnull_string); + for (i = 0; environ[i]; i++) { + static char nullstr[] = ""; + + var = environ[i]; + val = strchr(var, '='); + if (val) + *val++ = '\0'; + else + val = nullstr; + aptr = assoc_lookup(ENVIRON_node, tmp_string(var, strlen (var))); + *aptr = make_string(val, strlen (val)); + + /* restore '=' so that system() gets a valid environment */ + if (val != nullstr) + *--val = '='; + } + } + + /* Create a special variable */ + static NODE * + spc_var(name, value) + char *name; + NODE *value; + { + register NODE *r; + + if ((r = lookup(variables, name)) == NULL) + r = install(variables, name, node(value, Node_var, (NODE *) NULL)); + return r; + } + + static void + pre_assign(v) + char *v; + { + char *cp; + + cp = strchr(v, '='); + if (cp != NULL) { + *cp++ = '\0'; + variable(v)->var_value = make_string(cp, strlen(cp)); + } else { + fprintf (stderr, + "%s: '%s' argument to -v not in 'var=value' form\n", + myname, v); + usage(); + } + } + + SIGTYPE + catchsig(sig, code) + int sig, code; + { + #ifdef lint + code = 0; sig = code; code = sig; + #endif + if (sig == SIGFPE) { + fatal("floating point exception"); + } else if (sig == SIGSEGV) { + msg("fatal error: segmentation fault"); + /* fatal won't abort() if not compiled for debugging */ + abort(); + } else + cant_happen(); + /* NOTREACHED */ + } Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/missing.c diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/missing.c:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/missing.c Mon Feb 23 11:05:56 2004 *************** *** 0 **** --- 1,60 ---- + #ifdef MSDOS + #define BCOPY_MISSING + #define STRCASE_MISSING + #define BLKSIZE_MISSING + #define SPRINTF_INT + #define RANDOM_MISSING + #define GETOPT_MISSING + #endif + + #ifdef DUP2_MISSING + #include "missing.d/dup2.c" + #endif /* DUP2_MISSING */ + + #ifdef GCVT_MISSING + #include "missing.d/gcvt.c" + #endif /* GCVT_MISSING */ + + #ifdef GETOPT_MISSING + #include "missing.d/getopt.c" + #endif /* GETOPT_MISSING */ + + #ifdef MEMCMP_MISSING + #include "missing.d/memcmp.c" + #endif /* MEMCMP_MISSING */ + + #ifdef MEMCPY_MISSING + #include "missing.d/memcpy.c" + #endif /* MEMCPY_MISSING */ + + #ifdef MEMSET_MISSING + #include "missing.d/memset.c" + #endif /* MEMSET_MISSING */ + + #ifdef RANDOM_MISSING + #include "missing.d/random.c" + #endif /* RANDOM_MISSING */ + + #ifdef STRCASE_MISSING + #include "missing.d/strcase.c" + #endif /* STRCASE_MISSING */ + + #ifdef STRCHR_MISSING + #include "missing.d/strchr.c" + #endif /* STRCHR_MISSING */ + + #ifdef STRERROR_MISSING + #include "missing.d/strerror.c" + #endif /* STRERROR_MISSING */ + + #ifdef STRTOD_MISSING + #include "missing.d/strtod.c" + #endif /* STRTOD_MISSING */ + + #ifdef TMPNAM_MISSING + #include "missing.d/tmpnam.c" + #endif /* TMPNAM_MISSING */ + + #if defined(VPRINTF_MISSING) && defined(BSDSTDIO) + #include "missing.d/vprintf.c" + #endif /* VPRINTF_MISSING && BSDSTDIO */ Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/msg.c diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/msg.c:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/msg.c Mon Feb 23 11:05:56 2004 *************** *** 0 **** --- 1,101 ---- + /* + * msg.c - routines for error messages + */ + + /* + * Copyright (C) 1986, 1988, 1989 the Free Software Foundation, Inc. + * + * This file is part of GAWK, the GNU implementation of the + * AWK Progamming Language. + * + * GAWK is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 1, or (at your option) + * any later version. + * + * GAWK is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GAWK; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + #include "gawk.h" + + int sourceline = 0; + char *source = NULL; + + /* VARARGS2 */ + static void + err(s, msg, argp) + char *s; + char *msg; + va_list *argp; + { + int line; + char *file; + + (void) fprintf(stderr, "%s: %s ", myname, s); + vfprintf(stderr, msg, *argp); + (void) fprintf(stderr, "\n"); + line = (int) FNR_node->var_value->numbr; + if (line) { + (void) fprintf(stderr, " input line number %d", line); + file = FILENAME_node->var_value->stptr; + if (file && !STREQ(file, "-")) + (void) fprintf(stderr, ", file `%s'", file); + (void) fprintf(stderr, "\n"); + } + if (sourceline) { + (void) fprintf(stderr, " source line number %d", sourceline); + if (source) + (void) fprintf(stderr, ", file `%s'", source); + (void) fprintf(stderr, "\n"); + } + } + + /*VARARGS0*/ + void + msg(char * errmsg, ...) + { + va_list args; + char *mesg; + + va_start(args, errmsg); + mesg = va_arg(args, char *); + err("", mesg, &args); + va_end(args); + } + + /*VARARGS0*/ + void + warning(char * errmsg, ...) + { + va_list args; + char *mesg; + + va_start(args, errmsg); + mesg = va_arg(args, char *); + err("warning:", mesg, &args); + va_end(args); + } + + /*VARARGS0*/ + void + fatal(char * errmsg, ...) + { + va_list args; + char *mesg; + + va_start(args, errmsg); + mesg = va_arg(args, char *); + err("fatal error:", mesg, &args); + va_end(args); + #ifdef DEBUG + abort(); + #endif + exit(1); + } Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/node.c diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/node.c:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/node.c Mon Feb 23 11:05:56 2004 *************** *** 0 **** --- 1,344 ---- + /* + * node.c -- routines for node management + */ + + /* + * Copyright (C) 1986, 1988, 1989 the Free Software Foundation, Inc. + * + * This file is part of GAWK, the GNU implementation of the + * AWK Progamming Language. + * + * GAWK is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 1, or (at your option) + * any later version. + * + * GAWK is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GAWK; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + #include "gawk.h" + + extern double strtod(); + + /* + * We can't dereference a variable until after we've given it its new value. + * This variable points to the value we have to free up + */ + NODE *deref; + + AWKNUM + r_force_number(n) + NODE *n; + { + char *ptr; + + #ifdef DEBUG + if (n == NULL) + cant_happen(); + if (n->type != Node_val) + cant_happen(); + if(n->flags == 0) + cant_happen(); + if (n->flags & NUM) + return n->numbr; + #endif + if (n->stlen == 0) + n->numbr = 0.0; + else if (n->stlen == 1) { + if (isdigit(n->stptr[0])) { + n->numbr = n->stptr[0] - '0'; + n->flags |= NUMERIC; + } else + n->numbr = 0.0; + } else { + errno = 0; + n->numbr = (AWKNUM) strtod(n->stptr, &ptr); + /* the following >= should be ==, but for SunOS 3.5 strtod() */ + if (errno == 0 && ptr >= n->stptr + n->stlen) + n->flags |= NUMERIC; + } + n->flags |= NUM; + return n->numbr; + } + + /* + * the following lookup table is used as an optimization in force_string + * (more complicated) variations on this theme didn't seem to pay off, but + * systematic testing might be in order at some point + */ + static char *values[] = { + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + }; + #define NVAL (sizeof(values)/sizeof(values[0])) + + NODE * + r_force_string(s) + NODE *s; + { + char buf[128]; + char *fmt; + long num; + char *sp = buf; + + #ifdef DEBUG + if (s == NULL) + cant_happen(); + if (s->type != Node_val) + cant_happen(); + if (s->flags & STR) + return s; + if (!(s->flags & NUM)) + cant_happen(); + if (s->stref != 0) + cant_happen(); + #endif + s->flags |= STR; + /* should check validity of user supplied OFMT */ + fmt = OFMT_node->var_value->stptr; + if ((num = s->numbr) == s->numbr) { + /* integral value */ + if (num < NVAL && num >= 0) { + sp = values[num]; + s->stlen = 1; + } else { + (void) sprintf(sp, "%ld", num); + s->stlen = strlen(sp); + } + } else { + (void) sprintf(sp, fmt, s->numbr); + s->stlen = strlen(sp); + } + s->stref = 1; + emalloc(s->stptr, char *, s->stlen + 1, "force_string"); + memcpy(s->stptr, sp, s->stlen+1); + return s; + } + + /* + * Duplicate a node. (For strings, "duplicate" means crank up the + * reference count.) + */ + NODE * + dupnode(n) + NODE *n; + { + register NODE *r; + + if (n->flags & TEMP) { + n->flags &= ~TEMP; + n->flags |= MALLOC; + return n; + } + if ((n->flags & (MALLOC|STR)) == (MALLOC|STR)) { + if (n->stref < 255) + n->stref++; + return n; + } + r = newnode(Node_illegal); + *r = *n; + r->flags &= ~(PERM|TEMP); + r->flags |= MALLOC; + if (n->type == Node_val && (n->flags & STR)) { + r->stref = 1; + emalloc(r->stptr, char *, r->stlen + 1, "dupnode"); + memcpy(r->stptr, n->stptr, r->stlen+1); + } + return r; + } + + /* this allocates a node with defined numbr */ + NODE * + make_number(x) + AWKNUM x; + { + register NODE *r; + + r = newnode(Node_val); + r->numbr = x; + r->flags |= (NUM|NUMERIC); + r->stref = 0; + return r; + } + + /* + * This creates temporary nodes. They go away quite quickly, so don't use + * them for anything important + */ + NODE * + tmp_number(x) + AWKNUM x; + { + NODE *r; + + r = make_number(x); + r->flags |= TEMP; + return r; + } + + /* + * Make a string node. + */ + + NODE * + make_str_node(s, len, scan) + char *s; + int len; + int scan; + { + register NODE *r; + char *pf; + register char *pt; + register int c; + register char *end; + + r = newnode(Node_val); + emalloc(r->stptr, char *, len + 1, s); + memcpy(r->stptr, s, len); + r->stptr[len] = '\0'; + end = &(r->stptr[len]); + + if (scan) { /* scan for escape sequences */ + for (pf = pt = r->stptr; pf < end;) { + c = *pf++; + if (c == '\\') { + c = parse_escape(&pf); + if (c < 0) + cant_happen(); + *pt++ = c; + } else + *pt++ = c; + } + len = pt - r->stptr; + erealloc(r->stptr, char *, len + 1, "make_str_node"); + r->stptr[len] = '\0'; + r->flags |= PERM; + } + r->stlen = len; + r->stref = 1; + r->flags |= (STR|MALLOC); + + return r; + } + + /* Read the warning under tmp_number */ + NODE * + tmp_string(s, len) + char *s; + int len; + { + register NODE *r; + + r = make_string(s, len); + r->flags |= TEMP; + return r; + } + + + #define NODECHUNK 100 + + static NODE *nextfree = NULL; + + NODE * + newnode(ty) + NODETYPE ty; + { + NODE *it; + NODE *np; + + #if defined(MPROF) || defined(NOMEMOPT) + emalloc(it, NODE *, sizeof(NODE), "newnode"); + #else + if (nextfree == NULL) { + /* get more nodes and initialize list */ + emalloc(nextfree, NODE *, NODECHUNK * sizeof(NODE), "newnode"); + for (np = nextfree; np < &nextfree[NODECHUNK - 1]; np++) + np->nextp = np + 1; + np->nextp = NULL; + } + /* get head of freelist */ + it = nextfree; + nextfree = nextfree->nextp; + #endif + it->type = ty; + it->flags = MALLOC; + #ifdef MEMDEBUG + fprintf(stderr, "node: new: %0x\n", it); + #endif + return it; + } + + void + freenode(it) + NODE *it; + { + #ifdef DEBUG + NODE *nf; + #endif + #ifdef MEMDEBUG + fprintf(stderr, "node: free: %0x\n", it); + #endif + #if defined(MPROF) || defined(NOMEMOPT) + free((char *) it); + #elif defined(IGNOREFREE) + #else + #ifdef DEBUG + for (nf = nextfree; nf; nf = nf->nextp) + if (nf == it) + fatal("attempt to free free node"); + #endif + /* add it to head of freelist */ + it->nextp = nextfree; + nextfree = it; + #endif + } + + #ifdef DEBUG + pf() + { + NODE *nf = nextfree; + while (nf != NULL) { + fprintf(stderr, "%0x ", nf); + nf = nf->nextp; + } + } + #endif + + void + do_deref() + { + if (deref == NULL) + return; + if (deref->flags & PERM) { + deref = 0; + return; + } + if ((deref->flags & MALLOC) || (deref->flags & TEMP)) { + deref->flags &= ~TEMP; + if (deref->flags & STR) { + if (deref->stref > 1 && deref->stref != 255) { + deref->stref--; + deref = 0; + return; + } + free(deref->stptr); + } + freenode(deref); + } + deref = 0; + } Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/patchlevel.h diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/patchlevel.h:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/patchlevel.h Mon Feb 23 11:05:56 2004 *************** *** 0 **** --- 1 ---- + #define PATCHLEVEL 1 Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/regex.c diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/regex.c:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/regex.c Mon Feb 23 11:05:57 2004 *************** *** 0 **** --- 1,1875 ---- + /* Extended regular expression matching and search. + Copyright (C) 1985 Free Software Foundation, Inc. + + NO WARRANTY + + BECAUSE THIS PROGRAM IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY + NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. EXCEPT + WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC, + RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE THIS PROGRAM "AS IS" + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY + AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE + DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR + CORRECTION. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M. + STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY + WHO MAY MODIFY AND REDISTRIBUTE THIS PROGRAM AS PERMITTED BELOW, BE + LIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR + OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE + USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR + DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR + A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) THIS + PROGRAM, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH + DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. + + GENERAL PUBLIC LICENSE TO COPY + + 1. You may copy and distribute verbatim copies of this source file + as you receive it, in any medium, provided that you conspicuously and + appropriately publish on each copy a valid copyright notice "Copyright + (C) 1985 Free Software Foundation, Inc."; and include following the + copyright notice a verbatim copy of the above disclaimer of warranty + and of this License. You may charge a distribution fee for the + physical act of transferring a copy. + + 2. You may modify your copy or copies of this source file or + any portion of it, and copy and distribute such modifications under + the terms of Paragraph 1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating + that you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, + that in whole or in part contains or is a derivative of this + program or any part thereof, to be licensed at no charge to all + third parties on terms identical to those contained in this + License Agreement (except that you may choose to grant more extensive + warranty protection to some or all third parties, at your option). + + c) You may charge a distribution fee for the physical act of + transferring a copy, and you may at your option offer warranty + protection in exchange for a fee. + + Mere aggregation of another unrelated program with this program (or its + derivative) on a volume of a storage or distribution medium does not bring + the other program under the scope of these terms. + + 3. You may copy and distribute this program (or a portion or derivative + of it, under Paragraph 2) in object code or executable form under the terms + of Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal + shipping charge) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + + For an executable file, complete source code means all the source code for + all modules it contains; but, as a special exception, it need not include + source code for modules which are standard libraries that accompany the + operating system on which the executable file runs. + + 4. You may not copy, sublicense, distribute or transfer this program + except as expressly provided under this License Agreement. Any attempt + otherwise to copy, sublicense, distribute or transfer this program is void and + your rights to use the program under this License agreement shall be + automatically terminated. However, parties who have received computer + software programs from you with this License Agreement will not have + their licenses terminated so long as such parties remain in full compliance. + + 5. If you wish to incorporate parts of this program into other free + programs whose distribution conditions are different, write to the Free + Software Foundation at 675 Mass Ave, Cambridge, MA 02139. We have not yet + worked out a simple rule that can be stated here, but we will often permit + this. We will be guided by the two goals of preserving the free status of + all derivatives of our free software and of promoting the sharing and reuse of + software. + + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + + #ifdef MSDOS + #include + static void init_syntax_once(void ); + extern int re_set_syntax(int syntax); + extern char *re_compile_pattern(char *pattern,int size,struct re_pattern_buffer *bufp); + static int store_jump(char *from,char opcode,char *to); + static int insert_jump(char op,char *from,char *to,char *current_end); + extern void re_compile_fastmap(struct re_pattern_buffer *bufp); + extern int re_search(struct re_pattern_buffer *pbufp,char *string,int size,int startpos,int range,struct re_registers *regs); + extern int re_search_2(struct re_pattern_buffer *pbufp,char *string1,int size1,char *string2,int size2,int startpos,int range,struct re_registers *regs,int mstop); + extern int re_match(struct re_pattern_buffer *pbufp,char *string,int size,int pos,struct re_registers *regs); + extern int re_match_2(struct re_pattern_buffer *pbufp,unsigned char *string1,int size1,unsigned char *string2,int size2,int pos,struct re_registers *regs,int mstop); + static int bcmp_translate(unsigned char *s1,unsigned char *s2,int len,unsigned char *translate); + extern char *re_comp(char *s); + extern int re_exec(char *s); + #endif + + #ifdef BWGC + #define realloc(ptr, size) gc_realloc(ptr, size) + #endif + + /* To test, compile with -Dtest. + This Dtestable feature turns this into a self-contained program + which reads a pattern, describes how it compiles, + then reads a string and searches for it. */ + + #ifdef emacs + + /* The `emacs' switch turns on certain special matching commands + that make sense only in emacs. */ + + #include "config.h" + #include "lisp.h" + #include "buffer.h" + #include "syntax.h" + + #else /* not emacs */ + + #ifdef BCOPY_MISSING + #define bcopy(s,d,n) memcpy((d),(s),(n)) + #define bcmp(s1,s2,n) memcmp((s1),(s2),(n)) + #define bzero(s,n) memset((s),0,(n)) + #else + void bcopy(); + int bcmp(); + void bzero(); + #endif + + /* Make alloca work the best possible way. */ + #ifdef __GNUC__ + #define alloca __builtin_alloca + #else + #ifdef sparc + #include + #endif + #endif + + /* + * Define the syntax stuff, so we can do the \<...\> things. + */ + + #ifndef Sword /* must be non-zero in some of the tests below... */ + #define Sword 1 + #endif + + #define SYNTAX(c) re_syntax_table[c] + + #ifdef SYNTAX_TABLE + + char *re_syntax_table; + + #else + + static char re_syntax_table[256]; + + static void + init_syntax_once () + { + register int c; + static int done = 0; + + if (done) + return; + + bzero (re_syntax_table, sizeof re_syntax_table); + + for (c = 'a'; c <= 'z'; c++) + re_syntax_table[c] = Sword; + + for (c = 'A'; c <= 'Z'; c++) + re_syntax_table[c] = Sword; + + for (c = '0'; c <= '9'; c++) + re_syntax_table[c] = Sword; + + done = 1; + } + + #endif /* SYNTAX_TABLE */ + #endif /* not emacs */ + + #include "regex.h" + + /* Number of failure points to allocate space for initially, + when matching. If this number is exceeded, more space is allocated, + so it is not a hard limit. */ + + #ifndef NFAILURES + #define NFAILURES 80 + #endif /* NFAILURES */ + + /* width of a byte in bits */ + + #define BYTEWIDTH 8 + + #ifndef SIGN_EXTEND_CHAR + #define SIGN_EXTEND_CHAR(x) (x) + #endif + + static int obscure_syntax = 0; + + /* Specify the precise syntax of regexp for compilation. + This provides for compatibility for various utilities + which historically have different, incompatible syntaxes. + + The argument SYNTAX is a bit-mask containing the two bits + RE_NO_BK_PARENS and RE_NO_BK_VBAR. */ + + int + re_set_syntax (syntax) + { + int ret; + + ret = obscure_syntax; + obscure_syntax = syntax; + return ret; + } + + /* re_compile_pattern takes a regular-expression string + and converts it into a buffer full of byte commands for matching. + + PATTERN is the address of the pattern string + SIZE is the length of it. + BUFP is a struct re_pattern_buffer * which points to the info + on where to store the byte commands. + This structure contains a char * which points to the + actual space, which should have been obtained with malloc. + re_compile_pattern may use realloc to grow the buffer space. + + The number of bytes of commands can be found out by looking in + the struct re_pattern_buffer that bufp pointed to, + after re_compile_pattern returns. + */ + + #define PATPUSH(ch) (*b++ = (char) (ch)) + + #define PATFETCH(c) \ + {if (p == pend) goto end_of_pattern; \ + c = * (unsigned char *) p++; \ + if (translate) c = translate[c]; } + + #define PATFETCH_RAW(c) \ + {if (p == pend) goto end_of_pattern; \ + c = * (unsigned char *) p++; } + + #define PATUNFETCH p-- + + #ifdef MSDOS + #define MaxAllocation (1<<14) + #else + #define MaxAllocation (1<<16) + #endif + #define EXTEND_BUFFER \ + { char *old_buffer = bufp->buffer; \ + if (bufp->allocated == MaxAllocation) goto too_big; \ + bufp->allocated *= 2; \ + if (bufp->allocated > MaxAllocation) bufp->allocated = MaxAllocation; \ + if (!(bufp->buffer = (char *) realloc (bufp->buffer, bufp->allocated))) \ + goto memory_exhausted; \ + c = bufp->buffer - old_buffer; \ + b += c; \ + if (fixup_jump) \ + fixup_jump += c; \ + if (laststart) \ + laststart += c; \ + begalt += c; \ + if (pending_exact) \ + pending_exact += c; \ + } + + #ifdef NEVER + #define EXTEND_BUFFER \ + { unsigned b_off = b - bufp->buffer, \ + f_off, l_off, p_off, \ + beg_off = begalt - bufp->buffer; \ + if (fixup_jump) \ + f_off = fixup_jump - bufp->buffer; \ + if (laststart) \ + l_off = laststart - bufp->buffer; \ + if (pending_exact) \ + p_off = pending_exact - bufp->buffer; \ + if (bufp->allocated == MaxAllocation) goto too_big; \ + bufp->allocated *= 2; \ + if (bufp->allocated > MaxAllocation) bufp->allocated = MaxAllocation; \ + if (!(bufp->buffer = (char *) realloc (bufp->buffer, bufp->allocated))) \ + goto memory_exhausted; \ + b = bufp->buffer + b_off; \ + if (fixup_jump) \ + fixup_jump = bufp->buffer + f_off; \ + if (laststart) \ + laststart = bufp->buffer + l_off; \ + begalt = bufp->buffer + beg_off; \ + if (pending_exact) \ + pending_exact = bufp->buffer + p_off; \ + } + #endif + static int store_jump (), insert_jump (); + + char * + re_compile_pattern (pattern, size, bufp) + char *pattern; + int size; + struct re_pattern_buffer *bufp; + { + register char *b = bufp->buffer; + register char *p = pattern; + char *pend = pattern + size; + register unsigned c, c1; + char *p1; + unsigned char *translate = (unsigned char *) bufp->translate; + + /* address of the count-byte of the most recently inserted "exactn" command. + This makes it possible to tell whether a new exact-match character + can be added to that command or requires a new "exactn" command. */ + + char *pending_exact = 0; + + /* address of the place where a forward-jump should go + to the end of the containing expression. + Each alternative of an "or", except the last, ends with a forward-jump + of this sort. */ + + char *fixup_jump = 0; + + /* address of start of the most recently finished expression. + This tells postfix * where to find the start of its operand. */ + + char *laststart = 0; + + /* In processing a repeat, 1 means zero matches is allowed */ + + char zero_times_ok; + + /* In processing a repeat, 1 means many matches is allowed */ + + char many_times_ok; + + /* address of beginning of regexp, or inside of last \( */ + + char *begalt = b; + + /* Stack of information saved by \( and restored by \). + Four stack elements are pushed by each \(: + First, the value of b. + Second, the value of fixup_jump. + Third, the value of regnum. + Fourth, the value of begalt. */ + + int stackb[40]; + int *stackp = stackb; + int *stacke = stackb + 40; + int *stackt; + + /* Counts \('s as they are encountered. Remembered for the matching \), + where it becomes the "register number" to put in the stop_memory command */ + + int regnum = 1; + + bufp->fastmap_accurate = 0; + + #ifndef emacs + #ifndef SYNTAX_TABLE + /* + * Initialize the syntax table. + */ + init_syntax_once(); + #endif + #endif + + if (bufp->allocated == 0) + { + bufp->allocated = 28; + if (bufp->buffer) + /* EXTEND_BUFFER loses when bufp->allocated is 0 */ + bufp->buffer = (char *) realloc (bufp->buffer, 28); + else + /* Caller did not allocate a buffer. Do it for him */ + bufp->buffer = (char *) malloc (28); + if (!bufp->buffer) goto memory_exhausted; + begalt = b = bufp->buffer; + } + + while (p != pend) + { + if (b - bufp->buffer > bufp->allocated - 10) + /* Note that EXTEND_BUFFER clobbers c */ + EXTEND_BUFFER; + + PATFETCH (c); + + switch (c) + { + case '$': + if (obscure_syntax & RE_TIGHT_VBAR) + { + if (! (obscure_syntax & RE_CONTEXT_INDEP_OPS) && p != pend) + goto normal_char; + /* Make operand of last vbar end before this `$'. */ + if (fixup_jump) + store_jump (fixup_jump, jump, b); + fixup_jump = 0; + PATPUSH (endline); + break; + } + + /* $ means succeed if at end of line, but only in special contexts. + If randomly in the middle of a pattern, it is a normal character. */ + if (p == pend || *p == '\n' + || (obscure_syntax & RE_CONTEXT_INDEP_OPS) + || (obscure_syntax & RE_NO_BK_PARENS + ? *p == ')' + : *p == '\\' && p[1] == ')') + || (obscure_syntax & RE_NO_BK_VBAR + ? *p == '|' + : *p == '\\' && p[1] == '|')) + { + PATPUSH (endline); + break; + } + goto normal_char; + + case '^': + /* ^ means succeed if at beg of line, but only if no preceding pattern. */ + + if (laststart && p[-2] != '\n' + && ! (obscure_syntax & RE_CONTEXT_INDEP_OPS)) + goto normal_char; + if (obscure_syntax & RE_TIGHT_VBAR) + { + if (p != pattern + 1 + && ! (obscure_syntax & RE_CONTEXT_INDEP_OPS)) + goto normal_char; + PATPUSH (begline); + begalt = b; + } + else + PATPUSH (begline); + break; + + case '+': + case '?': + if (obscure_syntax & RE_BK_PLUS_QM) + goto normal_char; + handle_plus: + case '*': + /* If there is no previous pattern, char not special. */ + if (!laststart && ! (obscure_syntax & RE_CONTEXT_INDEP_OPS)) + goto normal_char; + /* If there is a sequence of repetition chars, + collapse it down to equivalent to just one. */ + zero_times_ok = 0; + many_times_ok = 0; + while (1) + { + zero_times_ok |= c != '+'; + many_times_ok |= c != '?'; + if (p == pend) + break; + PATFETCH (c); + if (c == '*') + ; + else if (!(obscure_syntax & RE_BK_PLUS_QM) + && (c == '+' || c == '?')) + ; + else if ((obscure_syntax & RE_BK_PLUS_QM) + && c == '\\') + { + int c1; + PATFETCH (c1); + if (!(c1 == '+' || c1 == '?')) + { + PATUNFETCH; + PATUNFETCH; + break; + } + c = c1; + } + else + { + PATUNFETCH; + break; + } + } + + /* Star, etc. applied to an empty pattern is equivalent + to an empty pattern. */ + if (!laststart) + break; + + /* Now we know whether 0 matches is allowed, + and whether 2 or more matches is allowed. */ + if (many_times_ok) + { + /* If more than one repetition is allowed, + put in a backward jump at the end. */ + store_jump (b, maybe_finalize_jump, laststart - 3); + b += 3; + } + insert_jump (on_failure_jump, laststart, b + 3, b); + pending_exact = 0; + b += 3; + if (!zero_times_ok) + { + /* At least one repetition required: insert before the loop + a skip over the initial on-failure-jump instruction */ + insert_jump (dummy_failure_jump, laststart, laststart + 6, b); + b += 3; + } + break; + + case '.': + laststart = b; + PATPUSH (anychar); + break; + + case '[': + while (b - bufp->buffer + > bufp->allocated - 3 - (1 << BYTEWIDTH) / BYTEWIDTH) + /* Note that EXTEND_BUFFER clobbers c */ + EXTEND_BUFFER; + + laststart = b; + if (*p == '^') + PATPUSH (charset_not), p++; + else + PATPUSH (charset); + p1 = p; + + PATPUSH ((1 << BYTEWIDTH) / BYTEWIDTH); + /* Clear the whole map */ + bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH); + /* Read in characters and ranges, setting map bits */ + while (1) + { + PATFETCH (c); + + /* If awk, \ escapes characters inside [...]. */ + if ((obscure_syntax & RE_AWK_CLASS_HACK) && c == '\\') + { + PATFETCH(c1); + b[c1 / BYTEWIDTH] |= 1 << (c1 % BYTEWIDTH); + continue; + } + + if (c == ']' && p != p1 + 1) break; + if (*p == '-' && p[1] != ']') + { + PATFETCH (c1); + PATFETCH (c1); + while (c <= c1) + b[c / BYTEWIDTH] |= 1 << (c % BYTEWIDTH), c++; + } + else + { + b[c / BYTEWIDTH] |= 1 << (c % BYTEWIDTH); + } + } + /* Discard any bitmap bytes that are all 0 at the end of the map. + Decrement the map-length byte too. */ + while ((int) b[-1] > 0 && b[b[-1] - 1] == 0) + b[-1]--; + b += b[-1]; + break; + + case '(': + if (! (obscure_syntax & RE_NO_BK_PARENS)) + goto normal_char; + else + goto handle_open; + + case ')': + if (! (obscure_syntax & RE_NO_BK_PARENS)) + goto normal_char; + else + goto handle_close; + + case '\n': + if (! (obscure_syntax & RE_NEWLINE_OR)) + goto normal_char; + else + goto handle_bar; + + case '|': + if (! (obscure_syntax & RE_NO_BK_VBAR)) + goto normal_char; + else + goto handle_bar; + + case '\\': + if (p == pend) goto invalid_pattern; + PATFETCH_RAW (c); + switch (c) + { + case '(': + if (obscure_syntax & RE_NO_BK_PARENS) + goto normal_backsl; + handle_open: + if (stackp == stacke) goto nesting_too_deep; + if (regnum < RE_NREGS) + { + PATPUSH (start_memory); + PATPUSH (regnum); + } + *stackp++ = b - bufp->buffer; + *stackp++ = fixup_jump ? fixup_jump - bufp->buffer + 1 : 0; + *stackp++ = regnum++; + *stackp++ = begalt - bufp->buffer; + fixup_jump = 0; + laststart = 0; + begalt = b; + break; + + case ')': + if (obscure_syntax & RE_NO_BK_PARENS) + goto normal_backsl; + handle_close: + if (stackp == stackb) goto unmatched_close; + begalt = *--stackp + bufp->buffer; + if (fixup_jump) + store_jump (fixup_jump, jump, b); + if (stackp[-1] < RE_NREGS) + { + PATPUSH (stop_memory); + PATPUSH (stackp[-1]); + } + stackp -= 2; + fixup_jump = 0; + if (*stackp) + fixup_jump = *stackp + bufp->buffer - 1; + laststart = *--stackp + bufp->buffer; + break; + + case '|': + if (obscure_syntax & RE_NO_BK_VBAR) + goto normal_backsl; + handle_bar: + insert_jump (on_failure_jump, begalt, b + 6, b); + pending_exact = 0; + b += 3; + if (fixup_jump) + store_jump (fixup_jump, jump, b); + fixup_jump = b; + b += 3; + laststart = 0; + begalt = b; + break; + + #ifdef emacs + case '=': + PATPUSH (at_dot); + break; + + case 's': + laststart = b; + PATPUSH (syntaxspec); + PATFETCH (c); + PATPUSH (syntax_spec_code[c]); + break; + + case 'S': + laststart = b; + PATPUSH (notsyntaxspec); + PATFETCH (c); + PATPUSH (syntax_spec_code[c]); + break; + #endif /* emacs */ + + case 'w': + laststart = b; + PATPUSH (wordchar); + break; + + case 'W': + laststart = b; + PATPUSH (notwordchar); + break; + + case '<': + PATPUSH (wordbeg); + break; + + case '>': + PATPUSH (wordend); + break; + + case 'b': + PATPUSH (wordbound); + break; + + case 'B': + PATPUSH (notwordbound); + break; + + case '`': + PATPUSH (begbuf); + break; + + case '\'': + PATPUSH (endbuf); + break; + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + c1 = c - '0'; + if (c1 >= regnum) + goto normal_char; + for (stackt = stackp - 2; stackt > stackb; stackt -= 4) + if (*stackt == c1) + goto normal_char; + laststart = b; + PATPUSH (duplicate); + PATPUSH (c1); + break; + + case '+': + case '?': + if (obscure_syntax & RE_BK_PLUS_QM) + goto handle_plus; + + default: + normal_backsl: + /* You might think it would be useful for \ to mean + not to translate; but if we don't translate it + it will never match anything. */ + if (translate) c = translate[c]; + goto normal_char; + } + break; + + default: + normal_char: + if (!pending_exact || pending_exact + *pending_exact + 1 != b + || *pending_exact == 0177 || *p == '*' || *p == '^' + || ((obscure_syntax & RE_BK_PLUS_QM) + ? *p == '\\' && (p[1] == '+' || p[1] == '?') + : (*p == '+' || *p == '?'))) + { + laststart = b; + PATPUSH (exactn); + pending_exact = b; + PATPUSH (0); + } + PATPUSH (c); + (*pending_exact)++; + } + } + + if (fixup_jump) + store_jump (fixup_jump, jump, b); + + if (stackp != stackb) goto unmatched_open; + + bufp->used = b - bufp->buffer; + return 0; + + invalid_pattern: + return "Invalid regular expression"; + + unmatched_open: + return "Unmatched \\("; + + unmatched_close: + return "Unmatched \\)"; + + end_of_pattern: + return "Premature end of regular expression"; + + nesting_too_deep: + return "Nesting too deep"; + + too_big: + return "Regular expression too big"; + + memory_exhausted: + return "Memory exhausted"; + } + + /* Store where `from' points a jump operation to jump to where `to' points. + `opcode' is the opcode to store. */ + + static int + store_jump (from, opcode, to) + char *from, *to; + char opcode; + { + from[0] = opcode; + from[1] = (to - (from + 3)) & 0377; + from[2] = (to - (from + 3)) >> 8; + } + + /* Open up space at char FROM, and insert there a jump to TO. + CURRENT_END gives te end of the storage no in use, + so we know how much data to copy up. + OP is the opcode of the jump to insert. + + If you call this function, you must zero out pending_exact. */ + + static int + insert_jump (op, from, to, current_end) + char op; + char *from, *to, *current_end; + { + register char *pto = current_end + 3; + register char *pfrom = current_end; + while (pfrom != from) + *--pto = *--pfrom; + store_jump (from, op, to); + } + + /* Given a pattern, compute a fastmap from it. + The fastmap records which of the (1 << BYTEWIDTH) possible characters + can start a string that matches the pattern. + This fastmap is used by re_search to skip quickly over totally implausible text. + + The caller must supply the address of a (1 << BYTEWIDTH)-byte data area + as bufp->fastmap. + The other components of bufp describe the pattern to be used. */ + + void + re_compile_fastmap (bufp) + struct re_pattern_buffer *bufp; + { + unsigned char *pattern = (unsigned char *) bufp->buffer; + int size = bufp->used; + register char *fastmap = bufp->fastmap; + register unsigned char *p = pattern; + register unsigned char *pend = pattern + size; + register int j, k; + unsigned char *translate = (unsigned char *) bufp->translate; + + unsigned char *stackb[NFAILURES]; + unsigned char **stackp = stackb; + + bzero (fastmap, (1 << BYTEWIDTH)); + bufp->fastmap_accurate = 1; + bufp->can_be_null = 0; + + while (p) + { + if (p == pend) + { + bufp->can_be_null = 1; + break; + } + #ifdef SWITCH_ENUM_BUG + switch ((int) ((enum regexpcode) *p++)) + #else + switch ((enum regexpcode) *p++) + #endif + { + case exactn: + if (translate) + fastmap[translate[p[1]]] = 1; + else + fastmap[p[1]] = 1; + break; + + case begline: + case before_dot: + case at_dot: + case after_dot: + case begbuf: + case endbuf: + case wordbound: + case notwordbound: + case wordbeg: + case wordend: + continue; + + case endline: + if (translate) + fastmap[translate['\n']] = 1; + else + fastmap['\n'] = 1; + if (bufp->can_be_null != 1) + bufp->can_be_null = 2; + break; + + case finalize_jump: + case maybe_finalize_jump: + case jump: + case dummy_failure_jump: + bufp->can_be_null = 1; + j = *p++ & 0377; + j += SIGN_EXTEND_CHAR (*(char *)p) << 8; + p += j + 1; /* The 1 compensates for missing ++ above */ + if (j > 0) + continue; + /* Jump backward reached implies we just went through + the body of a loop and matched nothing. + Opcode jumped to should be an on_failure_jump. + Just treat it like an ordinary jump. + For a * loop, it has pushed its failure point already; + if so, discard that as redundant. */ + if ((enum regexpcode) *p != on_failure_jump) + continue; + p++; + j = *p++ & 0377; + j += SIGN_EXTEND_CHAR (*(char *)p) << 8; + p += j + 1; /* The 1 compensates for missing ++ above */ + if (stackp != stackb && *stackp == p) + stackp--; + continue; + + case on_failure_jump: + j = *p++ & 0377; + j += SIGN_EXTEND_CHAR (*(char *)p) << 8; + p++; + *++stackp = p + j; + continue; + + case start_memory: + case stop_memory: + p++; + continue; + + case duplicate: + bufp->can_be_null = 1; + fastmap['\n'] = 1; + case anychar: + for (j = 0; j < (1 << BYTEWIDTH); j++) + if (j != '\n') + fastmap[j] = 1; + if (bufp->can_be_null) + return; + /* Don't return; check the alternative paths + so we can set can_be_null if appropriate. */ + break; + + case wordchar: + for (j = 0; j < (1 << BYTEWIDTH); j++) + if (SYNTAX (j) == Sword) + fastmap[j] = 1; + break; + + case notwordchar: + for (j = 0; j < (1 << BYTEWIDTH); j++) + if (SYNTAX (j) != Sword) + fastmap[j] = 1; + break; + + #ifdef emacs + case syntaxspec: + k = *p++; + for (j = 0; j < (1 << BYTEWIDTH); j++) + if (SYNTAX (j) == (enum syntaxcode) k) + fastmap[j] = 1; + break; + + case notsyntaxspec: + k = *p++; + for (j = 0; j < (1 << BYTEWIDTH); j++) + if (SYNTAX (j) != (enum syntaxcode) k) + fastmap[j] = 1; + break; + #endif /* emacs */ + + case charset: + for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--) + if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))) + { + if (translate) + fastmap[translate[j]] = 1; + else + fastmap[j] = 1; + } + break; + + case charset_not: + /* Chars beyond end of map must be allowed */ + for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++) + if (translate) + fastmap[translate[j]] = 1; + else + fastmap[j] = 1; + + for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--) + if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))) + { + if (translate) + fastmap[translate[j]] = 1; + else + fastmap[j] = 1; + } + break; + } + + /* Get here means we have successfully found the possible starting characters + of one path of the pattern. We need not follow this path any farther. + Instead, look at the next alternative remembered in the stack. */ + if (stackp != stackb) + p = *stackp--; + else + break; + } + } + + /* Like re_search_2, below, but only one string is specified. */ + + int + re_search (pbufp, string, size, startpos, range, regs) + struct re_pattern_buffer *pbufp; + char *string; + int size, startpos, range; + struct re_registers *regs; + { + return re_search_2 (pbufp, 0, 0, string, size, startpos, range, regs, size); + } + + /* Like re_match_2 but tries first a match starting at index STARTPOS, + then at STARTPOS + 1, and so on. + RANGE is the number of places to try before giving up. + If RANGE is negative, the starting positions tried are + STARTPOS, STARTPOS - 1, etc. + It is up to the caller to make sure that range is not so large + as to take the starting position outside of the input strings. + + The value returned is the position at which the match was found, + or -1 if no match was found, + or -2 if error (such as failure stack overflow). */ + + int + re_search_2 (pbufp, string1, size1, string2, size2, startpos, range, regs, mstop) + struct re_pattern_buffer *pbufp; + char *string1, *string2; + int size1, size2; + int startpos; + register int range; + struct re_registers *regs; + int mstop; + { + register char *fastmap = pbufp->fastmap; + register unsigned char *translate = (unsigned char *) pbufp->translate; + int total = size1 + size2; + int val; + + /* Update the fastmap now if not correct already */ + if (fastmap && !pbufp->fastmap_accurate) + re_compile_fastmap (pbufp); + + /* Don't waste time in a long search for a pattern + that says it is anchored. */ + if (pbufp->used > 0 && (enum regexpcode) pbufp->buffer[0] == begbuf + && range > 0) + { + if (startpos > 0) + return -1; + else + range = 1; + } + + while (1) + { + /* If a fastmap is supplied, skip quickly over characters + that cannot possibly be the start of a match. + Note, however, that if the pattern can possibly match + the null string, we must test it at each starting point + so that we take the first null string we get. */ + + if (fastmap && startpos < total && pbufp->can_be_null != 1) + { + if (range > 0) + { + register int lim = 0; + register unsigned char *p; + int irange = range; + if (startpos < size1 && startpos + range >= size1) + lim = range - (size1 - startpos); + + p = ((unsigned char *) + &(startpos >= size1 ? string2 - size1 : string1)[startpos]); + + if (translate) + { + while (range > lim && !fastmap[translate[*p++]]) + range--; + } + else + { + while (range > lim && !fastmap[*p++]) + range--; + } + startpos += irange - range; + } + else + { + register unsigned char c; + if (startpos >= size1) + c = string2[startpos - size1]; + else + c = string1[startpos]; + c &= 0xff; + if (translate ? !fastmap[translate[c]] : !fastmap[c]) + goto advance; + } + } + + if (range >= 0 && startpos == total + && fastmap && pbufp->can_be_null == 0) + return -1; + + val = re_match_2 (pbufp, string1, size1, string2, size2, startpos, regs, mstop); + if (0 <= val) + { + if (val == -2) + return -2; + return startpos; + } + + #ifdef C_ALLOCA + alloca (0); + #endif /* C_ALLOCA */ + + advance: + if (!range) break; + if (range > 0) range--, startpos++; else range++, startpos--; + } + return -1; + } + + #ifndef emacs /* emacs never uses this */ + int + re_match (pbufp, string, size, pos, regs) + struct re_pattern_buffer *pbufp; + char *string; + int size, pos; + struct re_registers *regs; + { + return re_match_2 (pbufp, 0, 0, string, size, pos, regs, size); + } + #endif /* emacs */ + + /* Maximum size of failure stack. Beyond this, overflow is an error. */ + + int re_max_failures = 2000; + + static int bcmp_translate(); + /* Match the pattern described by PBUFP + against data which is the virtual concatenation of STRING1 and STRING2. + SIZE1 and SIZE2 are the sizes of the two data strings. + Start the match at position POS. + Do not consider matching past the position MSTOP. + + If pbufp->fastmap is nonzero, then it had better be up to date. + + The reason that the data to match are specified as two components + which are to be regarded as concatenated + is so this function can be used directly on the contents of an Emacs buffer. + + -1 is returned if there is no match. -2 is returned if there is + an error (such as match stack overflow). Otherwise the value is the length + of the substring which was matched. */ + + int + re_match_2 (pbufp, string1, size1, string2, size2, pos, regs, mstop) + struct re_pattern_buffer *pbufp; + unsigned char *string1, *string2; + int size1, size2; + int pos; + struct re_registers *regs; + int mstop; + { + register unsigned char *p = (unsigned char *) pbufp->buffer; + register unsigned char *pend = p + pbufp->used; + /* End of first string */ + unsigned char *end1; + /* End of second string */ + unsigned char *end2; + /* Pointer just past last char to consider matching */ + unsigned char *end_match_1, *end_match_2; + register unsigned char *d, *dend; + register int mcnt; + unsigned char *translate = (unsigned char *) pbufp->translate; + + /* Failure point stack. Each place that can handle a failure further down the line + pushes a failure point on this stack. It consists of two char *'s. + The first one pushed is where to resume scanning the pattern; + the second pushed is where to resume scanning the strings. + If the latter is zero, the failure point is a "dummy". + If a failure happens and the innermost failure point is dormant, + it discards that failure point and tries the next one. */ + + unsigned char *initial_stack[2 * NFAILURES]; + unsigned char **stackb = initial_stack; + unsigned char **stackp = stackb, **stacke = &stackb[2 * NFAILURES]; + + /* Information on the "contents" of registers. + These are pointers into the input strings; they record + just what was matched (on this attempt) by some part of the pattern. + The start_memory command stores the start of a register's contents + and the stop_memory command stores the end. + + At that point, regstart[regnum] points to the first character in the register, + regend[regnum] points to the first character beyond the end of the register, + regstart_seg1[regnum] is true iff regstart[regnum] points into string1, + and regend_seg1[regnum] is true iff regend[regnum] points into string1. */ + + unsigned char *regstart[RE_NREGS]; + unsigned char *regend[RE_NREGS]; + unsigned char regstart_seg1[RE_NREGS], regend_seg1[RE_NREGS]; + + /* Set up pointers to ends of strings. + Don't allow the second string to be empty unless both are empty. */ + if (!size2) + { + string2 = string1; + size2 = size1; + string1 = 0; + size1 = 0; + } + end1 = string1 + size1; + end2 = string2 + size2; + + /* Compute where to stop matching, within the two strings */ + if (mstop <= size1) + { + end_match_1 = string1 + mstop; + end_match_2 = string2; + } + else + { + end_match_1 = end1; + end_match_2 = string2 + mstop - size1; + } + + /* Initialize \) text positions to -1 + to mark ones that no \( or \) has been seen for. */ + + for (mcnt = 0; mcnt < sizeof (regend) / sizeof (*regend); mcnt++) + regend[mcnt] = (unsigned char *) -1; + + /* `p' scans through the pattern as `d' scans through the data. + `dend' is the end of the input string that `d' points within. + `d' is advanced into the following input string whenever necessary, + but this happens before fetching; + therefore, at the beginning of the loop, + `d' can be pointing at the end of a string, + but it cannot equal string2. */ + + if (pos <= size1) + d = string1 + pos, dend = end_match_1; + else + d = string2 + pos - size1, dend = end_match_2; + + /* Write PREFETCH; just before fetching a character with *d. */ + #define PREFETCH \ + while (d == dend) \ + { if (dend == end_match_2) goto fail; /* end of string2 => failure */ \ + d = string2; /* end of string1 => advance to string2. */ \ + dend = end_match_2; } + + /* This loop loops over pattern commands. + It exits by returning from the function if match is complete, + or it drops through if match fails at this starting point in the input data. */ + + while (1) + { + if (p == pend) + /* End of pattern means we have succeeded! */ + { + /* If caller wants register contents data back, convert it to indices */ + if (regs) + { + regs->start[0] = pos; + if (dend == end_match_1) + regs->end[0] = d - string1; + else + regs->end[0] = d - string2 + size1; + for (mcnt = 1; mcnt < RE_NREGS; mcnt++) + { + if (regend[mcnt] == (unsigned char *) -1) + { + regs->start[mcnt] = -1; + regs->end[mcnt] = -1; + continue; + } + if (regstart_seg1[mcnt]) + regs->start[mcnt] = regstart[mcnt] - string1; + else + regs->start[mcnt] = regstart[mcnt] - string2 + size1; + if (regend_seg1[mcnt]) + regs->end[mcnt] = regend[mcnt] - string1; + else + regs->end[mcnt] = regend[mcnt] - string2 + size1; + } + } + if (dend == end_match_1) + return (d - string1 - pos); + else + return d - string2 + size1 - pos; + } + + /* Otherwise match next pattern command */ + #ifdef SWITCH_ENUM_BUG + switch ((int) ((enum regexpcode) *p++)) + #else + switch ((enum regexpcode) *p++) + #endif + { + + /* \( is represented by a start_memory, \) by a stop_memory. + Both of those commands contain a "register number" argument. + The text matched within the \( and \) is recorded under that number. + Then, \ turns into a `duplicate' command which + is followed by the numeric value of as the register number. */ + + case start_memory: + regstart[*p] = d; + regstart_seg1[*p++] = (dend == end_match_1); + break; + + case stop_memory: + regend[*p] = d; + regend_seg1[*p++] = (dend == end_match_1); + break; + + case duplicate: + { + int regno = *p++; /* Get which register to match against */ + register unsigned char *d2, *dend2; + + d2 = regstart[regno]; + dend2 = ((regstart_seg1[regno] == regend_seg1[regno]) + ? regend[regno] : end_match_1); + while (1) + { + /* Advance to next segment in register contents, if necessary */ + while (d2 == dend2) + { + if (dend2 == end_match_2) break; + if (dend2 == regend[regno]) break; + d2 = string2, dend2 = regend[regno]; /* end of string1 => advance to string2. */ + } + /* At end of register contents => success */ + if (d2 == dend2) break; + + /* Advance to next segment in data being matched, if necessary */ + PREFETCH; + + /* mcnt gets # consecutive chars to compare */ + mcnt = dend - d; + if (mcnt > dend2 - d2) + mcnt = dend2 - d2; + /* Compare that many; failure if mismatch, else skip them. */ + if (translate ? bcmp_translate (d, d2, mcnt, translate) : bcmp (d, d2, mcnt)) + goto fail; + d += mcnt, d2 += mcnt; + } + } + break; + + case anychar: + /* fetch a data character */ + PREFETCH; + /* Match anything but a newline. */ + if ((translate ? translate[*d++] : *d++) == '\n') + goto fail; + break; + + case charset: + case charset_not: + { + /* Nonzero for charset_not */ + int not = 0; + register int c; + if (*(p - 1) == (unsigned char) charset_not) + not = 1; + + /* fetch a data character */ + PREFETCH; + + if (translate) + c = translate [*d]; + else + c = *d; + + if (c < *p * BYTEWIDTH + && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH))) + not = !not; + + p += 1 + *p; + + if (!not) goto fail; + d++; + break; + } + + case begline: + if (d == string1 || d[-1] == '\n') + break; + goto fail; + + case endline: + if (d == end2 + || (d == end1 ? (size2 == 0 || *string2 == '\n') : *d == '\n')) + break; + goto fail; + + /* "or" constructs ("|") are handled by starting each alternative + with an on_failure_jump that points to the start of the next alternative. + Each alternative except the last ends with a jump to the joining point. + (Actually, each jump except for the last one really jumps + to the following jump, because tensioning the jumps is a hassle.) */ + + /* The start of a stupid repeat has an on_failure_jump that points + past the end of the repeat text. + This makes a failure point so that, on failure to match a repetition, + matching restarts past as many repetitions have been found + with no way to fail and look for another one. */ + + /* A smart repeat is similar but loops back to the on_failure_jump + so that each repetition makes another failure point. */ + + case on_failure_jump: + if (stackp == stacke) + { + unsigned char **stackx; + if (stacke - stackb > re_max_failures * 2) + return -2; + stackx = (unsigned char **) alloca (2 * (stacke - stackb) + * sizeof (char *)); + bcopy (stackb, stackx, (stacke - stackb) * sizeof (char *)); + stackp = stackx + (stackp - stackb); + stacke = stackx + 2 * (stacke - stackb); + stackb = stackx; + } + mcnt = *p++ & 0377; + mcnt += SIGN_EXTEND_CHAR (*(char *)p) << 8; + p++; + *stackp++ = mcnt + p; + *stackp++ = d; + break; + + /* The end of a smart repeat has an maybe_finalize_jump back. + Change it either to a finalize_jump or an ordinary jump. */ + + case maybe_finalize_jump: + mcnt = *p++ & 0377; + mcnt += SIGN_EXTEND_CHAR (*(char *)p) << 8; + p++; + { + register unsigned char *p2 = p; + /* Compare what follows with the begining of the repeat. + If we can establish that there is nothing that they would + both match, we can change to finalize_jump */ + while (p2 != pend + && (*p2 == (unsigned char) stop_memory + || *p2 == (unsigned char) start_memory)) + p2++; + if (p2 == pend) + p[-3] = (unsigned char) finalize_jump; + else if (*p2 == (unsigned char) exactn + || *p2 == (unsigned char) endline) + { + register int c = *p2 == (unsigned char) endline ? '\n' : p2[2]; + register unsigned char *p1 = p + mcnt; + /* p1[0] ... p1[2] are an on_failure_jump. + Examine what follows that */ + if (p1[3] == (unsigned char) exactn && p1[5] != c) + p[-3] = (unsigned char) finalize_jump; + else if (p1[3] == (unsigned char) charset + || p1[3] == (unsigned char) charset_not) + { + int not = p1[3] == (unsigned char) charset_not; + if (c < p1[4] * BYTEWIDTH + && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH))) + not = !not; + /* not is 1 if c would match */ + /* That means it is not safe to finalize */ + if (!not) + p[-3] = (unsigned char) finalize_jump; + } + } + } + p -= 2; + if (p[-1] != (unsigned char) finalize_jump) + { + p[-1] = (unsigned char) jump; + goto nofinalize; + } + + /* The end of a stupid repeat has a finalize-jump + back to the start, where another failure point will be made + which will point after all the repetitions found so far. */ + + case finalize_jump: + stackp -= 2; + + case jump: + nofinalize: + mcnt = *p++ & 0377; + mcnt += SIGN_EXTEND_CHAR (*(char *)p) << 8; + p += mcnt + 1; /* The 1 compensates for missing ++ above */ + break; + + case dummy_failure_jump: + if (stackp == stacke) + { + unsigned char **stackx + = (unsigned char **) alloca (2 * (stacke - stackb) + * sizeof (char *)); + bcopy (stackb, stackx, (stacke - stackb) * sizeof (char *)); + stackp = stackx + (stackp - stackb); + stacke = stackx + 2 * (stacke - stackb); + stackb = stackx; + } + *stackp++ = 0; + *stackp++ = 0; + goto nofinalize; + + case wordbound: + if (d == string1 /* Points to first char */ + || d == end2 /* Points to end */ + || (d == end1 && size2 == 0)) /* Points to end */ + break; + if ((SYNTAX (d[-1]) == Sword) + != (SYNTAX (d == end1 ? *string2 : *d) == Sword)) + break; + goto fail; + + case notwordbound: + if (d == string1 /* Points to first char */ + || d == end2 /* Points to end */ + || (d == end1 && size2 == 0)) /* Points to end */ + goto fail; + if ((SYNTAX (d[-1]) == Sword) + != (SYNTAX (d == end1 ? *string2 : *d) == Sword)) + goto fail; + break; + + case wordbeg: + if (d == end2 /* Points to end */ + || (d == end1 && size2 == 0) /* Points to end */ + || SYNTAX (* (d == end1 ? string2 : d)) != Sword) /* Next char not a letter */ + goto fail; + if (d == string1 /* Points to first char */ + || SYNTAX (d[-1]) != Sword) /* prev char not letter */ + break; + goto fail; + + case wordend: + if (d == string1 /* Points to first char */ + || SYNTAX (d[-1]) != Sword) /* prev char not letter */ + goto fail; + if (d == end2 /* Points to end */ + || (d == end1 && size2 == 0) /* Points to end */ + || SYNTAX (d == end1 ? *string2 : *d) != Sword) /* Next char not a letter */ + break; + goto fail; + + #ifdef emacs + case before_dot: + if (((d - string2 <= (unsigned) size2) + ? d - bf_p2 : d - bf_p1) + <= point) + goto fail; + break; + + case at_dot: + if (((d - string2 <= (unsigned) size2) + ? d - bf_p2 : d - bf_p1) + == point) + goto fail; + break; + + case after_dot: + if (((d - string2 <= (unsigned) size2) + ? d - bf_p2 : d - bf_p1) + >= point) + goto fail; + break; + + case wordchar: + mcnt = (int) Sword; + goto matchsyntax; + + case syntaxspec: + mcnt = *p++; + matchsyntax: + PREFETCH; + if (SYNTAX (*d++) != (enum syntaxcode) mcnt) goto fail; + break; + + case notwordchar: + mcnt = (int) Sword; + goto matchnotsyntax; + + case notsyntaxspec: + mcnt = *p++; + matchnotsyntax: + PREFETCH; + if (SYNTAX (*d++) == (enum syntaxcode) mcnt) goto fail; + break; + #else + case wordchar: + PREFETCH; + if (SYNTAX (*d++) == 0) goto fail; + break; + + case notwordchar: + PREFETCH; + if (SYNTAX (*d++) != 0) goto fail; + break; + #endif /* not emacs */ + + case begbuf: + if (d == string1) /* Note, d cannot equal string2 */ + break; /* unless string1 == string2. */ + goto fail; + + case endbuf: + if (d == end2 || (d == end1 && size2 == 0)) + break; + goto fail; + + case exactn: + /* Match the next few pattern characters exactly. + mcnt is how many characters to match. */ + mcnt = *p++; + if (translate) + { + do + { + PREFETCH; + if (translate[*d++] != *p++) goto fail; + } + while (--mcnt); + } + else + { + do + { + PREFETCH; + if (*d++ != *p++) goto fail; + } + while (--mcnt); + } + break; + } + continue; /* Successfully matched one pattern command; keep matching */ + + /* Jump here if any matching operation fails. */ + fail: + if (stackp != stackb) + /* A restart point is known. Restart there and pop it. */ + { + if (!stackp[-2]) + { /* If innermost failure point is dormant, flush it and keep looking */ + stackp -= 2; + goto fail; + } + d = *--stackp; + p = *--stackp; + if (d >= string1 && d <= end1) + dend = end_match_1; + } + else break; /* Matching at this starting point really fails! */ + } + return -1; /* Failure to match */ + } + + static int + bcmp_translate (s1, s2, len, translate) + unsigned char *s1, *s2; + register int len; + unsigned char *translate; + { + register unsigned char *p1 = s1, *p2 = s2; + while (len) + { + if (translate [*p1++] != translate [*p2++]) return 1; + len--; + } + return 0; + } + + /* Entry points compatible with bsd4.2 regex library */ + + #ifndef emacs + + static struct re_pattern_buffer re_comp_buf; + + char * + re_comp (s) + char *s; + { + if (!s) + { + if (!re_comp_buf.buffer) + return "No previous regular expression"; + return 0; + } + + if (!re_comp_buf.buffer) + { + if (!(re_comp_buf.buffer = (char *) malloc (200))) + return "Memory exhausted"; + re_comp_buf.allocated = 200; + if (!(re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH))) + return "Memory exhausted"; + } + return re_compile_pattern (s, strlen (s), &re_comp_buf); + } + + int + re_exec (s) + char *s; + { + int len = strlen (s); + return 0 <= re_search (&re_comp_buf, s, len, 0, len, 0); + } + + #endif /* emacs */ + + #ifdef test + + #include + + /* Indexed by a character, gives the upper case equivalent of the character */ + + static char upcase[0400] = + { 000, 001, 002, 003, 004, 005, 006, 007, + 010, 011, 012, 013, 014, 015, 016, 017, + 020, 021, 022, 023, 024, 025, 026, 027, + 030, 031, 032, 033, 034, 035, 036, 037, + 040, 041, 042, 043, 044, 045, 046, 047, + 050, 051, 052, 053, 054, 055, 056, 057, + 060, 061, 062, 063, 064, 065, 066, 067, + 070, 071, 072, 073, 074, 075, 076, 077, + 0100, 0101, 0102, 0103, 0104, 0105, 0106, 0107, + 0110, 0111, 0112, 0113, 0114, 0115, 0116, 0117, + 0120, 0121, 0122, 0123, 0124, 0125, 0126, 0127, + 0130, 0131, 0132, 0133, 0134, 0135, 0136, 0137, + 0140, 0101, 0102, 0103, 0104, 0105, 0106, 0107, + 0110, 0111, 0112, 0113, 0114, 0115, 0116, 0117, + 0120, 0121, 0122, 0123, 0124, 0125, 0126, 0127, + 0130, 0131, 0132, 0173, 0174, 0175, 0176, 0177, + 0200, 0201, 0202, 0203, 0204, 0205, 0206, 0207, + 0210, 0211, 0212, 0213, 0214, 0215, 0216, 0217, + 0220, 0221, 0222, 0223, 0224, 0225, 0226, 0227, + 0230, 0231, 0232, 0233, 0234, 0235, 0236, 0237, + 0240, 0241, 0242, 0243, 0244, 0245, 0246, 0247, + 0250, 0251, 0252, 0253, 0254, 0255, 0256, 0257, + 0260, 0261, 0262, 0263, 0264, 0265, 0266, 0267, + 0270, 0271, 0272, 0273, 0274, 0275, 0276, 0277, + 0300, 0301, 0302, 0303, 0304, 0305, 0306, 0307, + 0310, 0311, 0312, 0313, 0314, 0315, 0316, 0317, + 0320, 0321, 0322, 0323, 0324, 0325, 0326, 0327, + 0330, 0331, 0332, 0333, 0334, 0335, 0336, 0337, + 0340, 0341, 0342, 0343, 0344, 0345, 0346, 0347, + 0350, 0351, 0352, 0353, 0354, 0355, 0356, 0357, + 0360, 0361, 0362, 0363, 0364, 0365, 0366, 0367, + 0370, 0371, 0372, 0373, 0374, 0375, 0376, 0377 + }; + + main (argc, argv) + int argc; + char **argv; + { + char pat[80]; + struct re_pattern_buffer buf; + int i; + char c; + char fastmap[(1 << BYTEWIDTH)]; + + /* Allow a command argument to specify the style of syntax. */ + if (argc > 1) + obscure_syntax = atoi (argv[1]); + + buf.allocated = 40; + buf.buffer = (char *) malloc (buf.allocated); + buf.fastmap = fastmap; + buf.translate = upcase; + + while (1) + { + gets (pat); + + if (*pat) + { + re_compile_pattern (pat, strlen(pat), &buf); + + for (i = 0; i < buf.used; i++) + printchar (buf.buffer[i]); + + putchar ('\n'); + + printf ("%d allocated, %d used.\n", buf.allocated, buf.used); + + re_compile_fastmap (&buf); + printf ("Allowed by fastmap: "); + for (i = 0; i < (1 << BYTEWIDTH); i++) + if (fastmap[i]) printchar (i); + putchar ('\n'); + } + + gets (pat); /* Now read the string to match against */ + + i = re_match (&buf, pat, strlen (pat), 0, 0); + printf ("Match value %d.\n", i); + } + } + + #ifdef NOTDEF + print_buf (bufp) + struct re_pattern_buffer *bufp; + { + int i; + + printf ("buf is :\n----------------\n"); + for (i = 0; i < bufp->used; i++) + printchar (bufp->buffer[i]); + + printf ("\n%d allocated, %d used.\n", bufp->allocated, bufp->used); + + printf ("Allowed by fastmap: "); + for (i = 0; i < (1 << BYTEWIDTH); i++) + if (bufp->fastmap[i]) + printchar (i); + printf ("\nAllowed by translate: "); + if (bufp->translate) + for (i = 0; i < (1 << BYTEWIDTH); i++) + if (bufp->translate[i]) + printchar (i); + printf ("\nfastmap is%s accurate\n", bufp->fastmap_accurate ? "" : "n't"); + printf ("can %s be null\n----------", bufp->can_be_null ? "" : "not"); + } + #endif + + printchar (c) + char c; + { + if (c < 041 || c >= 0177) + { + putchar ('\\'); + putchar (((c >> 6) & 3) + '0'); + putchar (((c >> 3) & 7) + '0'); + putchar ((c & 7) + '0'); + } + else + putchar (c); + } + + #endif /* test */ Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/regex.h diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/regex.h:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/regex.h Mon Feb 23 11:05:57 2004 *************** *** 0 **** --- 1,274 ---- + /* Definitions for data structures callers pass the regex library. + Copyright (C) 1985 Free Software Foundation, Inc. + + NO WARRANTY + + BECAUSE THIS PROGRAM IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY + NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. EXCEPT + WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC, + RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE THIS PROGRAM "AS IS" + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY + AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE + DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR + CORRECTION. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M. + STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY + WHO MAY MODIFY AND REDISTRIBUTE THIS PROGRAM AS PERMITTED BELOW, BE + LIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR + OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE + USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR + DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR + A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) THIS + PROGRAM, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH + DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. + + GENERAL PUBLIC LICENSE TO COPY + + 1. You may copy and distribute verbatim copies of this source file + as you receive it, in any medium, provided that you conspicuously and + appropriately publish on each copy a valid copyright notice "Copyright + (C) 1985 Free Software Foundation, Inc."; and include following the + copyright notice a verbatim copy of the above disclaimer of warranty + and of this License. You may charge a distribution fee for the + physical act of transferring a copy. + + 2. You may modify your copy or copies of this source file or + any portion of it, and copy and distribute such modifications under + the terms of Paragraph 1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating + that you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, + that in whole or in part contains or is a derivative of this + program or any part thereof, to be licensed at no charge to all + third parties on terms identical to those contained in this + License Agreement (except that you may choose to grant more extensive + warranty protection to some or all third parties, at your option). + + c) You may charge a distribution fee for the physical act of + transferring a copy, and you may at your option offer warranty + protection in exchange for a fee. + + Mere aggregation of another unrelated program with this program (or its + derivative) on a volume of a storage or distribution medium does not bring + the other program under the scope of these terms. + + 3. You may copy and distribute this program (or a portion or derivative + of it, under Paragraph 2) in object code or executable form under the terms + of Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal + shipping charge) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + + For an executable file, complete source code means all the source code for + all modules it contains; but, as a special exception, it need not include + source code for modules which are standard libraries that accompany the + operating system on which the executable file runs. + + 4. You may not copy, sublicense, distribute or transfer this program + except as expressly provided under this License Agreement. Any attempt + otherwise to copy, sublicense, distribute or transfer this program is void and + your rights to use the program under this License agreement shall be + automatically terminated. However, parties who have received computer + software programs from you with this License Agreement will not have + their licenses terminated so long as such parties remain in full compliance. + + 5. If you wish to incorporate parts of this program into other free + programs whose distribution conditions are different, write to the Free + Software Foundation at 675 Mass Ave, Cambridge, MA 02139. We have not yet + worked out a simple rule that can be stated here, but we will often permit + this. We will be guided by the two goals of preserving the free status of + all derivatives of our free software and of promoting the sharing and reuse of + software. + + + In other words, you are welcome to use, share and improve this program. + You are forbidden to forbid anyone else to use, share and improve + what you give them. Help stamp out software-hoarding! */ + + + /* Define number of parens for which we record the beginnings and ends. + This affects how much space the `struct re_registers' type takes up. */ + #ifndef RE_NREGS + #define RE_NREGS 10 + #endif + + /* These bits are used in the obscure_syntax variable to choose among + alternative regexp syntaxes. */ + + /* 1 means plain parentheses serve as grouping, and backslash + parentheses are needed for literal searching. + 0 means backslash-parentheses are grouping, and plain parentheses + are for literal searching. */ + #define RE_NO_BK_PARENS 1 + + /* 1 means plain | serves as the "or"-operator, and \| is a literal. + 0 means \| serves as the "or"-operator, and | is a literal. */ + #define RE_NO_BK_VBAR 2 + + /* 0 means plain + or ? serves as an operator, and \+, \? are literals. + 1 means \+, \? are operators and plain +, ? are literals. */ + #define RE_BK_PLUS_QM 4 + + /* 1 means | binds tighter than ^ or $. + 0 means the contrary. */ + #define RE_TIGHT_VBAR 8 + + /* 1 means treat \n as an _OR operator + 0 means treat it as a normal character */ + #define RE_NEWLINE_OR 16 + + /* 0 means that a special characters (such as *, ^, and $) always have + their special meaning regardless of the surrounding context. + 1 means that special characters may act as normal characters in some + contexts. Specifically, this applies to: + ^ - only special at the beginning, or after ( or | + $ - only special at the end, or before ) or | + *, +, ? - only special when not after the beginning, (, or | */ + #define RE_CONTEXT_INDEP_OPS 32 + + /* 0 means that \ before anything inside [ and ] is taken as a real \. + 1 means that such a \ escapes the following character This is a + special case for AWK. */ + #define RE_AWK_CLASS_HACK 64 + + /* Now define combinations of bits for the standard possibilities. */ + #define RE_SYNTAX_POSIX_EGREP (RE_NO_BK_PARENS | RE_NO_BK_VBAR \ + | RE_CONTEXT_INDEP_OPS) + #define RE_SYNTAX_AWK (RE_SYNTAX_POSIX_EGREP | RE_AWK_CLASS_HACK) + #define RE_SYNTAX_EGREP (RE_SYNTAX_POSIX_EGREP | RE_NEWLINE_OR) + #define RE_SYNTAX_GREP (RE_BK_PLUS_QM | RE_NEWLINE_OR) + #define RE_SYNTAX_EMACS 0 + + /* This data structure is used to represent a compiled pattern. */ + + struct re_pattern_buffer + { + char *buffer; /* Space holding the compiled pattern commands. */ + int allocated; /* Size of space that buffer points to */ + int used; /* Length of portion of buffer actually occupied */ + char *fastmap; /* Pointer to fastmap, if any, or zero if none. */ + /* re_search uses the fastmap, if there is one, + to skip quickly over totally implausible characters */ + char *translate; /* Translate table to apply to all characters before comparing. + Or zero for no translation. + The translation is applied to a pattern when it is compiled + and to data when it is matched. */ + char fastmap_accurate; + /* Set to zero when a new pattern is stored, + set to one when the fastmap is updated from it. */ + char can_be_null; /* Set to one by compiling fastmap + if this pattern might match the null string. + It does not necessarily match the null string + in that case, but if this is zero, it cannot. + 2 as value means can match null string + but at end of range or before a character + listed in the fastmap. */ + }; + + /* Structure to store "register" contents data in. + + Pass the address of such a structure as an argument to re_match, etc., + if you want this information back. + + start[i] and end[i] record the string matched by \( ... \) grouping i, + for i from 1 to RE_NREGS - 1. + start[0] and end[0] record the entire string matched. */ + + struct re_registers + { + int start[RE_NREGS]; + int end[RE_NREGS]; + }; + + /* These are the command codes that appear in compiled regular expressions, one per byte. + Some command codes are followed by argument bytes. + A command code can specify any interpretation whatever for its arguments. + Zero-bytes may appear in the compiled regular expression. */ + + enum regexpcode + { + unused, + exactn, /* followed by one byte giving n, and then by n literal bytes */ + begline, /* fails unless at beginning of line */ + endline, /* fails unless at end of line */ + jump, /* followed by two bytes giving relative address to jump to */ + on_failure_jump, /* followed by two bytes giving relative address of place + to resume at in case of failure. */ + finalize_jump, /* Throw away latest failure point and then jump to address. */ + maybe_finalize_jump, /* Like jump but finalize if safe to do so. + This is used to jump back to the beginning + of a repeat. If the command that follows + this jump is clearly incompatible with the + one at the beginning of the repeat, such that + we can be sure that there is no use backtracking + out of repetitions already completed, + then we finalize. */ + dummy_failure_jump, /* jump, and push a dummy failure point. + This failure point will be thrown away + if an attempt is made to use it for a failure. + A + construct makes this before the first repeat. */ + anychar, /* matches any one character */ + charset, /* matches any one char belonging to specified set. + First following byte is # bitmap bytes. + Then come bytes for a bit-map saying which chars are in. + Bits in each byte are ordered low-bit-first. + A character is in the set if its bit is 1. + A character too large to have a bit in the map + is automatically not in the set */ + charset_not, /* similar but match any character that is NOT one of those specified */ + start_memory, /* starts remembering the text that is matched + and stores it in a memory register. + followed by one byte containing the register number. + Register numbers must be in the range 0 through NREGS. */ + stop_memory, /* stops remembering the text that is matched + and stores it in a memory register. + followed by one byte containing the register number. + Register numbers must be in the range 0 through NREGS. */ + duplicate, /* match a duplicate of something remembered. + Followed by one byte containing the index of the memory register. */ + before_dot, /* Succeeds if before dot */ + at_dot, /* Succeeds if at dot */ + after_dot, /* Succeeds if after dot */ + begbuf, /* Succeeds if at beginning of buffer */ + endbuf, /* Succeeds if at end of buffer */ + wordchar, /* Matches any word-constituent character */ + notwordchar, /* Matches any char that is not a word-constituent */ + wordbeg, /* Succeeds if at word beginning */ + wordend, /* Succeeds if at word end */ + wordbound, /* Succeeds if at a word boundary */ + notwordbound, /* Succeeds if not at a word boundary */ + syntaxspec, /* Matches any character whose syntax is specified. + followed by a byte which contains a syntax code, Sword or such like */ + notsyntaxspec /* Matches any character whose syntax differs from the specified. */ + }; + + extern char *re_compile_pattern (); + /* Is this really advertised? */ + extern void re_compile_fastmap (); + extern int re_search (), re_search_2 (); + extern int re_match (), re_match_2 (); + + /* 4.2 bsd compatibility (yuck) */ + extern char *re_comp (); + extern int re_exec (); + + #ifdef SYNTAX_TABLE + extern char *re_syntax_table; + #endif Index: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/version.sh diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/version.sh:1.1 *** /dev/null Mon Feb 23 11:06:07 2004 --- llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gawk/version.sh Mon Feb 23 11:05:57 2004 *************** *** 0 **** --- 1,49 ---- + #! /bin/sh + + # version.sh --- create version.c + + if [ "x$1" = "x" ] + then + echo you must specify a release number on the command line + exit 1 + fi + + RELEASE="$1" + + cat << EOF + char *version_string = "@(#)Gnu Awk (gawk) ${RELEASE}"; + + /* 1.02 fixed /= += *= etc to return the new Left Hand Side instead + of the Right Hand Side */ + + /* 1.03 Fixed split() to treat strings of space and tab as FS if + the split char is ' '. + + Added -v option to print version number + + Fixed bug that caused rounding when printing large numbers */ + + /* 2.00beta Incorporated the functionality of the "new" awk as described + the book (reference not handy). Extensively tested, but no + doubt still buggy. Badly needs tuning and cleanup, in + particular in memory management which is currently almost + non-existent. */ + + /* 2.01 JF: Modified to compile under GCC, and fixed a few + bugs while I was at it. I hope I didn't add any more. + I modified parse.y to reduce the number of reduce/reduce + conflicts. There are still a few left. */ + + /* 2.02 Fixed JF's bugs; improved memory management, still needs + lots of work. */ + + /* 2.10 Major grammar rework and lots of bug fixes from David. + Major changes for performance enhancements from David. + A number of minor bug fixes and new features from Arnold. + Changes for MSDOS from Conrad Kwok and Scott Garfinkle. + The gawk.texinfo and info files included! */ + + /* 2.11 Bug fix release to 2.10. Lots of changes for portability, + speed, and configurability. */ + EOF + exit 0 From alkis at niobe.cs.uiuc.edu Mon Feb 23 12:15:07 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Mon Feb 23 12:15:07 2004 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/MachineBasicBlock.h Message-ID: <200402231814.i1NIEw301280@niobe.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: MachineBasicBlock.h updated: 1.21 -> 1.22 --- Log message: Refactor rewinding code for finding the first terminator of a basic block into MachineBasicBlock::getFirstTerminator(). This also fixes a bug in the implementation of the above in both RegAllocLocal and InstrSched, where instructions where added after the terminator if the basic block's only instruction was a terminator (it shouldn't matter for RegAllocLocal since this case never occurs in practice). --- Diffs of the changes: (+5 -0) Index: llvm/include/llvm/CodeGen/MachineBasicBlock.h diff -u llvm/include/llvm/CodeGen/MachineBasicBlock.h:1.21 llvm/include/llvm/CodeGen/MachineBasicBlock.h:1.22 --- llvm/include/llvm/CodeGen/MachineBasicBlock.h:1.21 Thu Feb 19 10:13:54 2004 +++ llvm/include/llvm/CodeGen/MachineBasicBlock.h Mon Feb 23 12:14:48 2004 @@ -95,6 +95,11 @@ reverse_iterator rend () { return Insts.rend(); } const_reverse_iterator rend () const { return Insts.rend(); } + /// getFirstTerminator - returns an iterator to the first terminator + /// instruction of this basic block. If a terminator does not exist, + /// it returns end() + iterator getFirstTerminator(); + void push_back(MachineInstr *MI) { Insts.push_back(MI); } template void insert(iterator I, IT S, IT E) { Insts.insert(I, S, E); } From alkis at niobe.cs.uiuc.edu Mon Feb 23 12:15:45 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Mon Feb 23 12:15:45 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/RegAllocLocal.cpp PHIElimination.cpp MachineBasicBlock.cpp Message-ID: <200402231814.i1NIEwM01283@niobe.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: RegAllocLocal.cpp updated: 1.56 -> 1.57 PHIElimination.cpp updated: 1.18 -> 1.19 MachineBasicBlock.cpp updated: 1.7 -> 1.8 --- Log message: Refactor rewinding code for finding the first terminator of a basic block into MachineBasicBlock::getFirstTerminator(). This also fixes a bug in the implementation of the above in both RegAllocLocal and InstrSched, where instructions where added after the terminator if the basic block's only instruction was a terminator (it shouldn't matter for RegAllocLocal since this case never occurs in practice). --- Diffs of the changes: (+14 -21) Index: llvm/lib/CodeGen/RegAllocLocal.cpp diff -u llvm/lib/CodeGen/RegAllocLocal.cpp:1.56 llvm/lib/CodeGen/RegAllocLocal.cpp:1.57 --- llvm/lib/CodeGen/RegAllocLocal.cpp:1.56 Sun Feb 22 13:37:31 2004 +++ llvm/lib/CodeGen/RegAllocLocal.cpp Mon Feb 23 12:14:48 2004 @@ -649,11 +649,7 @@ } } - // Rewind the iterator to point to the first flow control instruction... - const TargetInstrInfo &TII = TM->getInstrInfo(); - MI = MBB.end(); - while (MI != MBB.begin() && TII.isTerminatorInstr((--MI)->getOpcode())); - if (MI != MBB.end()) ++MI; + MI = MBB.getFirstTerminator(); // Spill all physical registers holding virtual registers now. for (unsigned i = 0, e = RegInfo->getNumRegs(); i != e; ++i) Index: llvm/lib/CodeGen/PHIElimination.cpp diff -u llvm/lib/CodeGen/PHIElimination.cpp:1.18 llvm/lib/CodeGen/PHIElimination.cpp:1.19 --- llvm/lib/CodeGen/PHIElimination.cpp:1.18 Fri Feb 13 19:18:34 2004 +++ llvm/lib/CodeGen/PHIElimination.cpp Mon Feb 23 12:14:48 2004 @@ -143,22 +143,7 @@ // source path the PHI. MachineBasicBlock &opBlock = *MI->getOperand(i).getMachineBasicBlock(); - // Figure out where to insert the copy, which is at the end of the - // predecessor basic block, but before any terminator/branch - // instructions... - MachineBasicBlock::iterator I = opBlock.end(); - if (I != opBlock.begin()) { // Handle empty blocks - --I; - // must backtrack over ALL the branches in the previous block - while (MII.isTerminatorInstr(I->getOpcode()) && - I != opBlock.begin()) - --I; - - // move back to the first branch instruction so new instructions - // are inserted right in front of it and not in front of a non-branch - if (!MII.isTerminatorInstr(I->getOpcode())) - ++I; - } + MachineBasicBlock::iterator I = opBlock.getFirstTerminator(); // Check to make sure we haven't already emitted the copy for this block. // This can happen because PHI nodes may have multiple entries for the Index: llvm/lib/CodeGen/MachineBasicBlock.cpp diff -u llvm/lib/CodeGen/MachineBasicBlock.cpp:1.7 llvm/lib/CodeGen/MachineBasicBlock.cpp:1.8 --- llvm/lib/CodeGen/MachineBasicBlock.cpp:1.7 Thu Feb 19 10:13:39 2004 +++ llvm/lib/CodeGen/MachineBasicBlock.cpp Mon Feb 23 12:14:48 2004 @@ -15,6 +15,8 @@ #include "llvm/BasicBlock.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineInstr.h" +#include "llvm/Target/TargetInstrInfo.h" +#include "llvm/Target/TargetMachine.h" #include "Support/LeakDetector.h" using namespace llvm; @@ -54,6 +56,16 @@ if (parent != toList.parent) for (; first != last; ++first) first->parent = toList.parent; +} + +MachineBasicBlock::iterator MachineBasicBlock::getFirstTerminator() +{ + const TargetInstrInfo& TII = MachineFunction::get( + getBasicBlock()->getParent()).getTarget().getInstrInfo(); + iterator I = end(); + while (I != begin() && TII.isTerminatorInstr((--I)->getOpcode())); + if (I != end() && !TII.isTerminatorInstr(I->getOpcode())) ++I; + return I; } void MachineBasicBlock::dump() const From alkis at niobe.cs.uiuc.edu Mon Feb 23 12:16:17 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Mon Feb 23 12:16:17 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/InstSelectSimple.cpp Message-ID: <200402231814.i1NIEwk01269@niobe.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: InstSelectSimple.cpp updated: 1.173 -> 1.174 --- Log message: Refactor rewinding code for finding the first terminator of a basic block into MachineBasicBlock::getFirstTerminator(). This also fixes a bug in the implementation of the above in both RegAllocLocal and InstrSched, where instructions where added after the terminator if the basic block's only instruction was a terminator (it shouldn't matter for RegAllocLocal since this case never occurs in practice). --- Diffs of the changes: (+1 -6) Index: llvm/lib/Target/X86/InstSelectSimple.cpp diff -u llvm/lib/Target/X86/InstSelectSimple.cpp:1.173 llvm/lib/Target/X86/InstSelectSimple.cpp:1.174 --- llvm/lib/Target/X86/InstSelectSimple.cpp:1.173 Mon Feb 23 01:42:19 2004 +++ llvm/lib/Target/X86/InstSelectSimple.cpp Mon Feb 23 12:14:47 2004 @@ -679,7 +679,6 @@ // void ISel::InsertFPRegKills() { SSARegMap &RegMap = *F->getSSARegMap(); - const TargetInstrInfo &TII = TM.getInstrInfo(); for (MachineFunction::iterator BB = F->begin(), E = F->end(); BB != E; ++BB) { for (MachineBasicBlock::iterator I = BB->begin(), E = BB->end(); I!=E; ++I) @@ -709,11 +708,7 @@ // it's not an unwind/return), insert the FP_REG_KILL instruction. if (BB->getBasicBlock()->getTerminator()->getNumSuccessors() && RequiresFPRegKill(BB->getBasicBlock())) { - // Rewind past any terminator instructions that might exist. - MachineBasicBlock::iterator I = BB->end(); - while (I != BB->begin() && TII.isTerminatorInstr((--I)->getOpcode())); - if (I != BB->end()) ++I; - BMI(BB, I, X86::FP_REG_KILL, 0); + BMI(BB, BB->getFirstTerminator(), X86::FP_REG_KILL, 0); ++NumFPKill; } } From gaeke at cs.uiuc.edu Mon Feb 23 12:17:01 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 12:17:01 2004 Subject: [llvm-commits] CVS: llvm/include/Support/iterator Message-ID: <200402231816.MAA09455@zion.cs.uiuc.edu> Changes in directory llvm/include/Support: iterator (r1.6) removed --- Log message: Replaced by include/Support/iterator.in. --- Diffs of the changes: (+0 -0) From gaeke at cs.uiuc.edu Mon Feb 23 12:17:30 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 12:17:30 2004 Subject: [llvm-commits] CVS: llvm/include/Support/iterator.in Message-ID: <200402231816.MAA09463@zion.cs.uiuc.edu> Changes in directory llvm/include/Support: iterator.in added (r1.1) --- Log message: Renamed from include/Support/iterator. Doxygenify comments; add autoconf substitution tags. --- Diffs of the changes: (+66 -0) Index: llvm/include/Support/iterator.in diff -c /dev/null llvm/include/Support/iterator.in:1.1 *** /dev/null Mon Feb 23 12:16:20 2004 --- llvm/include/Support/iterator.in Mon Feb 23 12:16:10 2004 *************** *** 0 **** --- 1,66 ---- + //===-- Support/iterator - "Portable" wrapper around -*- C++ -*-===// + // + // 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 provides a wrapper around the mysterious header file. + // In GCC 2.95.3, the file defines a bidirectional_iterator class (and other + // friends), instead of the standard iterator class. In GCC 3.1, the + // bidirectional_iterator class got moved out and the new, standards compliant, + // iterator<> class was added. Because there is nothing that we can do to get + // correct behavior on both compilers, we have this header with #ifdef's. Gross + // huh? + // + // By #includ'ing this file, you get the contents of plus the + // following classes in the global namespace: + // + // 1. bidirectional_iterator + // 2. forward_iterator + // + // The #if directives' expressions are filled in by Autoconf. + // + //===----------------------------------------------------------------------===// + + #ifndef SUPPORT_ITERATOR + #define SUPPORT_ITERATOR + + #include + + #if !@HAVE_BI_ITERATOR@ + # if @HAVE_STD_ITERATOR@ + /// If the bidirectional iterator is not defined, we attempt to define it in + /// terms of the C++ standard iterator. Otherwise, we import it with a "using" + /// statement. + /// + template + struct bidirectional_iterator + : public std::iterator { + }; + # else + # error "Need to have standard iterator to define bidirectional iterator!" + # endif + #else + using std::bidirectional_iterator; + #endif + + #if !@HAVE_FWD_ITERATOR@ + # if @HAVE_STD_ITERATOR@ + /// If the forward iterator is not defined, attempt to define it in terms of + /// the C++ standard iterator. Otherwise, we import it with a "using" statement. + /// + template + struct forward_iterator + : public std::iterator { + }; + # else + # error "Need to have standard iterator to define forward iterator!" + # endif + #else + using std::forward_iterator; + #endif + + #endif From gaeke at cs.uiuc.edu Mon Feb 23 12:18:00 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 12:18:00 2004 Subject: [llvm-commits] CVS: llvm/include/Config/config.h.in Message-ID: <200402231816.MAA09450@zion.cs.uiuc.edu> Changes in directory llvm/include/Config: config.h.in updated: 1.12 -> 1.13 --- Log message: Regenerated with autoheader-2.57. --- Diffs of the changes: (+0 -9) Index: llvm/include/Config/config.h.in diff -u llvm/include/Config/config.h.in:1.12 llvm/include/Config/config.h.in:1.13 --- llvm/include/Config/config.h.in:1.12 Fri Feb 20 00:40:58 2004 +++ llvm/include/Config/config.h.in Mon Feb 23 12:16:09 2004 @@ -18,9 +18,6 @@ /* Define to 1 if you have the `backtrace' function. */ #undef HAVE_BACKTRACE -/* define if the compiler has bidirectional iterator */ -#undef HAVE_BI_ITERATOR - /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H @@ -36,9 +33,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H -/* define if the compiler has STL iterators */ -#undef HAVE_FWD_ITERATOR - /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD @@ -125,9 +119,6 @@ /* Define if the compiler has a header that defines template class std::hash_set. */ #undef HAVE_STD_EXT_HASH_SET - -/* define if the compiler has STL iterators */ -#undef HAVE_STD_ITERATOR /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP From gaeke at cs.uiuc.edu Mon Feb 23 12:18:29 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 12:18:29 2004 Subject: [llvm-commits] CVS: llvm/autoconf/configure.ac Message-ID: <200402231816.MAA09443@zion.cs.uiuc.edu> Changes in directory llvm/autoconf: configure.ac updated: 1.73 -> 1.74 --- Log message: Add include/Support/iterator as an AC_OUTPUT file. --- Diffs of the changes: (+1 -1) Index: llvm/autoconf/configure.ac diff -u llvm/autoconf/configure.ac:1.73 llvm/autoconf/configure.ac:1.74 --- llvm/autoconf/configure.ac:1.73 Fri Feb 20 16:30:22 2004 +++ llvm/autoconf/configure.ac Mon Feb 23 12:16:08 2004 @@ -445,7 +445,7 @@ [Extension that shared libraries have, e.g., ".so".]) dnl Create the output files -AC_OUTPUT(Makefile.config) +AC_OUTPUT(Makefile.config include/Support/iterator) dnl Warn loudly if llvm-gcc was not obviously working if test $llvmgccwarn = yes From gaeke at cs.uiuc.edu Mon Feb 23 12:19:01 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 12:19:01 2004 Subject: [llvm-commits] CVS: llvm/autoconf/acinclude.m4 Message-ID: <200402231816.MAA09436@zion.cs.uiuc.edu> Changes in directory llvm/autoconf: acinclude.m4 updated: 1.2 -> 1.3 --- Log message: Make all iterator checks use AC_SUBST instead of AC_DEFINE. --- Diffs of the changes: (+15 -6) Index: llvm/autoconf/acinclude.m4 diff -u llvm/autoconf/acinclude.m4:1.2 llvm/autoconf/acinclude.m4:1.3 --- llvm/autoconf/acinclude.m4:1.2 Mon Jan 12 10:14:54 2004 +++ llvm/autoconf/acinclude.m4 Mon Feb 23 12:16:07 2004 @@ -6013,9 +6013,12 @@ ac_cv_cxx_have_std_iterator=yes, ac_cv_cxx_have_std_iterator=no) AC_LANG_RESTORE ]) -if test "$ac_cv_cxx_have_std_iterator" = yes; then - AC_DEFINE(HAVE_STD_ITERATOR,,[define if the compiler has STL iterators]) +HAVE_STD_ITERATOR=0 +if test "$ac_cv_cxx_have_std_iterator" = yes +then + HAVE_STD_ITERATOR=1 fi +AC_SUBST(HAVE_STD_ITERATOR) ]) # @@ -6035,9 +6038,12 @@ ac_cv_cxx_have_bi_iterator=yes, ac_cv_cxx_have_bi_iterator=no) AC_LANG_RESTORE ]) -if test "$ac_cv_cxx_have_bi_iterator" = yes; then - AC_DEFINE(HAVE_BI_ITERATOR,,[define if the compiler has bidirectional iterator]) +HAVE_BI_ITERATOR=0 +if test "$ac_cv_cxx_have_bi_iterator" = yes +then + HAVE_BI_ITERATOR=1 fi +AC_SUBST(HAVE_BI_ITERATOR) ]) # @@ -6057,9 +6063,12 @@ ac_cv_cxx_have_fwd_iterator=yes, ac_cv_cxx_have_fwd_iterator=no) AC_LANG_RESTORE ]) -if test "$ac_cv_cxx_have_fwd_iterator" = yes; then - AC_DEFINE(HAVE_FWD_ITERATOR,,[define if the compiler has STL iterators]) +HAVE_FWD_ITERATOR=0 +if test "$ac_cv_cxx_have_fwd_iterator" = yes +then + HAVE_FWD_ITERATOR=1 fi +AC_SUBST(HAVE_FWD_ITERATOR) ]) # From gaeke at cs.uiuc.edu Mon Feb 23 12:19:33 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 12:19:33 2004 Subject: [llvm-commits] CVS: llvm/configure Message-ID: <200402231816.MAA09429@zion.cs.uiuc.edu> Changes in directory llvm: configure updated: 1.76 -> 1.77 --- Log message: Regenerated with autoconf-2.57. --- Diffs of the changes: (+21 -20) Index: llvm/configure diff -u llvm/configure:1.76 llvm/configure:1.77 --- llvm/configure:1.76 Fri Feb 20 16:30:20 2004 +++ llvm/configure Mon Feb 23 12:16:06 2004 @@ -465,7 +465,7 @@ #endif" ac_unique_file=""Makefile.config.in"" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS subdirs INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os OS LLVMGCCDIR ARCH CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT CC CFLAGS ac_ct_CC CPP ifGNUmake LEX LEXLIB LEX_OUTPUT_ROOT YACC BISON EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL DOT ETAGS ETAGSFLAGS PYTHON QMTEST ENDIAN ALLOCA MMAP_FILE ENABLE_OPTIMIZED SPEC_ROOT USE_SPEC SPEC95_ROOT USE_SPEC95 POVRAY_ROOT USE_POVRAY UPB DISABLE_LLC_DIFFS JIT LLVMCC1 LLVMCC1PLUS BCR PAPIDIR SHLIBEXT LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS subdirs INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os OS LLVMGCCDIR ARCH CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT CC CFLAGS ac_ct_CC CPP ifGNUmake LEX LEXLIB LEX_OUTPUT_ROOT YACC BISON EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL DOT ETAGS ETAGSFLAGS PYTHON QMTEST ENDIAN HAVE_STD_ITERATOR HAVE_BI_ITERATOR HAVE_FWD_ITERATOR ALLOCA MMAP_FILE ENABLE_OPTIMIZED SPEC_ROOT USE_SPEC SPEC95_ROOT USE_SPEC95 POVRAY_ROOT USE_POVRAY UPB DISABLE_LLC_DIFFS JIT LLVMCC1 LLVM! CC1PLUS BCR PAPIDIR SHLIBEXT LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -20342,14 +20342,13 @@ fi echo "$as_me:$LINENO: result: $ac_cv_cxx_have_std_iterator" >&5 echo "${ECHO_T}$ac_cv_cxx_have_std_iterator" >&6 -if test "$ac_cv_cxx_have_std_iterator" = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_STD_ITERATOR -_ACEOF - +HAVE_STD_ITERATOR=0 +if test "$ac_cv_cxx_have_std_iterator" = yes +then + HAVE_STD_ITERATOR=1 fi + echo "$as_me:$LINENO: checking whether the compiler has the bidirectional iterator" >&5 echo $ECHO_N "checking whether the compiler has the bidirectional iterator... $ECHO_C" >&6 if test "${ac_cv_cxx_have_bi_iterator+set}" = set; then @@ -20413,14 +20412,13 @@ fi echo "$as_me:$LINENO: result: $ac_cv_cxx_have_bi_iterator" >&5 echo "${ECHO_T}$ac_cv_cxx_have_bi_iterator" >&6 -if test "$ac_cv_cxx_have_bi_iterator" = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_BI_ITERATOR -_ACEOF - +HAVE_BI_ITERATOR=0 +if test "$ac_cv_cxx_have_bi_iterator" = yes +then + HAVE_BI_ITERATOR=1 fi + echo "$as_me:$LINENO: checking whether the compiler has forward iterators" >&5 echo $ECHO_N "checking whether the compiler has forward iterators... $ECHO_C" >&6 if test "${ac_cv_cxx_have_fwd_iterator+set}" = set; then @@ -20484,15 +20482,14 @@ fi echo "$as_me:$LINENO: result: $ac_cv_cxx_have_fwd_iterator" >&5 echo "${ECHO_T}$ac_cv_cxx_have_fwd_iterator" >&6 -if test "$ac_cv_cxx_have_fwd_iterator" = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_FWD_ITERATOR -_ACEOF - +HAVE_FWD_ITERATOR=0 +if test "$ac_cv_cxx_have_fwd_iterator" = yes +then + HAVE_FWD_ITERATOR=1 fi + # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo "$as_me:$LINENO: checking for working alloca.h" >&5 @@ -21928,7 +21925,7 @@ _ACEOF - ac_config_files="$ac_config_files Makefile.config" + ac_config_files="$ac_config_files Makefile.config include/Support/iterator" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure @@ -22511,6 +22508,7 @@ case "$ac_config_target" in # Handling of arguments. "Makefile.config" ) CONFIG_FILES="$CONFIG_FILES Makefile.config" ;; + "include/Support/iterator" ) CONFIG_FILES="$CONFIG_FILES include/Support/iterator" ;; "Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile" ;; "Makefile.common" ) CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile.common" ;; "lib/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS lib/Makefile" ;; @@ -22701,6 +22699,9 @@ s, at PYTHON@,$PYTHON,;t t s, at QMTEST@,$QMTEST,;t t s, at ENDIAN@,$ENDIAN,;t t +s, at HAVE_STD_ITERATOR@,$HAVE_STD_ITERATOR,;t t +s, at HAVE_BI_ITERATOR@,$HAVE_BI_ITERATOR,;t t +s, at HAVE_FWD_ITERATOR@,$HAVE_FWD_ITERATOR,;t t s, at ALLOCA@,$ALLOCA,;t t s, at MMAP_FILE@,$MMAP_FILE,;t t s, at ENABLE_OPTIMIZED@,$ENABLE_OPTIMIZED,;t t From alkis at niobe.cs.uiuc.edu Mon Feb 23 12:29:02 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Mon Feb 23 12:29:02 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/RegAllocLinearScan.cpp Message-ID: <200402231828.i1NISkL09617@niobe.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: RegAllocLinearScan.cpp updated: 1.59 -> 1.60 --- Log message: Remove implementation of default constructor as it is useless now. --- Diffs of the changes: (+0 -5) Index: llvm/lib/CodeGen/RegAllocLinearScan.cpp diff -u llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.59 llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.60 --- llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.59 Mon Feb 23 00:10:13 2004 +++ llvm/lib/CodeGen/RegAllocLinearScan.cpp Mon Feb 23 12:28:35 2004 @@ -59,11 +59,6 @@ SpillWeights spillWeights_; public: - RA() - : prt_(NULL) { - - } - virtual const char* getPassName() const { return "Linear Scan Register Allocator"; } From alkis at niobe.cs.uiuc.edu Mon Feb 23 12:37:01 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Mon Feb 23 12:37:01 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/MachineBasicBlock.cpp Message-ID: <200402231836.i1NIaop19267@niobe.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: MachineBasicBlock.cpp updated: 1.8 -> 1.9 --- Log message: Use MachineBasicBlock::getParent(). --- Diffs of the changes: (+1 -2) Index: llvm/lib/CodeGen/MachineBasicBlock.cpp diff -u llvm/lib/CodeGen/MachineBasicBlock.cpp:1.8 llvm/lib/CodeGen/MachineBasicBlock.cpp:1.9 --- llvm/lib/CodeGen/MachineBasicBlock.cpp:1.8 Mon Feb 23 12:14:48 2004 +++ llvm/lib/CodeGen/MachineBasicBlock.cpp Mon Feb 23 12:36:38 2004 @@ -60,8 +60,7 @@ MachineBasicBlock::iterator MachineBasicBlock::getFirstTerminator() { - const TargetInstrInfo& TII = MachineFunction::get( - getBasicBlock()->getParent()).getTarget().getInstrInfo(); + const TargetInstrInfo& TII = getParent()->getTarget().getInstrInfo(); iterator I = end(); while (I != begin() && TII.isTerminatorInstr((--I)->getOpcode())); if (I != end() && !TII.isTerminatorInstr(I->getOpcode())) ++I; From lattner at cs.uiuc.edu Mon Feb 23 12:39:02 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 12:39:02 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/MachineCodeEmitter.cpp MachineInstr.cpp MachineInstrAnnot.cpp PHIElimination.cpp Message-ID: <200402231838.MAA21023@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: MachineCodeEmitter.cpp updated: 1.14 -> 1.15 MachineInstr.cpp updated: 1.91 -> 1.92 MachineInstrAnnot.cpp updated: 1.10 -> 1.11 PHIElimination.cpp updated: 1.19 -> 1.20 --- Log message: Finegrainify namespacification --- Diffs of the changes: (+12 -22) Index: llvm/lib/CodeGen/MachineCodeEmitter.cpp diff -u llvm/lib/CodeGen/MachineCodeEmitter.cpp:1.14 llvm/lib/CodeGen/MachineCodeEmitter.cpp:1.15 --- llvm/lib/CodeGen/MachineCodeEmitter.cpp:1.14 Tue Nov 11 16:41:32 2003 +++ llvm/lib/CodeGen/MachineCodeEmitter.cpp Mon Feb 23 12:38:20 2004 @@ -15,8 +15,7 @@ #include "llvm/CodeGen/MachineFunction.h" #include "llvm/Function.h" #include - -namespace llvm { +using namespace llvm; namespace { struct DebugMachineCodeEmitter : public MachineCodeEmitter { @@ -173,5 +172,3 @@ MachineCodeEmitter::createFilePrinterEmitter(MachineCodeEmitter &MCE) { return new FilePrinterEmitter(MCE, std::cerr); } - -} // End llvm namespace Index: llvm/lib/CodeGen/MachineInstr.cpp diff -u llvm/lib/CodeGen/MachineInstr.cpp:1.91 llvm/lib/CodeGen/MachineInstr.cpp:1.92 --- llvm/lib/CodeGen/MachineInstr.cpp:1.91 Thu Feb 19 10:17:08 2004 +++ llvm/lib/CodeGen/MachineInstr.cpp Mon Feb 23 12:38:20 2004 @@ -21,8 +21,7 @@ #include "llvm/Target/TargetInstrInfo.h" #include "llvm/Target/MRegisterInfo.h" #include "Support/LeakDetector.h" - -namespace llvm { +using namespace llvm; // Global variable holding an array of descriptors for machine instructions. // The actual object needs to be created separately for each target machine. @@ -31,7 +30,9 @@ // FIXME: This should be a property of the target so that more than one target // at a time can be active... // -extern const TargetInstrDescriptor *TargetInstrDescriptors; +namespace { + extern const TargetInstrDescriptor *TargetInstrDescriptors; +} // Constructor for instructions with variable #operands MachineInstr::MachineInstr(short opcode, unsigned numOperands) @@ -291,7 +292,7 @@ // Specialize printing if op#0 is definition if (getNumOperands() && getOperand(0).isDef() && !getOperand(0).isUse()) { - llvm::print(getOperand(0), OS, TM); + ::print(getOperand(0), OS, TM); OS << " = "; ++StartOp; // Don't print this operand again! } @@ -302,7 +303,7 @@ if (i != StartOp) OS << ","; OS << " "; - llvm::print(mop, OS, TM); + ::print(mop, OS, TM); if (mop.isDef()) if (mop.isUse()) @@ -441,12 +442,9 @@ break; } - if (MO.flags & - (MachineOperand::HIFLAG32 | MachineOperand::LOFLAG32 | - MachineOperand::HIFLAG64 | MachineOperand::LOFLAG64)) + if (MO.isHiBits32() || MO.isLoBits32() || MO.isHiBits64() || MO.isLoBits64()) OS << ")"; return OS; } -} // End llvm namespace Index: llvm/lib/CodeGen/MachineInstrAnnot.cpp diff -u llvm/lib/CodeGen/MachineInstrAnnot.cpp:1.10 llvm/lib/CodeGen/MachineInstrAnnot.cpp:1.11 --- llvm/lib/CodeGen/MachineInstrAnnot.cpp:1.10 Tue Nov 11 16:41:32 2003 +++ llvm/lib/CodeGen/MachineInstrAnnot.cpp Mon Feb 23 12:38:20 2004 @@ -17,8 +17,7 @@ #include "llvm/CodeGen/MachineCodeForInstruction.h" #include "llvm/iOther.h" #include "llvm/Type.h" - -namespace llvm { +using namespace llvm; CallArgsDescriptor::CallArgsDescriptor(CallInst* _callInstr, TmpInstruction* _retAddrReg, @@ -77,5 +76,3 @@ assert(desc->getCallInst()==callInstr && "Incorrect call args descriptor?"); return desc; } - -} // End llvm namespace Index: llvm/lib/CodeGen/PHIElimination.cpp diff -u llvm/lib/CodeGen/PHIElimination.cpp:1.19 llvm/lib/CodeGen/PHIElimination.cpp:1.20 --- llvm/lib/CodeGen/PHIElimination.cpp:1.19 Mon Feb 23 12:14:48 2004 +++ llvm/lib/CodeGen/PHIElimination.cpp Mon Feb 23 12:38:20 2004 @@ -13,6 +13,7 @@ // //===----------------------------------------------------------------------===// +#include "llvm/CodeGen/Passes.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/SSARegMap.h" @@ -21,8 +22,7 @@ #include "llvm/Target/TargetMachine.h" #include "llvm/Support/CFG.h" #include "Support/STLExtras.h" - -namespace llvm { +using namespace llvm; namespace { struct PNE : public MachineFunctionPass { @@ -56,7 +56,7 @@ } -const PassInfo *PHIEliminationID = X.getPassInfo(); +const PassInfo *llvm::PHIEliminationID = X.getPassInfo(); /// EliminatePHINodes - Eliminate phi nodes by inserting copy instructions in /// predecessor basic blocks. @@ -250,5 +250,3 @@ } return true; } - -} // End llvm namespace From lattner at cs.uiuc.edu Mon Feb 23 12:41:02 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 12:41:02 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/MachineInstr.cpp Message-ID: <200402231840.MAA23223@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: MachineInstr.cpp updated: 1.92 -> 1.93 --- Log message: Fix bugs in finegrainification --- Diffs of the changes: (+3 -1) Index: llvm/lib/CodeGen/MachineInstr.cpp diff -u llvm/lib/CodeGen/MachineInstr.cpp:1.92 llvm/lib/CodeGen/MachineInstr.cpp:1.93 --- llvm/lib/CodeGen/MachineInstr.cpp:1.92 Mon Feb 23 12:38:20 2004 +++ llvm/lib/CodeGen/MachineInstr.cpp Mon Feb 23 12:40:08 2004 @@ -30,7 +30,7 @@ // FIXME: This should be a property of the target so that more than one target // at a time can be active... // -namespace { +namespace llvm { extern const TargetInstrDescriptor *TargetInstrDescriptors; } @@ -329,6 +329,7 @@ OS << "\n"; } +namespace llvm { std::ostream &operator<<(std::ostream &os, const MachineInstr &MI) { // If the instruction is embedded into a basic block, we can find the target // info for the instruction. @@ -448,3 +449,4 @@ return OS; } +} From alkis at niobe.cs.uiuc.edu Mon Feb 23 12:46:01 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Mon Feb 23 12:46:01 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/RegAllocLinearScan.cpp Message-ID: <200402231845.i1NIjgA26160@niobe.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: RegAllocLinearScan.cpp updated: 1.60 -> 1.61 --- Log message: Add number of spilled registers statistic. --- Diffs of the changes: (+2 -0) Index: llvm/lib/CodeGen/RegAllocLinearScan.cpp diff -u llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.60 llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.61 --- llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.60 Mon Feb 23 12:28:35 2004 +++ llvm/lib/CodeGen/RegAllocLinearScan.cpp Mon Feb 23 12:45:32 2004 @@ -34,6 +34,7 @@ namespace { Statistic<> numStores("ra-linearscan", "Number of stores added"); Statistic<> numLoads ("ra-linearscan", "Number of loads added"); + Statistic<> numSpills("ra-linearscan", "Number of register spills"); class RA : public MachineFunctionPass { private: @@ -737,6 +738,7 @@ bool inserted = v2ssMap_.insert(std::make_pair(virtReg, frameIndex)).second; assert(inserted && "attempt to assign stack slot to spilled register!"); + ++numSpills; return frameIndex; } From alkis at niobe.cs.uiuc.edu Mon Feb 23 12:46:32 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Mon Feb 23 12:46:32 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/TEST.llc.report Message-ID: <200402231845.i1NIjg926155@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs: TEST.llc.report updated: 1.8 -> 1.9 --- Log message: Add number of spilled registers statistic. --- Diffs of the changes: (+1 -0) Index: llvm/test/Programs/TEST.llc.report diff -u llvm/test/Programs/TEST.llc.report:1.8 llvm/test/Programs/TEST.llc.report:1.9 --- llvm/test/Programs/TEST.llc.report:1.8 Mon Feb 23 10:55:33 2004 +++ llvm/test/Programs/TEST.llc.report Mon Feb 23 12:45:32 2004 @@ -43,6 +43,7 @@ ["#store" , '([0-9]+).*Number of stores added'], ["#load" , '([0-9]+).*Number of loads added'], ["#fold" , '([0-9]+).*Number of loads/stores folded into instructions'], + ["#spill" , '([0-9]+).*Number of register spills'], ["#fp" , '([0-9]+).*Number of floating point instructions'], ["#fxch" , '([0-9]+).*Number of fxch instructions inserted'], ["#i-mov" , '([0-9]+).*Number of identity moves eliminated'], From gaeke at cs.uiuc.edu Mon Feb 23 12:57:06 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 12:57:06 2004 Subject: [llvm-commits] CVS: llvm/include/Support/hash_set.in hash_set Message-ID: <200402231856.MAA27751@zion.cs.uiuc.edu> Changes in directory llvm/include/Support: hash_set.in added (r1.1) hash_set (r1.13) removed --- Log message: Renamed to hash_set.in; move to using autoconf substitution tags. --- Diffs of the changes: (+67 -0) Index: llvm/include/Support/hash_set.in diff -c /dev/null llvm/include/Support/hash_set.in:1.1 *** /dev/null Mon Feb 23 12:56:46 2004 --- llvm/include/Support/hash_set.in Mon Feb 23 12:56:36 2004 *************** *** 0 **** --- 1,67 ---- + //===-- Support/hash_set - "Portable" wrapper around hash_set ---*- C++ -*-===// + // + // 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. + // + //===----------------------------------------------------------------------===// + // vim:ft=cpp + // + // This file provides a wrapper around the mysterious header file + // that seems to move around between GCC releases into and out of namespaces at + // will. #including this header will cause hash_set to be available in the + // global namespace. + // + //===----------------------------------------------------------------------===// + + #ifndef SUPPORT_HASH_SET + #define SUPPORT_HASH_SET + + // Compiler Support Matrix + // + // Version Namespace Header File + // 2.95.x :: hash_set + // 3.0.4 std ext/hash_set + // 3.1 __gnu_cxx ext/hash_set + // + + // GCC versions 3.1 and later put hash_set in and in + // the __gnu_cxx namespace. + #if @HAVE_GNU_EXT_HASH_SET@ + # include + # ifndef HASH_NAMESPACE + # define HASH_NAMESPACE __gnu_cxx + # endif + + // GCC 3.0.x puts hash_set in and in the std namespace. + #elif @HAVE_STD_EXT_HASH_SET@ + # include + # ifndef HASH_NAMESPACE + # define HASH_NAMESPACE std + # endif + + // Older compilers such as GCC before version 3.0 do not keep + // extensions in the `ext' directory, and ignore the `std' namespace. + #elif @HAVE_GLOBAL_HASH_SET@ + # include + # ifndef HASH_NAMESPACE + # define HASH_NAMESPACE std + # endif + + // Give a warning if we couldn't find it, instead of (or in addition to) + // randomly doing something dumb. + #else + # warning "Autoconfiguration failed to find the hash_set header file." + #endif + + using HASH_NAMESPACE::hash_set; + using HASH_NAMESPACE::hash; + + // Include vector because ext/hash_set includes stl_vector.h and leaves + // out specializations like stl_bvector.h, causing link conflicts. + #include + + #include + + #endif From gaeke at cs.uiuc.edu Mon Feb 23 12:57:35 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 12:57:35 2004 Subject: [llvm-commits] CVS: llvm/include/Support/hash_map.in hash_map Message-ID: <200402231856.MAA27744@zion.cs.uiuc.edu> Changes in directory llvm/include/Support: hash_map.in added (r1.1) hash_map (r1.14) removed --- Log message: Renamed to hash_map.in; move to using autoconf substitution tags. --- Diffs of the changes: (+66 -0) Index: llvm/include/Support/hash_map.in diff -c /dev/null llvm/include/Support/hash_map.in:1.1 *** /dev/null Mon Feb 23 12:56:45 2004 --- llvm/include/Support/hash_map.in Mon Feb 23 12:56:35 2004 *************** *** 0 **** --- 1,66 ---- + //===-- Support/hash_map - "Portable" wrapper around hash_map ---*- C++ -*-===// + // + // 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 provides a wrapper around the mysterious header file + // that seems to move around between GCC releases into and out of namespaces at + // will. #including this header will cause hash_map to be available in the + // global namespace. + // + //===----------------------------------------------------------------------===// + + #ifndef SUPPORT_HASH_MAP + #define SUPPORT_HASH_MAP + + // Compiler Support Matrix + // + // Version Namespace Header File + // 2.95.x :: hash_map + // 3.0.4 std ext/hash_map + // 3.1 __gnu_cxx ext/hash_map + // + + #if @HAVE_GNU_EXT_HASH_MAP@ + // This is for GCC-3.1+ which puts hash in ext/hash_map + # include + # ifndef HASH_NAMESPACE + # define HASH_NAMESPACE __gnu_cxx + # endif + + // GCC 3.0.x puts hash_map in and in the std namespace. + #elif @HAVE_STD_EXT_HASH_MAP@ + # include + # ifndef HASH_NAMESPACE + # define HASH_NAMESPACE std + # endif + + // Older compilers such as GCC before version 3.0 do not keep + // extensions in the `ext' directory, and ignore the `std' namespace. + #elif @HAVE_GLOBAL_HASH_MAP@ + # include + # ifndef HASH_NAMESPACE + # define HASH_NAMESPACE std + # endif + + // Give a warning if we couldn't find it, instead of (or in addition to) + // randomly doing something dumb. + #else + # warning "Autoconfiguration failed to find the hash_map header file." + #endif + + using HASH_NAMESPACE::hash_map; + using HASH_NAMESPACE::hash_multimap; + using HASH_NAMESPACE::hash; + + // Include vector because ext/hash_map includes stl_vector.h and leaves + // out specializations like stl_bvector.h, causing link conflicts. + #include + + #include + + #endif From gaeke at cs.uiuc.edu Mon Feb 23 12:58:06 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 12:58:06 2004 Subject: [llvm-commits] CVS: llvm/autoconf/configure.ac Message-ID: <200402231856.MAA26604@zion.cs.uiuc.edu> Changes in directory llvm/autoconf: configure.ac updated: 1.74 -> 1.75 --- Log message: Add include/Support/hash_map and include/Support/hash_set as AC_OUTPUT files. --- Diffs of the changes: (+4 -1) Index: llvm/autoconf/configure.ac diff -u llvm/autoconf/configure.ac:1.74 llvm/autoconf/configure.ac:1.75 --- llvm/autoconf/configure.ac:1.74 Mon Feb 23 12:16:08 2004 +++ llvm/autoconf/configure.ac Mon Feb 23 12:56:05 2004 @@ -445,7 +445,10 @@ [Extension that shared libraries have, e.g., ".so".]) dnl Create the output files -AC_OUTPUT(Makefile.config include/Support/iterator) +AC_OUTPUT(Makefile.config + include/Support/iterator + include/Support/hash_map + include/Support/hash_set) dnl Warn loudly if llvm-gcc was not obviously working if test $llvmgccwarn = yes From gaeke at cs.uiuc.edu Mon Feb 23 12:58:35 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 12:58:35 2004 Subject: [llvm-commits] CVS: llvm/include/Config/config.h.in Message-ID: <200402231856.MAA26553@zion.cs.uiuc.edu> Changes in directory llvm/include/Config: config.h.in updated: 1.13 -> 1.14 --- Log message: Regenerated using autoheader-2.57. --- Diffs of the changes: (+0 -24) Index: llvm/include/Config/config.h.in diff -u llvm/include/Config/config.h.in:1.13 llvm/include/Config/config.h.in:1.14 --- llvm/include/Config/config.h.in:1.13 Mon Feb 23 12:16:09 2004 +++ llvm/include/Config/config.h.in Mon Feb 23 12:56:04 2004 @@ -42,22 +42,6 @@ /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY -/* Define if the compiler has a header that defines template class - ::hash_map. */ -#undef HAVE_GLOBAL_HASH_MAP - -/* Define if the compiler has a header that defines template class - ::hash_set. */ -#undef HAVE_GLOBAL_HASH_SET - -/* Define if the compiler has a header that defines template - class __gnu_cxx::hash_map. */ -#undef HAVE_GNU_EXT_HASH_MAP - -/* Define if the compiler has a header that defines template - class __gnu_cxx::hash_set. */ -#undef HAVE_GNU_EXT_HASH_SET - /* Define to 1 if the system has the type `int64_t'. */ #undef HAVE_INT64_T @@ -111,14 +95,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H - -/* Define if the compiler has a header that defines template - class std::hash_map. */ -#undef HAVE_STD_EXT_HASH_MAP - -/* Define if the compiler has a header that defines template - class std::hash_set. */ -#undef HAVE_STD_EXT_HASH_SET /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP From gaeke at cs.uiuc.edu Mon Feb 23 12:59:05 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 12:59:05 2004 Subject: [llvm-commits] CVS: llvm/autoconf/acinclude.m4 Message-ID: <200402231856.MAA26546@zion.cs.uiuc.edu> Changes in directory llvm/autoconf: acinclude.m4 updated: 1.3 -> 1.4 --- Log message: Move HASH_* checks to using AC_SUBST instead of AC_DEFINE. Tighten up some whitespace and comments. --- Diffs of the changes: (+40 -32) Index: llvm/autoconf/acinclude.m4 diff -u llvm/autoconf/acinclude.m4:1.3 llvm/autoconf/acinclude.m4:1.4 --- llvm/autoconf/acinclude.m4:1.3 Mon Feb 23 12:16:07 2004 +++ llvm/autoconf/acinclude.m4 Mon Feb 23 12:56:03 2004 @@ -5888,10 +5888,8 @@ fi ]) -# # Check for hash_map extension. This is from # http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_ext_hash_map.html -# AC_DEFUN([AC_CXX_HAVE_STD_EXT_HASH_MAP], [AC_CACHE_CHECK([whether the compiler has defining template class std::hash_map], ac_cv_cxx_have_std_ext_hash_map, @@ -5904,9 +5902,12 @@ #endif],[hash_map t;], [ac_cv_cxx_have_std_ext_hash_map=yes], [ac_cv_cxx_have_std_ext_hash_map=no]) AC_LANG_RESTORE]) - if test "$ac_cv_cxx_have_std_ext_hash_map" = yes; then - AC_DEFINE(HAVE_STD_EXT_HASH_MAP,,[Define if the compiler has a header that defines template class std::hash_map.]) - fi]) + HAVE_STD_EXT_HASH_MAP=0 + if test "$ac_cv_cxx_have_std_ext_hash_map" = yes + then + HAVE_STD_EXT_HASH_MAP=1 + fi + AC_SUBST(HAVE_STD_EXT_HASH_MAP)]) AC_DEFUN([AC_CXX_HAVE_GNU_EXT_HASH_MAP], [AC_CACHE_CHECK([whether the compiler has defining template class __gnu_cxx::hash_map], @@ -5920,9 +5921,12 @@ #endif],[hash_map t; ], [ac_cv_cxx_have_gnu_ext_hash_map=yes],[ac_cv_cxx_have_gnu_ext_hash_map=no]) AC_LANG_RESTORE]) - if test "$ac_cv_cxx_have_gnu_ext_hash_map" = yes; then - AC_DEFINE(HAVE_GNU_EXT_HASH_MAP,,[Define if the compiler has a header that defines template class __gnu_cxx::hash_map.]) - fi]) + HAVE_GNU_EXT_HASH_MAP=0 + if test "$ac_cv_cxx_have_gnu_ext_hash_map" = yes + then + HAVE_GNU_EXT_HASH_MAP=1 + fi + AC_SUBST(HAVE_GNU_EXT_HASH_MAP)]) AC_DEFUN([AC_CXX_HAVE_GLOBAL_HASH_MAP], [AC_CACHE_CHECK([whether the compiler has defining template class ::hash_map], @@ -5933,18 +5937,20 @@ AC_TRY_COMPILE([#include ],[hash_map t; ], [ac_cv_cxx_have_global_hash_map=yes], [ac_cv_cxx_have_global_hash_map=no]) AC_LANG_RESTORE]) - if test "$ac_cv_cxx_have_global_hash_map" = yes; then - AC_DEFINE(HAVE_GLOBAL_HASH_MAP,,[Define if the compiler has a header that defines template class ::hash_map.]) - fi]) + HAVE_GLOBAL_HASH_MAP=0 + if test "$ac_cv_cxx_have_global_hash_map" = yes + then + HAVE_GLOBAL_HASH_MAP=1 + fi + AC_SUBST(HAVE_GLOBAL_HASH_MAP)]) AC_DEFUN([AC_CXX_HAVE_HASH_MAP], [AC_CXX_HAVE_STD_EXT_HASH_MAP AC_CXX_HAVE_GNU_EXT_HASH_MAP AC_CXX_HAVE_GLOBAL_HASH_MAP]) -# + # Check for hash_set extension. This is modified from # http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_ext_hash_set.html -# AC_DEFUN([AC_CXX_HAVE_STD_EXT_HASH_SET], [AC_CACHE_CHECK([whether the compiler has defining template class std::hash_set], ac_cv_cxx_have_std_ext_hash_set, @@ -5957,9 +5963,12 @@ #endif],[hash_set t; ], [ac_cv_cxx_have_std_ext_hash_set=yes], [ac_cv_cxx_have_std_ext_hash_set=no]) AC_LANG_RESTORE]) - if test "$ac_cv_cxx_have_std_ext_hash_set" = yes; then - AC_DEFINE(HAVE_STD_EXT_HASH_SET,,[Define if the compiler has a header that defines template class std::hash_set.]) - fi]) + HAVE_STD_EXT_HASH_SET=0 + if test "$ac_cv_cxx_have_std_ext_hash_set" = yes + then + HAVE_STD_EXT_HASH_SET=1 + fi + AC_SUBST(HAVE_STD_EXT_HASH_SET)]) AC_DEFUN([AC_CXX_HAVE_GNU_EXT_HASH_SET], [AC_CACHE_CHECK( @@ -5974,9 +5983,12 @@ #endif],[hash_set t; ], [ac_cv_cxx_have_gnu_ext_hash_set=yes], [ac_cv_cxx_have_gnu_ext_hash_set=no]) AC_LANG_RESTORE]) - if test "$ac_cv_cxx_have_gnu_ext_hash_set" = yes; then - AC_DEFINE(HAVE_GNU_EXT_HASH_SET,,[Define if the compiler has a header that defines template class __gnu_cxx::hash_set.]) - fi]) + HAVE_GNU_EXT_HASH_SET=0 + if test "$ac_cv_cxx_have_gnu_ext_hash_set" = yes + then + HAVE_GNU_EXT_HASH_SET=1 + fi + AC_SUBST(HAVE_GNU_EXT_HASH_SET)]) AC_DEFUN([AC_CXX_HAVE_GLOBAL_HASH_SET], [AC_CACHE_CHECK([whether the compiler has defining template class ::hash_set], @@ -5987,19 +5999,20 @@ AC_TRY_COMPILE([#include ],[hash_set t; return 0;], [ac_cv_cxx_have_global_hash_set=yes], [ac_cv_cxx_have_global_hash_set=no]) AC_LANG_RESTORE]) - if test "$ac_cv_cxx_have_global_hash_set" = yes; then - AC_DEFINE(HAVE_GLOBAL_HASH_SET,,[Define if the compiler has a header that defines template class ::hash_set.]) - fi]) + HAVE_GLOBAL_HASH_SET=0 + if test "$ac_cv_cxx_have_global_hash_set" = yes + then + HAVE_GLOBAL_HASH_SET=1 + fi + AC_SUBST(HAVE_GLOBAL_HASH_SET)]) AC_DEFUN([AC_CXX_HAVE_HASH_SET], [AC_CXX_HAVE_STD_EXT_HASH_SET AC_CXX_HAVE_GNU_EXT_HASH_SET AC_CXX_HAVE_GLOBAL_HASH_SET]) -# # Check for standard iterator extension. This is modified from # http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_ext_hash_set.html -# AC_DEFUN([AC_CXX_HAVE_STD_ITERATOR], [AC_CACHE_CHECK(whether the compiler has the standard iterator, ac_cv_cxx_have_std_iterator, @@ -6018,8 +6031,7 @@ then HAVE_STD_ITERATOR=1 fi -AC_SUBST(HAVE_STD_ITERATOR) -]) +AC_SUBST(HAVE_STD_ITERATOR)]) # # Check for bidirectional iterator extension. This is modified from @@ -6043,13 +6055,10 @@ then HAVE_BI_ITERATOR=1 fi -AC_SUBST(HAVE_BI_ITERATOR) -]) +AC_SUBST(HAVE_BI_ITERATOR)]) -# # Check for forward iterator extension. This is modified from # http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_ext_hash_set.html -# AC_DEFUN([AC_CXX_HAVE_FWD_ITERATOR], [AC_CACHE_CHECK(whether the compiler has forward iterators, ac_cv_cxx_have_fwd_iterator, @@ -6068,8 +6077,7 @@ then HAVE_FWD_ITERATOR=1 fi -AC_SUBST(HAVE_FWD_ITERATOR) -]) +AC_SUBST(HAVE_FWD_ITERATOR)]) # # Check for slist extension. This is from From gaeke at cs.uiuc.edu Mon Feb 23 12:59:35 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 12:59:35 2004 Subject: [llvm-commits] CVS: llvm/configure Message-ID: <200402231856.MAA26539@zion.cs.uiuc.edu> Changes in directory llvm: configure updated: 1.77 -> 1.78 --- Log message: Regenerated using autoconf-2.57. --- Diffs of the changes: (+40 -41) Index: llvm/configure diff -u llvm/configure:1.77 llvm/configure:1.78 --- llvm/configure:1.77 Mon Feb 23 12:16:06 2004 +++ llvm/configure Mon Feb 23 12:56:02 2004 @@ -465,7 +465,7 @@ #endif" ac_unique_file=""Makefile.config.in"" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS subdirs INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os OS LLVMGCCDIR ARCH CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT CC CFLAGS ac_ct_CC CPP ifGNUmake LEX LEXLIB LEX_OUTPUT_ROOT YACC BISON EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL DOT ETAGS ETAGSFLAGS PYTHON QMTEST ENDIAN HAVE_STD_ITERATOR HAVE_BI_ITERATOR HAVE_FWD_ITERATOR ALLOCA MMAP_FILE ENABLE_OPTIMIZED SPEC_ROOT USE_SPEC SPEC95_ROOT USE_SPEC95 POVRAY_ROOT USE_POVRAY UPB DISABLE_LLC_DIFFS JIT LLVMCC1 LLVM! CC1PLUS BCR PAPIDIR SHLIBEXT LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS subdirs INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os OS LLVMGCCDIR ARCH CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT CC CFLAGS ac_ct_CC CPP ifGNUmake LEX LEXLIB LEX_OUTPUT_ROOT YACC BISON EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL DOT ETAGS ETAGSFLAGS PYTHON QMTEST ENDIAN HAVE_STD_EXT_HASH_MAP HAVE_GNU_EXT_HASH_MAP HAVE_GLOBAL_HASH_MAP HAVE_STD_EXT_HASH_SET HAVE_GNU_EXT_HASH_SET HAVE_GLOBAL_HASH_SET HAVE_STD_ITERATOR HAVE_BI_ITERATOR HAVE_FWD_ITERATOR ALLOCA ! MMAP_FILE ENABLE_OPTIMIZED SPEC_ROOT USE_SPEC SPEC95_ROOT USE_SPEC95 POVRAY_ROOT USE_POVRAY UPB DISABLE_LLC_DIFFS JIT LLVMCC1 LLVMCC1PLUS BCR PAPIDIR SHLIBEXT LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -19815,13 +19815,12 @@ fi echo "$as_me:$LINENO: result: $ac_cv_cxx_have_std_ext_hash_map" >&5 echo "${ECHO_T}$ac_cv_cxx_have_std_ext_hash_map" >&6 - if test "$ac_cv_cxx_have_std_ext_hash_map" = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_STD_EXT_HASH_MAP -_ACEOF - + HAVE_STD_EXT_HASH_MAP=0 + if test "$ac_cv_cxx_have_std_ext_hash_map" = yes + then + HAVE_STD_EXT_HASH_MAP=1 fi + echo "$as_me:$LINENO: checking whether the compiler has defining template class __gnu_cxx::hash_map" >&5 echo $ECHO_N "checking whether the compiler has defining template class __gnu_cxx::hash_map... $ECHO_C" >&6 if test "${ac_cv_cxx_have_gnu_ext_hash_map+set}" = set; then @@ -19884,13 +19883,12 @@ fi echo "$as_me:$LINENO: result: $ac_cv_cxx_have_gnu_ext_hash_map" >&5 echo "${ECHO_T}$ac_cv_cxx_have_gnu_ext_hash_map" >&6 - if test "$ac_cv_cxx_have_gnu_ext_hash_map" = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_GNU_EXT_HASH_MAP -_ACEOF - + HAVE_GNU_EXT_HASH_MAP=0 + if test "$ac_cv_cxx_have_gnu_ext_hash_map" = yes + then + HAVE_GNU_EXT_HASH_MAP=1 fi + echo "$as_me:$LINENO: checking whether the compiler has defining template class ::hash_map" >&5 echo $ECHO_N "checking whether the compiler has defining template class ::hash_map... $ECHO_C" >&6 if test "${ac_cv_cxx_have_global_hash_map+set}" = set; then @@ -19950,13 +19948,12 @@ fi echo "$as_me:$LINENO: result: $ac_cv_cxx_have_global_hash_map" >&5 echo "${ECHO_T}$ac_cv_cxx_have_global_hash_map" >&6 - if test "$ac_cv_cxx_have_global_hash_map" = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_GLOBAL_HASH_MAP -_ACEOF - + HAVE_GLOBAL_HASH_MAP=0 + if test "$ac_cv_cxx_have_global_hash_map" = yes + then + HAVE_GLOBAL_HASH_MAP=1 fi + echo "$as_me:$LINENO: checking whether the compiler has defining template class std::hash_set" >&5 echo $ECHO_N "checking whether the compiler has defining template class std::hash_set... $ECHO_C" >&6 if test "${ac_cv_cxx_have_std_ext_hash_set+set}" = set; then @@ -20019,13 +20016,12 @@ fi echo "$as_me:$LINENO: result: $ac_cv_cxx_have_std_ext_hash_set" >&5 echo "${ECHO_T}$ac_cv_cxx_have_std_ext_hash_set" >&6 - if test "$ac_cv_cxx_have_std_ext_hash_set" = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_STD_EXT_HASH_SET -_ACEOF - + HAVE_STD_EXT_HASH_SET=0 + if test "$ac_cv_cxx_have_std_ext_hash_set" = yes + then + HAVE_STD_EXT_HASH_SET=1 fi + echo "$as_me:$LINENO: checking whether the compiler has defining template class __gnu_cxx::hash_set" >&5 echo $ECHO_N "checking whether the compiler has defining template class __gnu_cxx::hash_set... $ECHO_C" >&6 if test "${ac_cv_cxx_have_gnu_ext_hash_set+set}" = set; then @@ -20088,13 +20084,12 @@ fi echo "$as_me:$LINENO: result: $ac_cv_cxx_have_gnu_ext_hash_set" >&5 echo "${ECHO_T}$ac_cv_cxx_have_gnu_ext_hash_set" >&6 - if test "$ac_cv_cxx_have_gnu_ext_hash_set" = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_GNU_EXT_HASH_SET -_ACEOF - + HAVE_GNU_EXT_HASH_SET=0 + if test "$ac_cv_cxx_have_gnu_ext_hash_set" = yes + then + HAVE_GNU_EXT_HASH_SET=1 fi + echo "$as_me:$LINENO: checking whether the compiler has defining template class ::hash_set" >&5 echo $ECHO_N "checking whether the compiler has defining template class ::hash_set... $ECHO_C" >&6 if test "${ac_cv_cxx_have_global_hash_set+set}" = set; then @@ -20154,13 +20149,12 @@ fi echo "$as_me:$LINENO: result: $ac_cv_cxx_have_global_hash_set" >&5 echo "${ECHO_T}$ac_cv_cxx_have_global_hash_set" >&6 - if test "$ac_cv_cxx_have_global_hash_set" = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_GLOBAL_HASH_SET -_ACEOF - + HAVE_GLOBAL_HASH_SET=0 + if test "$ac_cv_cxx_have_global_hash_set" = yes + then + HAVE_GLOBAL_HASH_SET=1 fi + echo "$as_me:$LINENO: checking whether the compiler has ext/slist" >&5 echo $ECHO_N "checking whether the compiler has ext/slist... $ECHO_C" >&6 if test "${ac_cv_cxx_have_ext_slist+set}" = set; then @@ -20348,7 +20342,6 @@ HAVE_STD_ITERATOR=1 fi - echo "$as_me:$LINENO: checking whether the compiler has the bidirectional iterator" >&5 echo $ECHO_N "checking whether the compiler has the bidirectional iterator... $ECHO_C" >&6 if test "${ac_cv_cxx_have_bi_iterator+set}" = set; then @@ -20418,7 +20411,6 @@ HAVE_BI_ITERATOR=1 fi - echo "$as_me:$LINENO: checking whether the compiler has forward iterators" >&5 echo $ECHO_N "checking whether the compiler has forward iterators... $ECHO_C" >&6 if test "${ac_cv_cxx_have_fwd_iterator+set}" = set; then @@ -20489,7 +20481,6 @@ fi - # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo "$as_me:$LINENO: checking for working alloca.h" >&5 @@ -21925,7 +21916,7 @@ _ACEOF - ac_config_files="$ac_config_files Makefile.config include/Support/iterator" + ac_config_files="$ac_config_files Makefile.config include/Support/iterator include/Support/hash_map include/Support/hash_set" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure @@ -22509,6 +22500,8 @@ # Handling of arguments. "Makefile.config" ) CONFIG_FILES="$CONFIG_FILES Makefile.config" ;; "include/Support/iterator" ) CONFIG_FILES="$CONFIG_FILES include/Support/iterator" ;; + "include/Support/hash_map" ) CONFIG_FILES="$CONFIG_FILES include/Support/hash_map" ;; + "include/Support/hash_set" ) CONFIG_FILES="$CONFIG_FILES include/Support/hash_set" ;; "Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile" ;; "Makefile.common" ) CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile.common" ;; "lib/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS lib/Makefile" ;; @@ -22699,6 +22692,12 @@ s, at PYTHON@,$PYTHON,;t t s, at QMTEST@,$QMTEST,;t t s, at ENDIAN@,$ENDIAN,;t t +s, at HAVE_STD_EXT_HASH_MAP@,$HAVE_STD_EXT_HASH_MAP,;t t +s, at HAVE_GNU_EXT_HASH_MAP@,$HAVE_GNU_EXT_HASH_MAP,;t t +s, at HAVE_GLOBAL_HASH_MAP@,$HAVE_GLOBAL_HASH_MAP,;t t +s, at HAVE_STD_EXT_HASH_SET@,$HAVE_STD_EXT_HASH_SET,;t t +s, at HAVE_GNU_EXT_HASH_SET@,$HAVE_GNU_EXT_HASH_SET,;t t +s, at HAVE_GLOBAL_HASH_SET@,$HAVE_GLOBAL_HASH_SET,;t t s, at HAVE_STD_ITERATOR@,$HAVE_STD_ITERATOR,;t t s, at HAVE_BI_ITERATOR@,$HAVE_BI_ITERATOR,;t t s, at HAVE_FWD_ITERATOR@,$HAVE_FWD_ITERATOR,;t t From lattner at cs.uiuc.edu Mon Feb 23 14:21:09 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 14:21:09 2004 Subject: [llvm-commits] CVS: llvm/test/Regression/Transforms/InstCombine/2004-02-23-ShiftShiftOverflow.ll Message-ID: <200402232020.OAA25928@zion.cs.uiuc.edu> Changes in directory llvm/test/Regression/Transforms/InstCombine: 2004-02-23-ShiftShiftOverflow.ll added (r1.1) --- Log message: New testcase --- Diffs of the changes: (+8 -0) Index: llvm/test/Regression/Transforms/InstCombine/2004-02-23-ShiftShiftOverflow.ll diff -c /dev/null llvm/test/Regression/Transforms/InstCombine/2004-02-23-ShiftShiftOverflow.ll:1.1 *** /dev/null Mon Feb 23 14:20:01 2004 --- llvm/test/Regression/Transforms/InstCombine/2004-02-23-ShiftShiftOverflow.ll Mon Feb 23 14:19:51 2004 *************** *** 0 **** --- 1,8 ---- + ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep 34 + + int %test(int %X) { + ; Do not fold into shr X, 34, as this uses undefined behavior! + %Y = shr int %X, ubyte 17 + %Z = shr int %Y, ubyte 17 + ret int %Z + } From lattner at cs.uiuc.edu Mon Feb 23 14:25:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 14:25:01 2004 Subject: [llvm-commits] CVS: llvm/test/Regression/Transforms/InstCombine/2004-02-23-ShiftShiftOverflow.ll Message-ID: <200402232024.OAA26730@zion.cs.uiuc.edu> Changes in directory llvm/test/Regression/Transforms/InstCombine: 2004-02-23-ShiftShiftOverflow.ll updated: 1.1 -> 1.2 --- Log message: Test for the other way also --- Diffs of the changes: (+7 -0) Index: llvm/test/Regression/Transforms/InstCombine/2004-02-23-ShiftShiftOverflow.ll diff -u llvm/test/Regression/Transforms/InstCombine/2004-02-23-ShiftShiftOverflow.ll:1.1 llvm/test/Regression/Transforms/InstCombine/2004-02-23-ShiftShiftOverflow.ll:1.2 --- llvm/test/Regression/Transforms/InstCombine/2004-02-23-ShiftShiftOverflow.ll:1.1 Mon Feb 23 14:19:51 2004 +++ llvm/test/Regression/Transforms/InstCombine/2004-02-23-ShiftShiftOverflow.ll Mon Feb 23 14:24:16 2004 @@ -6,3 +6,10 @@ %Z = shr int %Y, ubyte 17 ret int %Z } + +int %test2(int %X) { + ; Do not fold into shl X, 34, as this uses undefined behavior! + %Y = shl int %X, ubyte 17 + %Z = shl int %Y, ubyte 17 + ret int %Z +} From lattner at cs.uiuc.edu Mon Feb 23 14:31:03 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 14:31:03 2004 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200402232030.OAA27321@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: InstructionCombining.cpp updated: 1.161 -> 1.162 --- Log message: Fix InstCombine/2004-02-23-ShiftShiftOverflow.ll Also, turn 'shr int %X, 1234' into 'shr int %X, 31' --- Diffs of the changes: (+10 -3) Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.161 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.162 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.161 Mon Feb 23 01:16:20 2004 +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Mon Feb 23 14:30:06 2004 @@ -1570,9 +1570,14 @@ // of a signed value. // unsigned TypeBits = Op0->getType()->getPrimitiveSize()*8; - if (CUI->getValue() >= TypeBits && - (!Op0->getType()->isSigned() || isLeftShift)) - return ReplaceInstUsesWith(I, Constant::getNullValue(Op0->getType())); + if (CUI->getValue() >= TypeBits) { + if (!Op0->getType()->isSigned() || isLeftShift) + return ReplaceInstUsesWith(I, Constant::getNullValue(Op0->getType())); + else { + I.setOperand(1, ConstantUInt::get(Type::UByteTy, TypeBits-1)); + return &I; + } + } // ((X*C1) << C2) == (X * (C1 << C2)) if (BinaryOperator *BO = dyn_cast(Op0)) @@ -1636,6 +1641,8 @@ // Check for (A << c1) << c2 and (A >> c1) >> c2 if (I.getOpcode() == Op0SI->getOpcode()) { unsigned Amt = ShiftAmt1+ShiftAmt2; // Fold into one big shift... + if (Op0->getType()->getPrimitiveSize()*8 < Amt) + Amt = Op0->getType()->getPrimitiveSize()*8; return new ShiftInst(I.getOpcode(), Op0SI->getOperand(0), ConstantUInt::get(Type::UByteTy, Amt)); } From lattner at cs.uiuc.edu Mon Feb 23 14:59:02 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 14:59:02 2004 Subject: [llvm-commits] CVS: llvm-www/pubs/2003-07-18-StanleyMSThesis.html index.html Message-ID: <200402232058.OAA03066@zion.cs.uiuc.edu> Changes in directory llvm-www/pubs: 2003-07-18-StanleyMSThesis.html updated: 1.1 -> 1.2 index.html updated: 1.5 -> 1.6 --- Log message: Add Anand's and Joel's theses to the publications page --- Diffs of the changes: (+31 -34) Index: llvm-www/pubs/2003-07-18-StanleyMSThesis.html diff -u llvm-www/pubs/2003-07-18-StanleyMSThesis.html:1.1 llvm-www/pubs/2003-07-18-StanleyMSThesis.html:1.2 --- llvm-www/pubs/2003-07-18-StanleyMSThesis.html:1.1 Thu Feb 19 14:01:47 2004 +++ llvm-www/pubs/2003-07-18-StanleyMSThesis.html Mon Feb 23 14:58:11 2004 @@ -10,50 +10,42 @@
Language Extensions for Performance-Oriented Programming
+
- Joel Stanley, M.S. Thesis + Joel Stanley, M.S. Thesis

Abstract:

+

Modern software development practices lack portable, precise and powerful -mechanisms for describing -performance properties of application code. Traditional approaches rely almost -solely on performance -instrumentation libraries, which have significant drawbacks in certain types -(e.g., adaptive) -of applications, present the end user with integration challenges and complex -APIs, and often pose -portability problems of their own. This thesis proposes a small set of C-like -language extensions -that facilitate the treatment of performance properties as intrinsic -properties of application code. -The proposed language extensions allow the application developer to encode -performance expectations, -gather and aggregate various types of performance information, and more, all -at the language -level. Furthermore, this thesis demonstrates many novel compiler -implementation techniques that -make the the presented approach possible with an arbitrary (third-party) -compiler, and that minimize -performance perturbation by enabling compiler optimizations that are commonly -inhibited by -traditional approaches. This thesis describes the fundamental contribution of -language-level performance -properties, the language extensions themselves, the implementation of the -compilation and -runtime system, together with a standard library of widely-used metrics, and -demonstrates the role -that the extensions and compilation system can play in describing the -performance-oriented aspects -of both a production-quality raytracing application and a long-running -adaptive server code. +mechanisms for describing performance properties of application code. +Traditional approaches rely almost solely on performance instrumentation +libraries, which have significant drawbacks in certain types (e.g., adaptive) of +applications, present the end user with integration challenges and complex APIs, +and often pose portability problems of their own. This thesis proposes a small +set of C-like language extensions that facilitate the treatment of performance +properties as intrinsic properties of application code. The proposed language +extensions allow the application developer to encode performance expectations, +gather and aggregate various types of performance information, and more, all at +the language level. Furthermore, this thesis demonstrates many novel compiler +implementation techniques that make the the presented approach possible with an +arbitrary (third-party) compiler, and that minimize performance perturbation by +enabling compiler optimizations that are commonly inhibited by traditional +approaches. This thesis describes the fundamental contribution of +language-level performance properties, the language extensions themselves, the +implementation of the compilation and runtime system, together with a standard +library of widely-used metrics, and demonstrates the role that the extensions +and compilation system can play in describing the performance-oriented aspects +of both a production-quality raytracing application and a long-running adaptive +server code.

Published:

- Language Extensions for Performance-Oriented Programming, Joel Stanley.
+ "Language Extensions for Performance-Oriented Programming", Joel Stanley.
+ Masters Thesis, Computer Science Dept., University of Illinois at Urbana-Champaign, July 2003.
@@ -62,7 +54,6 @@

BibTeX Entry:

Index: llvm-www/pubs/index.html diff -u llvm-www/pubs/index.html:1.5 llvm-www/pubs/index.html:1.6 --- llvm-www/pubs/index.html:1.5 Fri Jan 30 19:40:14 2004 +++ llvm-www/pubs/index.html Mon Feb 23 14:58:11 2004 @@ -25,6 +25,12 @@ Chris Lattner & Vikram Adve. Technical Report #UIUCDCS-R-2003-2380, Computer Science Dept., Univ. of Illinois, Sep. 2003. (to appear in CGO'04) +
  • "Lightweight, + Cross-Procedure Tracing for Runtime Optimization"
    + Anand Shukla. Masters Thesis, July 2003
  • +
  • " Language + Extensions for Performance-Oriented Programming"
    + Joel Stanley. Masters Thesis, July 2003
  • " Memory Safety Without Runtime Checks or Garbage Collection"
    From gaeke at cs.uiuc.edu Mon Feb 23 15:13:00 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 15:13:00 2004 Subject: [llvm-commits] CVS: llvm/autoconf/acinclude.m4 Message-ID: <200402232112.PAA04690@zion.cs.uiuc.edu> Changes in directory llvm/autoconf: acinclude.m4 updated: 1.4 -> 1.5 --- Log message: Remove check for slist --- Diffs of the changes: (+0 -31) Index: llvm/autoconf/acinclude.m4 diff -u llvm/autoconf/acinclude.m4:1.4 llvm/autoconf/acinclude.m4:1.5 --- llvm/autoconf/acinclude.m4:1.4 Mon Feb 23 12:56:03 2004 +++ llvm/autoconf/acinclude.m4 Mon Feb 23 15:12:44 2004 @@ -6080,37 +6080,6 @@ AC_SUBST(HAVE_FWD_ITERATOR)]) # -# Check for slist extension. This is from -# http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_ext_slist.html -# -AC_DEFUN([AC_CXX_HAVE_EXT_SLIST], -[AC_CACHE_CHECK(whether the compiler has ext/slist, -ac_cv_cxx_have_ext_slist, -[AC_REQUIRE([AC_CXX_NAMESPACES]) - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - AC_TRY_COMPILE([#include -#ifdef HAVE_NAMESPACES -using namespace std; -#endif],[slist s; return 0;], - ac_cv_cxx_have_ext_slist=std, ac_cv_cxx_have_ext_slist=no) - AC_TRY_COMPILE([#include -#ifdef HAVE_NAMESPACES -using namespace __gnu_cxx; -#endif],[slist s; return 0;], - ac_cv_cxx_have_ext_slist=gnu, ac_cv_cxx_have_ext_slist=no) - - AC_LANG_RESTORE -]) -if test "$ac_cv_cxx_have_ext_slist" = std; then - AC_DEFINE(HAVE_EXT_SLIST,std,[define if the compiler has ext/slist]) -fi -if test "$ac_cv_cxx_have_ext_slist" = gnu; then - AC_DEFINE(HAVE_EXT_SLIST,gnu,[define if the compiler has ext/slist]) -fi -]) - -# # Check for FLEX. This is modified from # http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_namespaces.html # From gaeke at cs.uiuc.edu Mon Feb 23 15:14:02 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 15:14:02 2004 Subject: [llvm-commits] CVS: llvm/autoconf/configure.ac Message-ID: <200402232113.PAA04701@zion.cs.uiuc.edu> Changes in directory llvm/autoconf: configure.ac updated: 1.75 -> 1.76 --- Log message: Remove check for slist --- Diffs of the changes: (+0 -1) Index: llvm/autoconf/configure.ac diff -u llvm/autoconf/configure.ac:1.75 llvm/autoconf/configure.ac:1.76 --- llvm/autoconf/configure.ac:1.75 Mon Feb 23 12:56:05 2004 +++ llvm/autoconf/configure.ac Mon Feb 23 15:12:58 2004 @@ -250,7 +250,6 @@ dnl Check for C++ extensions AC_CXX_HAVE_HASH_MAP AC_CXX_HAVE_HASH_SET -AC_CXX_HAVE_EXT_SLIST AC_CXX_HAVE_STD_ITERATOR AC_CXX_HAVE_BI_ITERATOR AC_CXX_HAVE_FWD_ITERATOR From gaeke at cs.uiuc.edu Mon Feb 23 15:31:01 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 15:31:01 2004 Subject: [llvm-commits] CVS: llvm/include/Config/config.h.in Message-ID: <200402232130.PAA24531@zion.cs.uiuc.edu> Changes in directory llvm/include/Config: config.h.in updated: 1.14 -> 1.15 --- Log message: Regenerated with autoheader-2.57. --- Diffs of the changes: (+0 -7) Index: llvm/include/Config/config.h.in diff -u llvm/include/Config/config.h.in:1.14 llvm/include/Config/config.h.in:1.15 --- llvm/include/Config/config.h.in:1.14 Mon Feb 23 12:56:04 2004 +++ llvm/include/Config/config.h.in Mon Feb 23 15:30:39 2004 @@ -27,9 +27,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_EXECINFO_H -/* define if the compiler has ext/slist */ -#undef HAVE_EXT_SLIST - /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H @@ -85,10 +82,6 @@ /* Define to have the %a format string */ #undef HAVE_PRINTF_A - -/* Define if PThread mutexes (e.g., pthread_mutex_lock) are available in the - system's thread library. */ -#undef HAVE_PTHREAD_MUTEX_LOCK /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H From gaeke at cs.uiuc.edu Mon Feb 23 15:31:30 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 15:31:30 2004 Subject: [llvm-commits] CVS: llvm/configure Message-ID: <200402232130.PAA24526@zion.cs.uiuc.edu> Changes in directory llvm: configure updated: 1.78 -> 1.79 --- Log message: Regenerated with autoconf-2.57. --- Diffs of the changes: (+8 -125) Index: llvm/configure diff -u llvm/configure:1.78 llvm/configure:1.79 --- llvm/configure:1.78 Mon Feb 23 12:56:02 2004 +++ llvm/configure Mon Feb 23 15:30:37 2004 @@ -465,7 +465,7 @@ #endif" ac_unique_file=""Makefile.config.in"" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS subdirs INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os OS LLVMGCCDIR ARCH CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT CC CFLAGS ac_ct_CC CPP ifGNUmake LEX LEXLIB LEX_OUTPUT_ROOT YACC BISON EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL DOT ETAGS ETAGSFLAGS PYTHON QMTEST ENDIAN HAVE_STD_EXT_HASH_MAP HAVE_GNU_EXT_HASH_MAP HAVE_GLOBAL_HASH_MAP HAVE_STD_EXT_HASH_SET HAVE_GNU_EXT_HASH_SET HAVE_GLOBAL_HASH_SET HAVE_STD_ITERATOR HAVE_BI_ITERATOR HAVE_FWD_ITERATOR ALLOCA ! MMAP_FILE ENABLE_OPTIMIZED SPEC_ROOT USE_SPEC SPEC95_ROOT USE_SPEC95 POVRAY_ROOT USE_POVRAY UPB DISABLE_LLC_DIFFS JIT LLVMCC1 LLVMCC1PLUS BCR PAPIDIR SHLIBEXT LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS subdirs INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os OS LLVMGCCDIR ARCH CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT CC CFLAGS ac_ct_CC CPP ifGNUmake LEX LEXLIB LEX_OUTPUT_ROOT YACC BISON EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL DOT ETAGS ETAGSFLAGS PYTHON QMTEST HAVE_PTHREAD_MUTEX_LOCK ENDIAN HAVE_STD_EXT_HASH_MAP HAVE_GNU_EXT_HASH_MAP HAVE_GLOBAL_HASH_MAP HAVE_STD_EXT_HASH_SET HAVE_GNU_EXT_HASH_SET HAVE_GLOBAL_HASH_SET HAVE_STD_ITERATOR HAVE_BI_ITERATOR H! AVE_FWD_ITERATOR ALLOCA MMAP_FILE ENABLE_OPTIMIZED SPEC_ROOT USE_SPEC SPEC95_ROOT USE_SPEC95 POVRAY_ROOT USE_POVRAY UPB DISABLE_LLC_DIFFS JIT LLVMCC1 LLVMCC1PLUS BCR PAPIDIR SHLIBEXT LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -18674,14 +18674,13 @@ echo "${ECHO_T}$ac_cv_search_pthread_mutex_lock" >&6 if test "$ac_cv_search_pthread_mutex_lock" != no; then test "$ac_cv_search_pthread_mutex_lock" = "none required" || LIBS="$ac_cv_search_pthread_mutex_lock $LIBS" - -cat >>confdefs.h <<\_ACEOF -#define HAVE_PTHREAD_MUTEX_LOCK 1 -_ACEOF - + HAVE_PTHREAD_MUTEX_LOCK=1 +else + HAVE_PTHREAD_MUTEX_LOCK=0 fi + echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then @@ -20155,124 +20154,6 @@ HAVE_GLOBAL_HASH_SET=1 fi -echo "$as_me:$LINENO: checking whether the compiler has ext/slist" >&5 -echo $ECHO_N "checking whether the compiler has ext/slist... $ECHO_C" >&6 -if test "${ac_cv_cxx_have_ext_slist+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - - - ac_ext=cc -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - cat >conftest.$ac_ext <<_ACEOF -#line $LINENO "configure" -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#ifdef HAVE_NAMESPACES -using namespace std; -#endif -int -main () -{ -slist s; return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_cxx_have_ext_slist=std -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_cxx_have_ext_slist=no -fi -rm -f conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -#line $LINENO "configure" -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#ifdef HAVE_NAMESPACES -using namespace __gnu_cxx; -#endif -int -main () -{ -slist s; return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_cxx_have_ext_slist=gnu -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_cxx_have_ext_slist=no -fi -rm -f conftest.$ac_objext conftest.$ac_ext - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -fi -echo "$as_me:$LINENO: result: $ac_cv_cxx_have_ext_slist" >&5 -echo "${ECHO_T}$ac_cv_cxx_have_ext_slist" >&6 -if test "$ac_cv_cxx_have_ext_slist" = std; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_EXT_SLIST std -_ACEOF - -fi -if test "$ac_cv_cxx_have_ext_slist" = gnu; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_EXT_SLIST gnu -_ACEOF - -fi - echo "$as_me:$LINENO: checking whether the compiler has the standard iterator" >&5 echo $ECHO_N "checking whether the compiler has the standard iterator... $ECHO_C" >&6 if test "${ac_cv_cxx_have_std_iterator+set}" = set; then @@ -21916,7 +21797,7 @@ _ACEOF - ac_config_files="$ac_config_files Makefile.config include/Support/iterator include/Support/hash_map include/Support/hash_set" + ac_config_files="$ac_config_files Makefile.config include/Support/iterator include/Support/hash_map include/Support/hash_set include/Support/ThreadSupport.h" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure @@ -22502,6 +22383,7 @@ "include/Support/iterator" ) CONFIG_FILES="$CONFIG_FILES include/Support/iterator" ;; "include/Support/hash_map" ) CONFIG_FILES="$CONFIG_FILES include/Support/hash_map" ;; "include/Support/hash_set" ) CONFIG_FILES="$CONFIG_FILES include/Support/hash_set" ;; + "include/Support/ThreadSupport.h" ) CONFIG_FILES="$CONFIG_FILES include/Support/ThreadSupport.h" ;; "Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile" ;; "Makefile.common" ) CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile.common" ;; "lib/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS lib/Makefile" ;; @@ -22691,6 +22573,7 @@ s, at ETAGSFLAGS@,$ETAGSFLAGS,;t t s, at PYTHON@,$PYTHON,;t t s, at QMTEST@,$QMTEST,;t t +s, at HAVE_PTHREAD_MUTEX_LOCK@,$HAVE_PTHREAD_MUTEX_LOCK,;t t s, at ENDIAN@,$ENDIAN,;t t s, at HAVE_STD_EXT_HASH_MAP@,$HAVE_STD_EXT_HASH_MAP,;t t s, at HAVE_GNU_EXT_HASH_MAP@,$HAVE_GNU_EXT_HASH_MAP,;t t From gaeke at cs.uiuc.edu Mon Feb 23 15:32:00 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 15:32:00 2004 Subject: [llvm-commits] CVS: llvm/autoconf/configure.ac Message-ID: <200402232130.PAA24519@zion.cs.uiuc.edu> Changes in directory llvm/autoconf: configure.ac updated: 1.76 -> 1.77 --- Log message: Change test for pthreads to use AC_SUBST; add ThreadSupport.h as an AC_OUTPUT. --- Diffs of the changes: (+4 -2) Index: llvm/autoconf/configure.ac diff -u llvm/autoconf/configure.ac:1.76 llvm/autoconf/configure.ac:1.77 --- llvm/autoconf/configure.ac:1.76 Mon Feb 23 15:12:58 2004 +++ llvm/autoconf/configure.ac Mon Feb 23 15:30:36 2004 @@ -222,7 +222,8 @@ dnl pthread locking functions are optional - but llvm will not be thread-safe dnl without locks. -AC_SEARCH_LIBS(pthread_mutex_lock,pthread,AC_DEFINE(HAVE_PTHREAD_MUTEX_LOCK,1,[Define if PThread mutexes (e.g., pthread_mutex_lock) are available in the system's thread library.])) +AC_SEARCH_LIBS(pthread_mutex_lock,pthread,HAVE_PTHREAD_MUTEX_LOCK=1,HAVE_PTHREAD_MUTEX_LOCK=0) +AC_SUBST(HAVE_PTHREAD_MUTEX_LOCK) dnl Checks for header files. dnl We don't check for ancient stuff or things that are guaranteed to be there @@ -447,7 +448,8 @@ AC_OUTPUT(Makefile.config include/Support/iterator include/Support/hash_map - include/Support/hash_set) + include/Support/hash_set + include/Support/ThreadSupport.h) dnl Warn loudly if llvm-gcc was not obviously working if test $llvmgccwarn = yes From gaeke at cs.uiuc.edu Mon Feb 23 15:32:29 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 15:32:29 2004 Subject: [llvm-commits] CVS: llvm/include/Support/ThreadSupport.h.in ThreadSupport.h Message-ID: <200402232130.PAA24512@zion.cs.uiuc.edu> Changes in directory llvm/include/Support: ThreadSupport.h.in added (r1.1) ThreadSupport.h (r1.3) removed --- Log message: ThreadSupport.h is now output from configure. --- Diffs of the changes: (+40 -0) Index: llvm/include/Support/ThreadSupport.h.in diff -c /dev/null llvm/include/Support/ThreadSupport.h.in:1.1 *** /dev/null Mon Feb 23 15:30:41 2004 --- llvm/include/Support/ThreadSupport.h.in Mon Feb 23 15:30:29 2004 *************** *** 0 **** --- 1,40 ---- + //===-- Support/ThreadSupport.h - Generic threading support -----*- C++ -*-===// + // + // 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 defines platform-agnostic interfaces that can be used to write + // multi-threaded programs. Autoconf is used to chose the correct + // implementation of these interfaces, or default to a non-thread-capable system + // if no matching system support is available. + // + //===----------------------------------------------------------------------===// + + #ifndef SUPPORT_THREADSUPPORT_H + #define SUPPORT_THREADSUPPORT_H + + #if @HAVE_PTHREAD_MUTEX_LOCK@ + #include "Support/ThreadSupport-PThreads.h" + #else + #include "Support/ThreadSupport-NoSupport.h" + #endif // If no system support is available + + namespace llvm { + /// MutexLocker - Instances of this class acquire a given Lock when + /// constructed and hold that lock until destruction. + /// + class MutexLocker { + Mutex &M; + MutexLocker(const MutexLocker &); // DO NOT IMPLEMENT + void operator=(const MutexLocker &); // DO NOT IMPLEMENT + public: + MutexLocker(Mutex &m) : M(m) { M.acquire(); } + ~MutexLocker() { M.release(); } + }; + } + + #endif // SUPPORT_THREADSUPPORT_H From lattner at cs.uiuc.edu Mon Feb 23 15:48:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 15:48:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200402232147.PAA28499@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: InstructionCombining.cpp updated: 1.162 -> 1.163 --- Log message: Fix a small typeo in my checkin last night that broke vortex and other programs :( --- Diffs of the changes: (+1 -1) Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.162 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.163 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.162 Mon Feb 23 14:30:06 2004 +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Mon Feb 23 15:46:42 2004 @@ -1398,7 +1398,7 @@ else if (I.getOpcode() == Instruction::SetGT && cast(CI)->getValue() == -1) // X > -1 => x < 128 - return BinaryOperator::create(Instruction::SetGT, CastOp, + return BinaryOperator::create(Instruction::SetLT, CastOp, ConstantUInt::get(SrcTy, 1ULL << (SrcTySize*8-1))); } else { ConstantUInt *CUI = cast(CI); From lattner at cs.uiuc.edu Mon Feb 23 15:48:30 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 15:48:30 2004 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200402232147.PAA28324@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: InstructionCombining.cpp updated: 1.163 -> 1.164 --- Log message: Generate much more efficient code in programs like pifft --- Diffs of the changes: (+8 -0) Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.163 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.164 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.163 Mon Feb 23 15:46:42 2004 +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Mon Feb 23 15:46:58 2004 @@ -2163,6 +2163,14 @@ // Replace: gep (gep %P, long B), long A, ... // With: T = long A+B; gep %P, T, ... // + // Note that if our source is a gep chain itself that we wait for that + // chain to be resolved before we perform this transformation. This + // avoids us creating a TON of code in some cases. + // + if (isa(Src->getOperand(0)) && + cast(Src->getOperand(0))->getNumOperands() == 2) + return 0; // Wait until our source is folded to completion. + Value *Sum = BinaryOperator::create(Instruction::Add, Src->getOperand(1), GEP.getOperand(1), Src->getName()+".sum", &GEP); From gaeke at cs.uiuc.edu Mon Feb 23 16:08:01 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 16:08:01 2004 Subject: [llvm-commits] CVS: llvm/include/Support/DataTypes.h.in DataTypes.h Message-ID: <200402232207.QAA07051@zion.cs.uiuc.edu> Changes in directory llvm/include/Support: DataTypes.h.in added (r1.1) DataTypes.h (r1.18) removed --- Log message: DataTypes.h is now output from configure, and shortened --- Diffs of the changes: (+45 -0) Index: llvm/include/Support/DataTypes.h.in diff -c /dev/null llvm/include/Support/DataTypes.h.in:1.1 *** /dev/null Mon Feb 23 16:07:36 2004 --- llvm/include/Support/DataTypes.h.in Mon Feb 23 16:07:26 2004 *************** *** 0 **** --- 1,45 ---- + //===-- include/Support/DataTypes.h - Define fixed size types ---*- C++ -*-===// + // + // 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 contains definitions to figure out the size of _HOST_ data types. + // This file is important because different host OS's define different macros, + // which makes portability tough. This file exports the following definitions: + // + // int64_t : is a typedef for the signed 64 bit system type + // uint64_t : is a typedef for the unsigned 64 bit system type + // INT64_MAX : is a #define specifying the max value for int64_t's + // + // No library is required when using these functinons. + // + //===----------------------------------------------------------------------===// + + #ifndef SUPPORT_DATATYPES_H + #define SUPPORT_DATATYPES_H + + // Note that this header's correct operation depends on __STDC_LIMIT_MACROS + // being defined. We would define it here, but in order to prevent Bad Things + // happening when system headers or C++ STL headers include stdint.h before + // we define it here, we define it on the g++ command line (in Makefile.rules). + #if !defined(__STDC_LIMIT_MACROS) + # error "Must #define __STDC_LIMIT_MACROS before #including Support/DataTypes.h" + #endif + + // Note that includes , if this is a C99 system. + @INCLUDE_INTTYPES_H@ + @INCLUDE_SYS_TYPES_H@ + + #if !defined(INT64_MAX) + /* We couldn't determine INT64_MAX; default it. */ + # define INT64_MAX 9223372036854775807LL + #endif + #if !defined(UINT64_MAX) + # define UINT64_MAX 0xffffffffffffffffULL + #endif + + #endif /* SUPPORT_DATATYPES_H */ From gaeke at cs.uiuc.edu Mon Feb 23 16:08:33 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 16:08:33 2004 Subject: [llvm-commits] CVS: llvm/autoconf/configure.ac Message-ID: <200402232207.QAA06990@zion.cs.uiuc.edu> Changes in directory llvm/autoconf: configure.ac updated: 1.77 -> 1.78 --- Log message: Add SUBSTing checks for sys/types.h and inttypes.h; add DataTypes.h to AC_OUTPUT. --- Diffs of the changes: (+15 -2) Index: llvm/autoconf/configure.ac diff -u llvm/autoconf/configure.ac:1.77 llvm/autoconf/configure.ac:1.78 --- llvm/autoconf/configure.ac:1.77 Mon Feb 23 15:30:36 2004 +++ llvm/autoconf/configure.ac Mon Feb 23 16:07:01 2004 @@ -234,6 +234,18 @@ dnl Checks for POSIX and other various system-specific header files AC_CHECK_HEADERS(fcntl.h limits.h sys/time.h unistd.h malloc.h sys/mman.h sys/resource.h dlfcn.h link.h execinfo.h) +dnl Check for things that need to be included in public headers, and so +dnl for which we may not have access to a HAVE_* preprocessor #define. +dnl (primarily used in DataTypes.h) +AC_CHECK_HEADER([sys/types.h], + [INCLUDE_SYS_TYPES_H='#include '], + [INCLUDE_SYS_TYPES_H='']) +AC_SUBST(INCLUDE_SYS_TYPES_H) +AC_CHECK_HEADER([inttypes.h], + [INCLUDE_INTTYPES_H='#include '], + [INCLUDE_INTTYPES_H='']) +AC_SUBST(INCLUDE_INTTYPES_H) + dnl Check for types AC_TYPE_PID_T AC_TYPE_SIZE_T @@ -446,10 +458,11 @@ dnl Create the output files AC_OUTPUT(Makefile.config - include/Support/iterator + include/Support/DataTypes.h + include/Support/ThreadSupport.h include/Support/hash_map include/Support/hash_set - include/Support/ThreadSupport.h) + include/Support/iterator) dnl Warn loudly if llvm-gcc was not obviously working if test $llvmgccwarn = yes From gaeke at cs.uiuc.edu Mon Feb 23 16:09:02 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Feb 23 16:09:02 2004 Subject: [llvm-commits] CVS: llvm/configure Message-ID: <200402232207.QAA06982@zion.cs.uiuc.edu> Changes in directory llvm: configure updated: 1.79 -> 1.80 --- Log message: Regenerated with autoconf-2.57. --- Diffs of the changes: (+282 -4) Index: llvm/configure diff -u llvm/configure:1.79 llvm/configure:1.80 --- llvm/configure:1.79 Mon Feb 23 15:30:37 2004 +++ llvm/configure Mon Feb 23 16:07:00 2004 @@ -465,7 +465,7 @@ #endif" ac_unique_file=""Makefile.config.in"" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS subdirs INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os OS LLVMGCCDIR ARCH CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT CC CFLAGS ac_ct_CC CPP ifGNUmake LEX LEXLIB LEX_OUTPUT_ROOT YACC BISON EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL DOT ETAGS ETAGSFLAGS PYTHON QMTEST HAVE_PTHREAD_MUTEX_LOCK ENDIAN HAVE_STD_EXT_HASH_MAP HAVE_GNU_EXT_HASH_MAP HAVE_GLOBAL_HASH_MAP HAVE_STD_EXT_HASH_SET HAVE_GNU_EXT_HASH_SET HAVE_GLOBAL_HASH_SET HAVE_STD_ITERATOR HAVE_BI_ITERATOR H! AVE_FWD_ITERATOR ALLOCA MMAP_FILE ENABLE_OPTIMIZED SPEC_ROOT USE_SPEC SPEC95_ROOT USE_SPEC95 POVRAY_ROOT USE_POVRAY UPB DISABLE_LLC_DIFFS JIT LLVMCC1 LLVMCC1PLUS BCR PAPIDIR SHLIBEXT LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS subdirs INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os OS LLVMGCCDIR ARCH CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT CC CFLAGS ac_ct_CC CPP ifGNUmake LEX LEXLIB LEX_OUTPUT_ROOT YACC BISON EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL DOT ETAGS ETAGSFLAGS PYTHON QMTEST HAVE_PTHREAD_MUTEX_LOCK INCLUDE_SYS_TYPES_H INCLUDE_INTTYPES_H ENDIAN HAVE_STD_EXT_HASH_MAP HAVE_GNU_EXT_HASH_MAP HAVE_GLOBAL_HASH_MAP HAVE_STD_EXT_HASH_SET HAVE_GNU_EXT_HASH_SET HAVE_GLOBAL_HASH_S! ET HAVE_STD_ITERATOR HAVE_BI_ITERATOR HAVE_FWD_ITERATOR ALLOCA MMAP_FILE ENABLE_OPTIMIZED SPEC_ROOT USE_SPEC SPEC95_ROOT USE_SPEC95 POVRAY_ROOT USE_POVRAY UPB DISABLE_LLC_DIFFS JIT LLVMCC1 LLVMCC1PLUS BCR PAPIDIR SHLIBEXT LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -19056,6 +19056,281 @@ done +if test "${ac_cv_header_sys_types_h+set}" = set; then + echo "$as_me:$LINENO: checking for sys/types.h" >&5 +echo $ECHO_N "checking for sys/types.h... $ECHO_C" >&6 +if test "${ac_cv_header_sys_types_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_sys_types_h" >&5 +echo "${ECHO_T}$ac_cv_header_sys_types_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking sys/types.h usability" >&5 +echo $ECHO_N "checking sys/types.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking sys/types.h presence" >&5 +echo $ECHO_N "checking sys/types.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc in + yes:no ) + { echo "$as_me:$LINENO: WARNING: sys/types.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: sys/types.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: sys/types.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: sys/types.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf at gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; + no:yes ) + { echo "$as_me:$LINENO: WARNING: sys/types.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: sys/types.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: sys/types.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: sys/types.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: sys/types.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: sys/types.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf at gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for sys/types.h" >&5 +echo $ECHO_N "checking for sys/types.h... $ECHO_C" >&6 +if test "${ac_cv_header_sys_types_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_sys_types_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_sys_types_h" >&5 +echo "${ECHO_T}$ac_cv_header_sys_types_h" >&6 + +fi +if test $ac_cv_header_sys_types_h = yes; then + INCLUDE_SYS_TYPES_H='#include ' +else + INCLUDE_SYS_TYPES_H='' +fi + + + +if test "${ac_cv_header_inttypes_h+set}" = set; then + echo "$as_me:$LINENO: checking for inttypes.h" >&5 +echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6 +if test "${ac_cv_header_inttypes_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_inttypes_h" >&5 +echo "${ECHO_T}$ac_cv_header_inttypes_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking inttypes.h usability" >&5 +echo $ECHO_N "checking inttypes.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking inttypes.h presence" >&5 +echo $ECHO_N "checking inttypes.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc in + yes:no ) + { echo "$as_me:$LINENO: WARNING: inttypes.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: inttypes.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: inttypes.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: inttypes.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf at gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; + no:yes ) + { echo "$as_me:$LINENO: WARNING: inttypes.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: inttypes.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: inttypes.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: inttypes.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: inttypes.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: inttypes.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf at gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for inttypes.h" >&5 +echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6 +if test "${ac_cv_header_inttypes_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_inttypes_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_inttypes_h" >&5 +echo "${ECHO_T}$ac_cv_header_inttypes_h" >&6 + +fi +if test $ac_cv_header_inttypes_h = yes; then + INCLUDE_INTTYPES_H='#include ' +else + INCLUDE_INTTYPES_H='' +fi + + + + echo "$as_me:$LINENO: checking for pid_t" >&5 echo $ECHO_N "checking for pid_t... $ECHO_C" >&6 if test "${ac_cv_type_pid_t+set}" = set; then @@ -21797,7 +22072,7 @@ _ACEOF - ac_config_files="$ac_config_files Makefile.config include/Support/iterator include/Support/hash_map include/Support/hash_set include/Support/ThreadSupport.h" + ac_config_files="$ac_config_files Makefile.config include/Support/DataTypes.h include/Support/ThreadSupport.h include/Support/hash_map include/Support/hash_set include/Support/iterator" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure @@ -22380,10 +22655,11 @@ case "$ac_config_target" in # Handling of arguments. "Makefile.config" ) CONFIG_FILES="$CONFIG_FILES Makefile.config" ;; - "include/Support/iterator" ) CONFIG_FILES="$CONFIG_FILES include/Support/iterator" ;; + "include/Support/DataTypes.h" ) CONFIG_FILES="$CONFIG_FILES include/Support/DataTypes.h" ;; + "include/Support/ThreadSupport.h" ) CONFIG_FILES="$CONFIG_FILES include/Support/ThreadSupport.h" ;; "include/Support/hash_map" ) CONFIG_FILES="$CONFIG_FILES include/Support/hash_map" ;; "include/Support/hash_set" ) CONFIG_FILES="$CONFIG_FILES include/Support/hash_set" ;; - "include/Support/ThreadSupport.h" ) CONFIG_FILES="$CONFIG_FILES include/Support/ThreadSupport.h" ;; + "include/Support/iterator" ) CONFIG_FILES="$CONFIG_FILES include/Support/iterator" ;; "Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile" ;; "Makefile.common" ) CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile.common" ;; "lib/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS lib/Makefile" ;; @@ -22574,6 +22850,8 @@ s, at PYTHON@,$PYTHON,;t t s, at QMTEST@,$QMTEST,;t t s, at HAVE_PTHREAD_MUTEX_LOCK@,$HAVE_PTHREAD_MUTEX_LOCK,;t t +s, at INCLUDE_SYS_TYPES_H@,$INCLUDE_SYS_TYPES_H,;t t +s, at INCLUDE_INTTYPES_H@,$INCLUDE_INTTYPES_H,;t t s, at ENDIAN@,$ENDIAN,;t t s, at HAVE_STD_EXT_HASH_MAP@,$HAVE_STD_EXT_HASH_MAP,;t t s, at HAVE_GNU_EXT_HASH_MAP@,$HAVE_GNU_EXT_HASH_MAP,;t t From alkis at niobe.cs.uiuc.edu Mon Feb 23 16:44:01 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Mon Feb 23 16:44:01 2004 Subject: [llvm-commits] CVS: llvm/tools/gccld/Linker.cpp Message-ID: <200402232243.i1NMh9t16659@niobe.cs.uiuc.edu> Changes in directory llvm/tools/gccld: Linker.cpp updated: 1.22 -> 1.23 --- Log message: Include Config/config.h for SHLIBEXT. --- Diffs of the changes: (+1 -0) Index: llvm/tools/gccld/Linker.cpp diff -u llvm/tools/gccld/Linker.cpp:1.22 llvm/tools/gccld/Linker.cpp:1.23 --- llvm/tools/gccld/Linker.cpp:1.22 Mon Jan 26 14:59:41 2004 +++ llvm/tools/gccld/Linker.cpp Mon Feb 23 16:42:51 2004 @@ -21,6 +21,7 @@ #include "llvm/Transforms/IPO.h" #include "llvm/Transforms/Scalar.h" #include "llvm/Transforms/Utils/Linker.h" +#include "Config/config.h" #include "Support/CommandLine.h" #include "Support/FileUtilities.h" #include "Support/Signals.h" From alkis at niobe.cs.uiuc.edu Mon Feb 23 17:09:04 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Mon Feb 23 17:09:04 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/VirtRegMap.h VirtRegMap.cpp RegAllocLinearScan.cpp Message-ID: <200402232308.i1NN8MF04213@niobe.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: VirtRegMap.h added (r1.1) VirtRegMap.cpp added (r1.1) RegAllocLinearScan.cpp updated: 1.61 -> 1.62 --- Log message: Refactor VirtRegMap out of RegAllocLinearScan as the first part of bug 251 (providing a generic machine code rewriter/spiller). --- Diffs of the changes: (+195 -136) Index: llvm/lib/CodeGen/VirtRegMap.h diff -c /dev/null llvm/lib/CodeGen/VirtRegMap.h:1.1 *** /dev/null Mon Feb 23 17:08:21 2004 --- llvm/lib/CodeGen/VirtRegMap.h Mon Feb 23 17:08:11 2004 *************** *** 0 **** --- 1,95 ---- + //===-- llvm/CodeGen/VirtRegMap.h - Virtual Register Map -*- C++ -*--------===// + // + // 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 implements a virtual register map. This maps virtual + // registers to physical registers and virtual registers to stack + // slots. It is created and updated by a register allocator and then + // used by a machine code rewriter that adds spill code and rewrites + // virtual into physical register references. + // + //===----------------------------------------------------------------------===// + + #ifndef LLVM_CODEGEN_VIRTREGMAP_H + #define LLVM_CODEGEN_VIRTREGMAP_H + + #include "llvm/CodeGen/MachineFunction.h" + #include "llvm/CodeGen/SSARegMap.h" + #include + + namespace llvm { + + class VirtRegMap { + public: + typedef std::vector Virt2PhysMap; + typedef std::vector Virt2StackSlotMap; + + enum { + NO_PHYS_REG = 0, + NO_STACK_SLOT = INT_MAX + }; + + private: + MachineFunction* mf_; + Virt2PhysMap v2pMap_; + Virt2StackSlotMap v2ssMap_; + + // do not implement + VirtRegMap(const VirtRegMap& rhs); + const VirtRegMap& operator=(const VirtRegMap& rhs); + + static unsigned toIndex(unsigned virtReg) { + return virtReg - MRegisterInfo::FirstVirtualRegister; + } + static unsigned fromIndex(unsigned index) { + return index + MRegisterInfo::FirstVirtualRegister; + } + + public: + VirtRegMap(MachineFunction& mf) + : mf_(&mf), + v2pMap_(mf.getSSARegMap()->getNumVirtualRegs(), NO_PHYS_REG), + v2ssMap_(mf.getSSARegMap()->getNumVirtualRegs(), NO_STACK_SLOT) { + } + + unsigned getPhys4Virt(unsigned virtReg) const { + assert(MRegisterInfo::isVirtualRegister(virtReg)); + return v2pMap_[toIndex(virtReg)]; + } + + void assignVirt2Phys(unsigned virtReg, unsigned physReg) { + assert(MRegisterInfo::isVirtualRegister(virtReg) && + MRegisterInfo::isPhysicalRegister(physReg)); + assert(v2pMap_[toIndex(virtReg)] == NO_PHYS_REG && + "attempt to assign physical register to already mapped " + "virtual register"); + v2pMap_[toIndex(virtReg)] = physReg; + } + + void clearVirtReg(unsigned virtReg) { + assert(MRegisterInfo::isVirtualRegister(virtReg)); + assert(v2pMap_[toIndex(virtReg)] != NO_PHYS_REG && + "attempt to clear a not assigned virtual register"); + v2pMap_[toIndex(virtReg)] = NO_PHYS_REG; + } + + int getStackSlot4Virt(unsigned virtReg) const { + assert(MRegisterInfo::isVirtualRegister(virtReg)); + return v2ssMap_[toIndex(virtReg)]; + } + + int assignVirt2StackSlot(unsigned virtReg); + + friend std::ostream& operator<<(std::ostream& os, const VirtRegMap& li); + }; + + std::ostream& operator<<(std::ostream& os, const VirtRegMap& li); + + } // End llvm namespace + + #endif Index: llvm/lib/CodeGen/VirtRegMap.cpp diff -c /dev/null llvm/lib/CodeGen/VirtRegMap.cpp:1.1 *** /dev/null Mon Feb 23 17:08:21 2004 --- llvm/lib/CodeGen/VirtRegMap.cpp Mon Feb 23 17:08:11 2004 *************** *** 0 **** --- 1,55 ---- + //===-- llvm/CodeGen/VirtRegMap.cpp - Virtual Register Map ----------------===// + // + // 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 implements the virtual register map. + // + //===----------------------------------------------------------------------===// + + #include "VirtRegMap.h" + #include "llvm/CodeGen/MachineFrameInfo.h" + #include "llvm/Target/TargetMachine.h" + #include "Support/Statistic.h" + #include + + using namespace llvm; + + namespace { + Statistic<> numSpills("ra-linearscan", "Number of register spills"); + } + + int VirtRegMap::assignVirt2StackSlot(unsigned virtReg) + { + assert(MRegisterInfo::isVirtualRegister(virtReg)); + assert(v2ssMap_[toIndex(virtReg)] == NO_STACK_SLOT && + "attempt to assign stack slot to already spilled register"); + const TargetRegisterClass* rc = + mf_->getSSARegMap()->getRegClass(virtReg); + int frameIndex = mf_->getFrameInfo()->CreateStackObject(rc); + v2ssMap_[toIndex(virtReg)] = frameIndex; + ++numSpills; + return frameIndex; + } + + std::ostream& llvm::operator<<(std::ostream& os, const VirtRegMap& vrm) + { + const MRegisterInfo* mri = vrm.mf_->getTarget().getRegisterInfo(); + + std::cerr << "********** REGISTER MAP **********\n"; + for (unsigned i = 0, e = vrm.v2pMap_.size(); i != e; ++i) { + if (vrm.v2pMap_[i] != VirtRegMap::NO_PHYS_REG) + std::cerr << "[reg" << VirtRegMap::fromIndex(i) << " -> " + << mri->getName(vrm.v2pMap_[i]) << "]\n"; + } + for (unsigned i = 0, e = vrm.v2ssMap_.size(); i != e; ++i) { + if (vrm.v2ssMap_[i] != VirtRegMap::NO_STACK_SLOT) + std::cerr << "[reg" << VirtRegMap::fromIndex(i) << " -> fi#" + << vrm.v2ssMap_[i] << "]\n"; + } + return std::cerr << '\n'; + } Index: llvm/lib/CodeGen/RegAllocLinearScan.cpp diff -u llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.61 llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.62 --- llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.61 Mon Feb 23 12:45:32 2004 +++ llvm/lib/CodeGen/RegAllocLinearScan.cpp Mon Feb 23 17:08:11 2004 @@ -13,7 +13,6 @@ #define DEBUG_TYPE "regalloc" #include "llvm/Function.h" #include "llvm/CodeGen/LiveVariables.h" -#include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/Passes.h" @@ -28,13 +27,13 @@ #include "Support/STLExtras.h" #include "LiveIntervals.h" #include "PhysRegTracker.h" +#include "VirtRegMap.h" #include using namespace llvm; namespace { Statistic<> numStores("ra-linearscan", "Number of stores added"); Statistic<> numLoads ("ra-linearscan", "Number of loads added"); - Statistic<> numSpills("ra-linearscan", "Number of register spills"); class RA : public MachineFunctionPass { private: @@ -47,12 +46,7 @@ IntervalPtrs unhandled_, fixed_, active_, inactive_, handled_; std::auto_ptr prt_; - - typedef std::map Virt2PhysMap; - Virt2PhysMap v2pMap_; - - typedef std::map Virt2StackSlotMap; - Virt2StackSlotMap v2ssMap_; + std::auto_ptr vrm_; int instrAdded_; @@ -109,40 +103,10 @@ /// 0 unsigned getFreePhysReg(IntervalPtrs::value_type cur); - /// assignVirt2PhysReg - assigns the free physical register to - /// the virtual register passed as arguments - Virt2PhysMap::iterator - assignVirt2PhysReg(unsigned virtReg, unsigned physReg); - - /// clearVirtReg - free the physical register associated with this - /// virtual register and disassociate virtual->physical and - /// physical->virtual mappings - void clearVirtReg(Virt2PhysMap::iterator it); - /// assignVirt2StackSlot - assigns this virtual register to a /// stack slot. returns the stack slot int assignVirt2StackSlot(unsigned virtReg); - /// getStackSlot - returns the offset of the specified - /// register on the stack - int getStackSlot(unsigned virtReg); - - void printVirtRegAssignment() const { - std::cerr << "register assignment:\n"; - - for (Virt2PhysMap::const_iterator - i = v2pMap_.begin(), e = v2pMap_.end(); i != e; ++i) { - assert(i->second != 0); - std::cerr << "[reg" << i->first << " -> " - << mri_->getName(i->second) << "]\n"; - } - for (Virt2StackSlotMap::const_iterator - i = v2ssMap_.begin(), e = v2ssMap_.end(); i != e; ++i) { - std::cerr << '[' << i->first << " -> ss#" << i->second << "]\n"; - } - std::cerr << '\n'; - } - void printIntervals(const char* const str, RA::IntervalPtrs::const_iterator i, RA::IntervalPtrs::const_iterator e) const { @@ -151,36 +115,33 @@ std::cerr << "\t" << **i << " -> "; unsigned reg = (*i)->reg; if (MRegisterInfo::isVirtualRegister(reg)) { - Virt2PhysMap::const_iterator it = v2pMap_.find(reg); - reg = (it == v2pMap_.end() ? 0 : it->second); + reg = vrm_->getPhys4Virt(reg); } std::cerr << mri_->getName(reg) << '\n'; } } - void verifyAssignment() const { - for (Virt2PhysMap::const_iterator i = v2pMap_.begin(), - e = v2pMap_.end(); i != e; ++i) - for (Virt2PhysMap::const_iterator i2 = next(i); i2 != e; ++i2) - if (MRegisterInfo::isVirtualRegister(i->second) && - (i->second == i2->second || - mri_->areAliases(i->second, i2->second))) { - const LiveIntervals::Interval - &in = li_->getInterval(i->second), - &in2 = li_->getInterval(i2->second); - if (in.overlaps(in2)) { - std::cerr << in << " overlaps " << in2 << '\n'; - assert(0); - } - } - } +// void verifyAssignment() const { +// for (Virt2PhysMap::const_iterator i = v2pMap_.begin(), +// e = v2pMap_.end(); i != e; ++i) +// for (Virt2PhysMap::const_iterator i2 = next(i); i2 != e; ++i2) +// if (MRegisterInfo::isVirtualRegister(i->second) && +// (i->second == i2->second || +// mri_->areAliases(i->second, i2->second))) { +// const LiveIntervals::Interval +// &in = li_->getInterval(i->second), +// &in2 = li_->getInterval(i2->second); +// if (in.overlaps(in2)) { +// std::cerr << in << " overlaps " << in2 << '\n'; +// assert(0); +// } +// } +// } }; } void RA::releaseMemory() { - v2pMap_.clear(); - v2ssMap_.clear(); unhandled_.clear(); active_.clear(); inactive_.clear(); @@ -195,6 +156,7 @@ mri_ = tm_->getRegisterInfo(); li_ = &getAnalysis(); if (!prt_.get()) prt_.reset(new PhysRegTracker(*mri_)); + vrm_.reset(new VirtRegMap(*mf_)); initIntervalSets(li_->getIntervals()); @@ -255,13 +217,12 @@ for (IntervalPtrs::iterator i = active_.begin(); i != active_.end(); ++i) { unsigned reg = (*i)->reg; DEBUG(std::cerr << "\tinterval " << **i << " expired\n"); - if (MRegisterInfo::isVirtualRegister(reg)) { - reg = v2pMap_[reg]; - } + if (MRegisterInfo::isVirtualRegister(reg)) + reg = vrm_->getPhys4Virt(reg); prt_->delRegUse(reg); } - DEBUG(printVirtRegAssignment()); + DEBUG(std::cerr << *vrm_); DEBUG(std::cerr << "********** REWRITE MACHINE CODE **********\n"); DEBUG(std::cerr << "********** Function: " @@ -292,11 +253,7 @@ if (op.isRegister() && MRegisterInfo::isVirtualRegister(op.getReg())) { unsigned virtReg = op.getReg(); - Virt2PhysMap::iterator it = v2pMap_.find(virtReg); - assert(it != v2pMap_.end() && - "all virtual registers must be allocated"); - unsigned physReg = it->second; - assert(MRegisterInfo::isPhysicalRegister(physReg)); + unsigned physReg = vrm_->getPhys4Virt(virtReg); DEBUG(std::cerr << "\t[reg" << virtReg << " -> " << mri_->getName(physReg) << ']'); mii->SetMachineOperandReg(i, physReg); @@ -348,9 +305,8 @@ // remove expired intervals if ((*i)->expiredAt(cur->start())) { DEBUG(std::cerr << "\t\tinterval " << **i << " expired\n"); - if (MRegisterInfo::isVirtualRegister(reg)) { - reg = v2pMap_[reg]; - } + if (MRegisterInfo::isVirtualRegister(reg)) + reg = vrm_->getPhys4Virt(reg); prt_->delRegUse(reg); // remove from active i = active_.erase(i); @@ -358,9 +314,8 @@ // move inactive intervals to inactive list else if (!(*i)->liveAt(cur->start())) { DEBUG(std::cerr << "\t\tinterval " << **i << " inactive\n"); - if (MRegisterInfo::isVirtualRegister(reg)) { - reg = v2pMap_[reg]; - } + if (MRegisterInfo::isVirtualRegister(reg)) + reg = vrm_->getPhys4Virt(reg); prt_->delRegUse(reg); // add to inactive inactive_.push_back(*i); @@ -388,9 +343,8 @@ // move re-activated intervals in active list else if ((*i)->liveAt(cur->start())) { DEBUG(std::cerr << "\t\tinterval " << **i << " active\n"); - if (MRegisterInfo::isVirtualRegister(reg)) { - reg = v2pMap_[reg]; - } + if (MRegisterInfo::isVirtualRegister(reg)) + reg = vrm_->getPhys4Virt(reg); prt_->addRegUse(reg); // add to active active_.push_back(*i); @@ -423,7 +377,7 @@ i != e; ++i) { unsigned reg = (*i)->reg; if (MRegisterInfo::isVirtualRegister(reg)) - reg = v2pMap_[reg]; + reg = vrm_->getPhys4Virt(reg); updateSpillWeights(reg, (*i)->weight); } @@ -434,7 +388,7 @@ if (cur->overlaps(**i)) { unsigned reg = (*i)->reg; if (MRegisterInfo::isVirtualRegister(reg)) - reg = v2pMap_[reg]; + reg = vrm_->getPhys4Virt(reg); prt_->addRegUse(reg); updateSpillWeights(reg, (*i)->weight); } @@ -459,7 +413,8 @@ // list. if (physReg) { DEBUG(std::cerr << mri_->getName(physReg) << '\n'); - assignVirt2PhysReg(cur->reg, physReg); + vrm_->assignVirt2Phys(cur->reg, physReg); + prt_->addRegUse(physReg); active_.push_back(cur); handled_.push_back(cur); return; @@ -487,7 +442,7 @@ // again if (cur->weight <= minWeight) { DEBUG(std::cerr << "\t\t\tspilling(c): " << *cur << '\n';); - int slot = assignVirt2StackSlot(cur->reg); + int slot = vrm_->assignVirt2StackSlot(cur->reg); li_->updateSpilledInterval(*cur, slot); // if we didn't eliminate the interval find where to add it @@ -523,11 +478,11 @@ for (IntervalPtrs::iterator i = active_.begin(); i != active_.end(); ++i) { unsigned reg = (*i)->reg; if (MRegisterInfo::isVirtualRegister(reg) && - toSpill[v2pMap_[reg]] && + toSpill[vrm_->getPhys4Virt(reg)] && cur->overlaps(**i)) { DEBUG(std::cerr << "\t\t\tspilling(a): " << **i << '\n'); earliestStart = std::min(earliestStart, (*i)->start()); - int slot = assignVirt2StackSlot((*i)->reg); + int slot = vrm_->assignVirt2StackSlot((*i)->reg); li_->updateSpilledInterval(**i, slot); addSpillCode(*i, slot); } @@ -536,11 +491,11 @@ i != inactive_.end(); ++i) { unsigned reg = (*i)->reg; if (MRegisterInfo::isVirtualRegister(reg) && - toSpill[v2pMap_[reg]] && + toSpill[vrm_->getPhys4Virt(reg)] && cur->overlaps(**i)) { DEBUG(std::cerr << "\t\t\tspilling(i): " << **i << '\n'); earliestStart = std::min(earliestStart, (*i)->start()); - int slot = assignVirt2StackSlot((*i)->reg); + int slot = vrm_->assignVirt2StackSlot((*i)->reg); li_->updateSpilledInterval(**i, slot); addSpillCode(*i, slot); } @@ -564,9 +519,8 @@ prt_->delRegUse(i->reg); } else { - Virt2PhysMap::iterator v2pIt = v2pMap_.find(i->reg); - clearVirtReg(v2pIt); - prt_->delRegUse(v2pIt->second); + prt_->delRegUse(vrm_->getPhys4Virt(i->reg)); + vrm_->clearVirtReg(i->reg); if (i->spilled()) { if (!i->empty()) { IntervalPtrs::iterator it = unhandled_.begin(); @@ -586,8 +540,7 @@ if (MRegisterInfo::isPhysicalRegister(i->reg)) fixed_.push_front(i); else { - Virt2PhysMap::iterator v2pIt = v2pMap_.find(i->reg); - clearVirtReg(v2pIt); + vrm_->clearVirtReg(i->reg); if (i->spilled()) { if (!i->empty()) { IntervalPtrs::iterator it = unhandled_.begin(); @@ -605,8 +558,7 @@ if (MRegisterInfo::isPhysicalRegister(i->reg)) fixed_.push_front(i); else { - Virt2PhysMap::iterator v2pIt = v2pMap_.find(i->reg); - clearVirtReg(v2pIt); + vrm_->clearVirtReg(i->reg); unhandled_.push_front(i); } } @@ -622,10 +574,8 @@ active_.push_back(*i); if (MRegisterInfo::isPhysicalRegister((*i)->reg)) prt_->addRegUse((*i)->reg); - else { - assert(v2pMap_.count((*i)->reg)); - prt_->addRegUse(v2pMap_.find((*i)->reg)->second); - } + else + prt_->addRegUse(vrm_->getPhys4Virt((*i)->reg)); } } } @@ -706,47 +656,6 @@ return reg; } return 0; -} - -RA::Virt2PhysMap::iterator -RA::assignVirt2PhysReg(unsigned virtReg, unsigned physReg) -{ - bool inserted; - Virt2PhysMap::iterator it; - tie(it, inserted) = v2pMap_.insert(std::make_pair(virtReg, physReg)); - assert(inserted && "attempting to assign a virt->phys mapping to an " - "already mapped register"); - prt_->addRegUse(physReg); - return it; -} - -void RA::clearVirtReg(Virt2PhysMap::iterator it) -{ - assert(it != v2pMap_.end() && - "attempting to clear a not allocated virtual register"); - unsigned physReg = it->second; - v2pMap_.erase(it); - DEBUG(std::cerr << "\t\t\tcleared register " << mri_->getName(physReg) - << "\n"); -} - - -int RA::assignVirt2StackSlot(unsigned virtReg) -{ - const TargetRegisterClass* rc = mf_->getSSARegMap()->getRegClass(virtReg); - int frameIndex = mf_->getFrameInfo()->CreateStackObject(rc); - - bool inserted = v2ssMap_.insert(std::make_pair(virtReg, frameIndex)).second; - assert(inserted && "attempt to assign stack slot to spilled register!"); - ++numSpills; - return frameIndex; -} - -int RA::getStackSlot(unsigned virtReg) -{ - assert(v2ssMap_.count(virtReg) && - "attempt to get stack slot for a non spilled register"); - return v2ssMap_.find(virtReg)->second; } FunctionPass* llvm::createLinearScanRegisterAllocator() { From alkis at niobe.cs.uiuc.edu Mon Feb 23 17:48:01 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Mon Feb 23 17:48:01 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/VirtRegMap.h RegAllocLinearScan.cpp Message-ID: <200402232347.i1NNlKu08583@niobe.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: VirtRegMap.h updated: 1.1 -> 1.2 RegAllocLinearScan.cpp updated: 1.62 -> 1.63 --- Log message: Remove '4Virt' from member function names as it is obvious. --- Diffs of the changes: (+15 -15) Index: llvm/lib/CodeGen/VirtRegMap.h diff -u llvm/lib/CodeGen/VirtRegMap.h:1.1 llvm/lib/CodeGen/VirtRegMap.h:1.2 --- llvm/lib/CodeGen/VirtRegMap.h:1.1 Mon Feb 23 17:08:11 2004 +++ llvm/lib/CodeGen/VirtRegMap.h Mon Feb 23 17:47:10 2004 @@ -28,7 +28,7 @@ public: typedef std::vector Virt2PhysMap; typedef std::vector Virt2StackSlotMap; - + enum { NO_PHYS_REG = 0, NO_STACK_SLOT = INT_MAX @@ -57,7 +57,7 @@ v2ssMap_(mf.getSSARegMap()->getNumVirtualRegs(), NO_STACK_SLOT) { } - unsigned getPhys4Virt(unsigned virtReg) const { + unsigned getPhys(unsigned virtReg) const { assert(MRegisterInfo::isVirtualRegister(virtReg)); return v2pMap_[toIndex(virtReg)]; } @@ -78,7 +78,7 @@ v2pMap_[toIndex(virtReg)] = NO_PHYS_REG; } - int getStackSlot4Virt(unsigned virtReg) const { + int getStackSlot(unsigned virtReg) const { assert(MRegisterInfo::isVirtualRegister(virtReg)); return v2ssMap_[toIndex(virtReg)]; } Index: llvm/lib/CodeGen/RegAllocLinearScan.cpp diff -u llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.62 llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.63 --- llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.62 Mon Feb 23 17:08:11 2004 +++ llvm/lib/CodeGen/RegAllocLinearScan.cpp Mon Feb 23 17:47:10 2004 @@ -115,7 +115,7 @@ std::cerr << "\t" << **i << " -> "; unsigned reg = (*i)->reg; if (MRegisterInfo::isVirtualRegister(reg)) { - reg = vrm_->getPhys4Virt(reg); + reg = vrm_->getPhys(reg); } std::cerr << mri_->getName(reg) << '\n'; } @@ -218,7 +218,7 @@ unsigned reg = (*i)->reg; DEBUG(std::cerr << "\tinterval " << **i << " expired\n"); if (MRegisterInfo::isVirtualRegister(reg)) - reg = vrm_->getPhys4Virt(reg); + reg = vrm_->getPhys(reg); prt_->delRegUse(reg); } @@ -253,7 +253,7 @@ if (op.isRegister() && MRegisterInfo::isVirtualRegister(op.getReg())) { unsigned virtReg = op.getReg(); - unsigned physReg = vrm_->getPhys4Virt(virtReg); + unsigned physReg = vrm_->getPhys(virtReg); DEBUG(std::cerr << "\t[reg" << virtReg << " -> " << mri_->getName(physReg) << ']'); mii->SetMachineOperandReg(i, physReg); @@ -306,7 +306,7 @@ if ((*i)->expiredAt(cur->start())) { DEBUG(std::cerr << "\t\tinterval " << **i << " expired\n"); if (MRegisterInfo::isVirtualRegister(reg)) - reg = vrm_->getPhys4Virt(reg); + reg = vrm_->getPhys(reg); prt_->delRegUse(reg); // remove from active i = active_.erase(i); @@ -315,7 +315,7 @@ else if (!(*i)->liveAt(cur->start())) { DEBUG(std::cerr << "\t\tinterval " << **i << " inactive\n"); if (MRegisterInfo::isVirtualRegister(reg)) - reg = vrm_->getPhys4Virt(reg); + reg = vrm_->getPhys(reg); prt_->delRegUse(reg); // add to inactive inactive_.push_back(*i); @@ -344,7 +344,7 @@ else if ((*i)->liveAt(cur->start())) { DEBUG(std::cerr << "\t\tinterval " << **i << " active\n"); if (MRegisterInfo::isVirtualRegister(reg)) - reg = vrm_->getPhys4Virt(reg); + reg = vrm_->getPhys(reg); prt_->addRegUse(reg); // add to active active_.push_back(*i); @@ -377,7 +377,7 @@ i != e; ++i) { unsigned reg = (*i)->reg; if (MRegisterInfo::isVirtualRegister(reg)) - reg = vrm_->getPhys4Virt(reg); + reg = vrm_->getPhys(reg); updateSpillWeights(reg, (*i)->weight); } @@ -388,7 +388,7 @@ if (cur->overlaps(**i)) { unsigned reg = (*i)->reg; if (MRegisterInfo::isVirtualRegister(reg)) - reg = vrm_->getPhys4Virt(reg); + reg = vrm_->getPhys(reg); prt_->addRegUse(reg); updateSpillWeights(reg, (*i)->weight); } @@ -478,7 +478,7 @@ for (IntervalPtrs::iterator i = active_.begin(); i != active_.end(); ++i) { unsigned reg = (*i)->reg; if (MRegisterInfo::isVirtualRegister(reg) && - toSpill[vrm_->getPhys4Virt(reg)] && + toSpill[vrm_->getPhys(reg)] && cur->overlaps(**i)) { DEBUG(std::cerr << "\t\t\tspilling(a): " << **i << '\n'); earliestStart = std::min(earliestStart, (*i)->start()); @@ -491,7 +491,7 @@ i != inactive_.end(); ++i) { unsigned reg = (*i)->reg; if (MRegisterInfo::isVirtualRegister(reg) && - toSpill[vrm_->getPhys4Virt(reg)] && + toSpill[vrm_->getPhys(reg)] && cur->overlaps(**i)) { DEBUG(std::cerr << "\t\t\tspilling(i): " << **i << '\n'); earliestStart = std::min(earliestStart, (*i)->start()); @@ -519,7 +519,7 @@ prt_->delRegUse(i->reg); } else { - prt_->delRegUse(vrm_->getPhys4Virt(i->reg)); + prt_->delRegUse(vrm_->getPhys(i->reg)); vrm_->clearVirtReg(i->reg); if (i->spilled()) { if (!i->empty()) { @@ -575,7 +575,7 @@ if (MRegisterInfo::isPhysicalRegister((*i)->reg)) prt_->addRegUse((*i)->reg); else - prt_->addRegUse(vrm_->getPhys4Virt((*i)->reg)); + prt_->addRegUse(vrm_->getPhys((*i)->reg)); } } } From alkis at niobe.cs.uiuc.edu Mon Feb 23 17:50:01 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Mon Feb 23 17:50:01 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/VirtRegMap.h Message-ID: <200402232349.i1NNnpu10374@niobe.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: VirtRegMap.h updated: 1.2 -> 1.3 --- Log message: Make enum private as it is an implementation detail. --- Diffs of the changes: (+5 -5) Index: llvm/lib/CodeGen/VirtRegMap.h diff -u llvm/lib/CodeGen/VirtRegMap.h:1.2 llvm/lib/CodeGen/VirtRegMap.h:1.3 --- llvm/lib/CodeGen/VirtRegMap.h:1.2 Mon Feb 23 17:47:10 2004 +++ llvm/lib/CodeGen/VirtRegMap.h Mon Feb 23 17:49:40 2004 @@ -29,11 +29,6 @@ typedef std::vector Virt2PhysMap; typedef std::vector Virt2StackSlotMap; - enum { - NO_PHYS_REG = 0, - NO_STACK_SLOT = INT_MAX - }; - private: MachineFunction* mf_; Virt2PhysMap v2pMap_; @@ -49,6 +44,11 @@ static unsigned fromIndex(unsigned index) { return index + MRegisterInfo::FirstVirtualRegister; } + + enum { + NO_PHYS_REG = 0, + NO_STACK_SLOT = INT_MAX + }; public: VirtRegMap(MachineFunction& mf) From lattner at cs.uiuc.edu Mon Feb 23 21:48:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 21:48:01 2004 Subject: [llvm-commits] CVS: llvm/include/Support/STLExtras.h Message-ID: <200402240347.VAA09728@zion.cs.uiuc.edu> Changes in directory llvm/include/Support: STLExtras.h updated: 1.14 -> 1.15 --- Log message: Noone cares about similarity to boost --- Diffs of the changes: (+0 -2) Index: llvm/include/Support/STLExtras.h diff -u llvm/include/Support/STLExtras.h:1.14 llvm/include/Support/STLExtras.h:1.15 --- llvm/include/Support/STLExtras.h:1.14 Fri Feb 13 19:17:28 2004 +++ llvm/include/Support/STLExtras.h Mon Feb 23 21:47:25 2004 @@ -73,8 +73,6 @@ // mapped_iterator - This is a simple iterator adapter that causes a function to // be dereferenced whenever operator* is invoked on the iterator. // -// It turns out that this is disturbingly similar to boost::transform_iterator -// template class mapped_iterator { RootIt current; From lattner at cs.uiuc.edu Mon Feb 23 21:51:08 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 21:51:08 2004 Subject: [llvm-commits] CVS: llvm/docs/ReleaseNotes.html Message-ID: <200402240350.VAA17284@zion.cs.uiuc.edu> Changes in directory llvm/docs: ReleaseNotes.html updated: 1.132 -> 1.133 --- Log message: Now that's a new feature! --- Diffs of the changes: (+2 -1) Index: llvm/docs/ReleaseNotes.html diff -u llvm/docs/ReleaseNotes.html:1.132 llvm/docs/ReleaseNotes.html:1.133 --- llvm/docs/ReleaseNotes.html:1.132 Sun Feb 22 21:51:34 2004 +++ llvm/docs/ReleaseNotes.html Mon Feb 23 21:50:24 2004 @@ -91,6 +91,7 @@
  • LLVM can now feed profile information back into optimizers for Profile Guided Optimization, and includes a simple basic block reordering pass.
  • The LLVM JIT lazily initializes global variables, reducing startup time for programs with lots of globals (like C++ programs).
  • The "tblgen" tool is now documented.
  • +
  • LLVM now no longer depends on the boost library.
  • @@ -588,7 +589,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /> The LLVM Compiler Infrastructure
    - Last modified: $Date: 2004/02/23 03:51:34 $ + Last modified: $Date: 2004/02/24 03:50:24 $ From lattner at cs.uiuc.edu Mon Feb 23 21:51:37 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 21:51:37 2004 Subject: [llvm-commits] CVS: llvm/include/Support/type_traits.h Message-ID: <200402240350.VAA16713@zion.cs.uiuc.edu> Changes in directory llvm/include/Support: type_traits.h added (r1.1) --- Log message: Check in a new type_traits header which provides the mysterious is_class template. Thanks go out to Reid Spencer for skillfully extracting this from boost! --- Diffs of the changes: (+54 -0) Index: llvm/include/Support/type_traits.h diff -c /dev/null llvm/include/Support/type_traits.h:1.1 *** /dev/null Mon Feb 23 21:50:11 2004 --- llvm/include/Support/type_traits.h Mon Feb 23 21:49:29 2004 *************** *** 0 **** --- 1,54 ---- + //===- Support/type_traits.h - Simplfied type traits ------------*- C++ -*-===// + // + // 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 provides a template class that determines if a type is a class or + // not. The basic mechanism, based on using the pointer to member function of + // a zero argument to a function was "boosted" from the boost type_traits + // library. See http://www.boost.org/ for all the gory details. + // + //===----------------------------------------------------------------------===// + + #ifndef LLVM_SUPPORT_TYPE_TRAITS_H + #define LLVM_SUPPORT_TYPE_TRAITS_H + + // This is actually the conforming implementation which works with abstract + // classes. However, enough compilers have trouble with it that most will use + // the one in boost/type_traits/object_traits.hpp. This implementation actually + // works with VC7.0, but other interactions seem to fail when we use it. + + namespace llvm { + + namespace dont_use + { + // These two functions should never be used. They are helpers to + // the is_class template below. They cannot be located inside + // is_class because doing so causes at least GCC to think that + // the value of the "value" enumerator is not constant. Placing + // them out here (for some strange reason) allows the sizeof + // operator against them to magically be constant. This is + // important to make the is_class::value idiom zero cost. it + // evaluates to a constant 1 or 0 depending on whether the + // parameter T is a class or not (respectively). + template char is_class_helper(void(T::*)(void)); + template double is_class_helper(...); + } + + template + struct is_class + { + // is_class<> metafunction due to Paul Mensonides (leavings at attbi.com). For + // more details: + // http://groups.google.com/groups?hl=en&selm=000001c1cc83%24e154d5e0%247772e50c%40c161550a&rnum=1 + public: + enum { value = sizeof(char) == sizeof(dont_use::is_class_helper(0)) }; + }; + + } + + #endif From lattner at cs.uiuc.edu Mon Feb 23 21:52:06 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 21:52:06 2004 Subject: [llvm-commits] CVS: llvm/include/Support/CommandLine.h Message-ID: <200402240350.VAA16716@zion.cs.uiuc.edu> Changes in directory llvm/include/Support: CommandLine.h updated: 1.29 -> 1.30 --- Log message: Use the new LLVM is_class template instead of the boost one, allowing us to remove our dependency on boost! Thanks to Reid Spencer for making this possible! --- Diffs of the changes: (+3 -2) Index: llvm/include/Support/CommandLine.h diff -u llvm/include/Support/CommandLine.h:1.29 llvm/include/Support/CommandLine.h:1.30 --- llvm/include/Support/CommandLine.h:1.29 Sun Nov 16 14:21:13 2003 +++ llvm/include/Support/CommandLine.h Mon Feb 23 21:50:05 2004 @@ -20,14 +20,15 @@ #ifndef SUPPORT_COMMANDLINE_H #define SUPPORT_COMMANDLINE_H +#include "Support/type_traits.h" #include #include #include #include #include -#include "boost/type_traits/object_traits.hpp" namespace llvm { + /// cl Namespace - This namespace contains all of the command line option /// processing machinery. It is intentionally a short name to make qualified /// usage concise. @@ -719,7 +720,7 @@ class ParserClass = parser > class opt : public Option, public opt_storage::value> { + is_class::value> { ParserClass Parser; virtual bool handleOccurrence(const char *ArgName, const std::string &Arg) { From lattner at cs.uiuc.edu Mon Feb 23 21:54:00 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 21:54:00 2004 Subject: [llvm-commits] CVS: llvm/include/boost/type_traits/alignment_traits.hpp arithmetic_traits.hpp array_traits.hpp composite_traits.hpp conversion_traits.hpp cv_traits.hpp function_traits.hpp fwd.hpp ice.hpp is_class.hpp object_traits.hpp reference_traits.hpp same_traits.hpp transform_traits.hpp transform_traits_spec.hpp type_traits_test.hpp utility.hpp Message-ID: <200402240353.VAA19021@zion.cs.uiuc.edu> Changes in directory llvm/include/boost/type_traits: alignment_traits.hpp (r1.1) removed arithmetic_traits.hpp (r1.1) removed array_traits.hpp (r1.1) removed composite_traits.hpp (r1.1) removed conversion_traits.hpp (r1.1) removed cv_traits.hpp (r1.1) removed function_traits.hpp (r1.1) removed fwd.hpp (r1.1) removed ice.hpp (r1.1) removed is_class.hpp (r1.1) removed object_traits.hpp (r1.1) removed reference_traits.hpp (r1.1) removed same_traits.hpp (r1.1) removed transform_traits.hpp (r1.1) removed transform_traits_spec.hpp (r1.1) removed type_traits_test.hpp (r1.1) removed utility.hpp (r1.1) removed --- Log message: Boost is now unneeded, thanks to the fix for PR253, contributed by Reid Spencer! --- Diffs of the changes: (+0 -0) From lattner at cs.uiuc.edu Mon Feb 23 21:54:29 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 21:54:29 2004 Subject: [llvm-commits] CVS: llvm/include/boost/config/stdlib/dinkumware.hpp libstdcpp3.hpp modena.hpp msl.hpp roguewave.hpp sgi.hpp stlport.hpp vacpp.hpp Message-ID: <200402240353.VAA19007@zion.cs.uiuc.edu> Changes in directory llvm/include/boost/config/stdlib: dinkumware.hpp (r1.1) removed libstdcpp3.hpp (r1.1) removed modena.hpp (r1.1) removed msl.hpp (r1.1) removed roguewave.hpp (r1.1) removed sgi.hpp (r1.1) removed stlport.hpp (r1.1) removed vacpp.hpp (r1.1) removed --- Log message: Boost is now unneeded, thanks to the fix for PR253, contributed by Reid Spencer! --- Diffs of the changes: (+0 -0) From lattner at cs.uiuc.edu Mon Feb 23 21:54:58 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 21:54:58 2004 Subject: [llvm-commits] CVS: llvm/include/boost/config/platform/aix.hpp amigaos.hpp beos.hpp bsd.hpp cygwin.hpp hpux.hpp irix.hpp linux.hpp macos.hpp solaris.hpp win32.hpp Message-ID: <200402240353.VAA18995@zion.cs.uiuc.edu> Changes in directory llvm/include/boost/config/platform: aix.hpp (r1.1) removed amigaos.hpp (r1.1) removed beos.hpp (r1.1) removed bsd.hpp (r1.1) removed cygwin.hpp (r1.1) removed hpux.hpp (r1.1) removed irix.hpp (r1.1) removed linux.hpp (r1.1) removed macos.hpp (r1.1) removed solaris.hpp (r1.1) removed win32.hpp (r1.1) removed --- Log message: Boost is now unneeded, thanks to the fix for PR253, contributed by Reid Spencer! --- Diffs of the changes: (+0 -0) From lattner at cs.uiuc.edu Mon Feb 23 21:55:27 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 21:55:27 2004 Subject: [llvm-commits] CVS: llvm/include/boost/config/compiler/borland.hpp comeau.hpp common_edg.hpp compaq_cxx.hpp gcc.hpp greenhills.hpp hp_acc.hpp intel.hpp kai.hpp metrowerks.hpp mpw.hpp sgi_mipspro.hpp sunpro_cc.hpp vacpp.hpp visualc.hpp Message-ID: <200402240353.VAA18985@zion.cs.uiuc.edu> Changes in directory llvm/include/boost/config/compiler: borland.hpp (r1.1) removed comeau.hpp (r1.1) removed common_edg.hpp (r1.1) removed compaq_cxx.hpp (r1.1) removed gcc.hpp (r1.4) removed greenhills.hpp (r1.1) removed hp_acc.hpp (r1.1) removed intel.hpp (r1.1) removed kai.hpp (r1.1) removed metrowerks.hpp (r1.1) removed mpw.hpp (r1.1) removed sgi_mipspro.hpp (r1.1) removed sunpro_cc.hpp (r1.1) removed vacpp.hpp (r1.1) removed visualc.hpp (r1.1) removed --- Log message: Boost is now unneeded, thanks to the fix for PR253, contributed by Reid Spencer! --- Diffs of the changes: (+0 -0) From lattner at cs.uiuc.edu Mon Feb 23 21:56:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 21:56:01 2004 Subject: [llvm-commits] CVS: llvm/include/boost/config/posix_features.hpp select_compiler_config.hpp select_platform_config.hpp select_stdlib_config.hpp suffix.hpp user.hpp Message-ID: <200402240354.VAA19216@zion.cs.uiuc.edu> Changes in directory llvm/include/boost/config: posix_features.hpp (r1.1) removed select_compiler_config.hpp (r1.1) removed select_platform_config.hpp (r1.1) removed select_stdlib_config.hpp (r1.1) removed suffix.hpp (r1.1) removed user.hpp (r1.1) removed --- Log message: Hrm, my find must have been faulty. It didn't remove these as well. --- Diffs of the changes: (+0 -0) From lattner at cs.uiuc.edu Mon Feb 23 21:56:30 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 21:56:30 2004 Subject: [llvm-commits] CVS: llvm/include/boost/LICENSE.TXT README.boost.llvm config.hpp type_traits.hpp Message-ID: <200402240354.VAA19204@zion.cs.uiuc.edu> Changes in directory llvm/include/boost: LICENSE.TXT (r1.1) removed README.boost.llvm (r1.1) removed config.hpp (r1.1) removed type_traits.hpp (r1.1) removed --- Log message: Hrm, my find must have been faulty. It didn't remove these as well. --- Diffs of the changes: (+0 -0) From lattner at cs.uiuc.edu Mon Feb 23 22:03:00 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 22:03:00 2004 Subject: [llvm-commits] CVS: llvm/LICENSE.TXT Message-ID: <200402240402.WAA20173@zion.cs.uiuc.edu> Changes in directory llvm: LICENSE.TXT updated: 1.9 -> 1.10 --- Log message: we no longer include boost --- Diffs of the changes: (+1 -2) Index: llvm/LICENSE.TXT diff -u llvm/LICENSE.TXT:1.9 llvm/LICENSE.TXT:1.10 --- llvm/LICENSE.TXT:1.9 Wed Feb 18 14:00:05 2004 +++ llvm/LICENSE.TXT Mon Feb 23 22:02:20 2004 @@ -77,7 +77,7 @@ Ptrdist: llvm/test/Programs/MultiSource/Benchmarks/Ptrdist LLUBenchmark: llvm/test/Programs/MultiSource/Benchmarks/llubenchmark SIM: llvm/test/Programs/MultiSource/Benchmarks/sim -cfrac: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/cfrac +cfrac: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/cfrac espresso: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/espresso gs: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/gs p2c: llvm/test/Programs/MultiSource/Benchmarks/MallocBench/p2c @@ -88,7 +88,6 @@ SingleSource Tests: llvm/test/Programs/SingleSource/Benchmarks/Misc llvm/test/Programs/SingleSource/CustomChecked llvm/test/Programs/SingleSource/Gizmos -Boost: llvm/include/boost GNU Libc: llvm/runtime/GCCLibraries/libc Zlib Library: llvm/runtime/zlib PNG Library: llvm/runtime/libpng From lattner at cs.uiuc.edu Mon Feb 23 22:55:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 22:55:01 2004 Subject: [llvm-commits] CVS: llvm/docs/LangRef.html Message-ID: <200402240454.WAA25893@zion.cs.uiuc.edu> Changes in directory llvm/docs: LangRef.html updated: 1.48 -> 1.49 --- Log message: Wow, the description of the 'switch' instruction was out of date. --- Diffs of the changes: (+43 -22) Index: llvm/docs/LangRef.html diff -u llvm/docs/LangRef.html:1.48 llvm/docs/LangRef.html:1.49 --- llvm/docs/LangRef.html:1.48 Sat Feb 14 13:27:26 2004 +++ llvm/docs/LangRef.html Mon Feb 23 22:54:45 2004 @@ -748,40 +748,61 @@ href="#i_ret">ret int 1
    IfUnequal:
    ret int 0
    - + +
    Syntax:
    -
      switch uint <value>, label <defaultdest> [ int <val>, label <dest>, ... ]
    + +
    +  switch <intty> <value>, label <defaultdest> [ <intty> <val>, label <dest> ... ]
    +
    +
    Overview:
    -

    The 'switch' instruction is used to transfer control flow -to one of several different places. It is a generalization of the 'br' + +

    The 'switch' instruction is used to transfer control flow to one of +several different places. It is a generalization of the 'br' instruction, allowing a branch to occur to one of many possible destinations.

    + +
    Arguments:
    -

    The 'switch' instruction uses three parameters: a 'uint' -comparison value 'value', a default 'label' -destination, and an array of pairs of comparison value constants and 'label's.

    + +

    The 'switch' instruction uses three parameters: an integer +comparison value 'value', a default 'label' destination, and +an array of pairs of comparison value constants and 'label's. The +table is not allowed to contain duplicate constant entries.

    +
    Semantics:
    +

    The switch instruction specifies a table of values and destinations. When the 'switch' instruction is executed, this table is searched for the given value. If the value is found, the corresponding destination is branched to, otherwise the default value it transfered to.

    +
    Implementation:
    -

    Depending on properties of the target machine and the particular switch -instruction, this instruction may be code generated as a series of -chained conditional branches, or with a lookup table.

    -
    Example:
    -
      ; Emulate a conditional br instruction
    -  %Val = cast bool %value to uint
    switch uint %Val, label %truedest [int 0, label %falsedest ]

    ; Emulate an unconditional br instruction - switch uint 0, label %dest [ ] - - ; Implement a jump table: - switch uint %val, label %otherwise [ int 0, label %onzero, - int 1, label %onone, - int 2, label %ontwo ] + +

    Depending on properties of the target machine and the particular +switch instruction, this instruction may be code generated in different +ways, for example as a series of chained conditional branches, or with a lookup +table.

    + +
    Example:
    + +
    + ; Emulate a conditional br instruction
    + %Val = cast bool %value to int
    + switch int %Val, label %truedest [int 0, label %falsedest ]
    +
    + ; Emulate an unconditional br instruction
    + switch uint 0, label %dest [ ]
    +
    + ; Implement a jump table:
    + switch uint %val, label %otherwise [ uint 0, label %onzero 
    +                                      uint 1, label %onone 
    +                                      uint 2, label %ontwo ]
     
    @@ -2032,6 +2053,6 @@ +Last modified: $Date: 2004/02/24 04:54:45 $ From lattner at cs.uiuc.edu Mon Feb 23 23:35:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 23:35:01 2004 Subject: [llvm-commits] CVS: llvm/test/Regression/Transforms/SimplifyCFG/switch_create.ll Message-ID: <200402240534.XAA32592@zion.cs.uiuc.edu> Changes in directory llvm/test/Regression/Transforms/SimplifyCFG: switch_create.ll added (r1.1) --- Log message: The simplifycfg pass should be able to turn stuff like: if (X == 4 || X == 7) and if (X != 4 && X != 7) into switch instructions. --- Diffs of the changes: (+33 -0) Index: llvm/test/Regression/Transforms/SimplifyCFG/switch_create.ll diff -c /dev/null llvm/test/Regression/Transforms/SimplifyCFG/switch_create.ll:1.1 *** /dev/null Mon Feb 23 23:34:55 2004 --- llvm/test/Regression/Transforms/SimplifyCFG/switch_create.ll Mon Feb 23 23:34:44 2004 *************** *** 0 **** --- 1,33 ---- + ; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis | not grep br + + declare void %foo1() + declare void %foo2() + + void %test1(uint %V) { + %C1 = seteq uint %V, 4 + %C2 = seteq uint %V, 17 + %CN = or bool %C1, %C2 + br bool %CN, label %T, label %F + T: + call void %foo1() + ret void + F: + call void %foo2() + ret void + } + + + void %test2(int %V) { + %C1 = setne int %V, 4 + %C2 = setne int %V, 17 + %CN = and bool %C1, %C2 + br bool %CN, label %T, label %F + T: + call void %foo1() + ret void + F: + call void %foo2() + ret void + } + + From lattner at cs.uiuc.edu Mon Feb 23 23:39:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 23:39:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Utils/SimplifyCFG.cpp Message-ID: <200402240538.XAA01183@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Utils: SimplifyCFG.cpp updated: 1.23 -> 1.24 --- Log message: Implement: test/Regression/Transforms/SimplifyCFG/switch_create.ll This turns code like this: if (X == 4 | X == 7) and if (X != 4 & X != 7) into switch instructions. --- Diffs of the changes: (+140 -7) Index: llvm/lib/Transforms/Utils/SimplifyCFG.cpp diff -u llvm/lib/Transforms/Utils/SimplifyCFG.cpp:1.23 llvm/lib/Transforms/Utils/SimplifyCFG.cpp:1.24 --- llvm/lib/Transforms/Utils/SimplifyCFG.cpp:1.23 Mon Feb 16 00:35:48 2004 +++ llvm/lib/Transforms/Utils/SimplifyCFG.cpp Mon Feb 23 23:38:11 2004 @@ -14,17 +14,18 @@ #include "llvm/Transforms/Utils/Local.h" #include "llvm/Constants.h" #include "llvm/Instructions.h" +#include "llvm/Type.h" #include "llvm/Support/CFG.h" #include #include using namespace llvm; -// PropagatePredecessors - This gets "Succ" ready to have the predecessors from -// "BB". This is a little tricky because "Succ" has PHI nodes, which need to -// have extra slots added to them to hold the merge edges from BB's -// predecessors, and BB itself might have had PHI nodes in it. This function -// returns true (failure) if the Succ BB already has a predecessor that is a -// predecessor of BB and incoming PHI arguments would not be discernible. +// PropagatePredecessorsForPHIs - This gets "Succ" ready to have the +// predecessors from "BB". This is a little tricky because "Succ" has PHI +// nodes, which need to have extra slots added to them to hold the merge edges +// from BB's predecessors, and BB itself might have had PHI nodes in it. This +// function returns true (failure) if the Succ BB already has a predecessor that +// is a predecessor of BB and incoming PHI arguments would not be discernible. // // Assumption: Succ is the single successor for BB. // @@ -200,6 +201,91 @@ return true; } +// GatherConstantSetEQs - Given a potentially 'or'd together collection of seteq +// instructions that compare a value against a constant, return the value being +// compared, and stick the constant into the Values vector. +static Value *GatherConstantSetEQs(Value *V, std::vector &Values) { + if (Instruction *Inst = dyn_cast(V)) + if (Inst->getOpcode() == Instruction::SetEQ) { + if (Constant *C = dyn_cast(Inst->getOperand(1))) { + Values.push_back(C); + return Inst->getOperand(0); + } else if (Constant *C = dyn_cast(Inst->getOperand(0))) { + Values.push_back(C); + return Inst->getOperand(1); + } + } else if (Inst->getOpcode() == Instruction::Or) { + if (Value *LHS = GatherConstantSetEQs(Inst->getOperand(0), Values)) + if (Value *RHS = GatherConstantSetEQs(Inst->getOperand(1), Values)) + if (LHS == RHS) + return LHS; + } + return 0; +} + +// GatherConstantSetNEs - Given a potentially 'and'd together collection of +// setne instructions that compare a value against a constant, return the value +// being compared, and stick the constant into the Values vector. +static Value *GatherConstantSetNEs(Value *V, std::vector &Values) { + if (Instruction *Inst = dyn_cast(V)) + if (Inst->getOpcode() == Instruction::SetNE) { + if (Constant *C = dyn_cast(Inst->getOperand(1))) { + Values.push_back(C); + return Inst->getOperand(0); + } else if (Constant *C = dyn_cast(Inst->getOperand(0))) { + Values.push_back(C); + return Inst->getOperand(1); + } + } else if (Inst->getOpcode() == Instruction::Cast) { + // Cast of X to bool is really a comparison against zero. + assert(Inst->getType() == Type::BoolTy && "Can only handle bool values!"); + Values.push_back(Constant::getNullValue(Inst->getOperand(0)->getType())); + return Inst->getOperand(0); + } else if (Inst->getOpcode() == Instruction::And) { + if (Value *LHS = GatherConstantSetNEs(Inst->getOperand(0), Values)) + if (Value *RHS = GatherConstantSetNEs(Inst->getOperand(1), Values)) + if (LHS == RHS) + return LHS; + } + return 0; +} + + + +/// GatherValueComparisons - If the specified Cond is an 'and' or 'or' of a +/// bunch of comparisons of one value against constants, return the value and +/// the constants being compared. +static bool GatherValueComparisons(Instruction *Cond, Value *&CompVal, + std::vector &Values) { + if (Cond->getOpcode() == Instruction::Or) { + CompVal = GatherConstantSetEQs(Cond, Values); + + // Return true to indicate that the condition is true if the CompVal is + // equal to one of the constants. + return true; + } else if (Cond->getOpcode() == Instruction::And) { + CompVal = GatherConstantSetNEs(Cond, Values); + + // Return false to indicate that the condition is false if the CompVal is + // equal to one of the constants. + return false; + } + return false; +} + +/// ErasePossiblyDeadInstructionTree - If the specified instruction is dead and +/// has no side effects, nuke it. If it uses any instructions that become dead +/// because the instruction is now gone, nuke them too. +static void ErasePossiblyDeadInstructionTree(Instruction *I) { + if (isInstructionTriviallyDead(I)) { + std::vector Operands(I->op_begin(), I->op_end()); + I->getParent()->getInstList().erase(I); + for (unsigned i = 0, e = Operands.size(); i != e; ++i) + if (Instruction *OpI = dyn_cast(Operands[i])) + ErasePossiblyDeadInstructionTree(OpI); + } +} + // SimplifyCFG - This function is used to do simplification of a CFG. For // example, it adjusts branches to branches to eliminate the extra hop, it // eliminates unreachable basic blocks, and does other "peephole" optimization @@ -389,7 +475,6 @@ } } - // Merge basic blocks into their predecessor if there is only one distinct // pred, and if there is only one distinct successor of the predecessor, and // if there are no PHI nodes. @@ -451,6 +536,54 @@ return true; } + + for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) + if (BranchInst *BI = dyn_cast((*PI)->getTerminator())) + // Change br (X == 0 | X == 1), T, F into a switch instruction. + if (BI->isConditional() && isa(BI->getCondition())) { + Instruction *Cond = cast(BI->getCondition()); + // If this is a bunch of seteq's or'd together, or if it's a bunch of + // 'setne's and'ed together, collect them. + Value *CompVal = 0; + std::vector Values; + bool TrueWhenEqual = GatherValueComparisons(Cond, CompVal, Values); + if (CompVal && CompVal->getType()->isInteger()) { + // There might be duplicate constants in the list, which the switch + // instruction can't handle, remove them now. + std::sort(Values.begin(), Values.end()); + Values.erase(std::unique(Values.begin(), Values.end()), Values.end()); + + // Figure out which block is which destination. + BasicBlock *DefaultBB = BI->getSuccessor(1); + BasicBlock *EdgeBB = BI->getSuccessor(0); + if (!TrueWhenEqual) std::swap(DefaultBB, EdgeBB); + + // Create the new switch instruction now. + SwitchInst *New = new SwitchInst(CompVal, DefaultBB, BI); + + // Add all of the 'cases' to the switch instruction. + for (unsigned i = 0, e = Values.size(); i != e; ++i) + New->addCase(Values[i], EdgeBB); + + // We added edges from PI to the EdgeBB. As such, if there were any + // PHI nodes in EdgeBB, they need entries to be added corresponding to + // the number of edges added. + for (BasicBlock::iterator BBI = EdgeBB->begin(); + PHINode *PN = dyn_cast(BBI); ++BBI) { + Value *InVal = PN->getIncomingValueForBlock(*PI); + for (unsigned i = 0, e = Values.size()-1; i != e; ++i) + PN->addIncoming(InVal, *PI); + } + + // Erase the old branch instruction. + (*PI)->getInstList().erase(BI); + + // Erase the potentially condition tree that was used to computed the + // branch condition. + ErasePossiblyDeadInstructionTree(Cond); + return true; + } + } // If there is a trivial two-entry PHI node in this basic block, and we can // eliminate it, do so now. From lattner at cs.uiuc.edu Mon Feb 23 23:55:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Feb 23 23:55:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Utils/SimplifyCFG.cpp Message-ID: <200402240554.XAA02814@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Utils: SimplifyCFG.cpp updated: 1.24 -> 1.25 --- Log message: Rearrange code a bit --- Diffs of the changes: (+27 -30) Index: llvm/lib/Transforms/Utils/SimplifyCFG.cpp diff -u llvm/lib/Transforms/Utils/SimplifyCFG.cpp:1.24 llvm/lib/Transforms/Utils/SimplifyCFG.cpp:1.25 --- llvm/lib/Transforms/Utils/SimplifyCFG.cpp:1.24 Mon Feb 23 23:38:11 2004 +++ llvm/lib/Transforms/Utils/SimplifyCFG.cpp Mon Feb 23 23:54:22 2004 @@ -301,36 +301,6 @@ assert(BB->getTerminator() && "Degenerate basic block encountered!"); assert(&BB->getParent()->front() != BB && "Can't Simplify entry block!"); - // Check to see if the first instruction in this block is just an unwind. If - // so, replace any invoke instructions which use this as an exception - // destination with call instructions. - // - if (UnwindInst *UI = dyn_cast(BB->getTerminator())) - if (BB->begin() == BasicBlock::iterator(UI)) { // Empty block? - std::vector Preds(pred_begin(BB), pred_end(BB)); - while (!Preds.empty()) { - BasicBlock *Pred = Preds.back(); - if (InvokeInst *II = dyn_cast(Pred->getTerminator())) - if (II->getUnwindDest() == BB) { - // Insert a new branch instruction before the invoke, because this - // is now a fall through... - BranchInst *BI = new BranchInst(II->getNormalDest(), II); - Pred->getInstList().remove(II); // Take out of symbol table - - // Insert the call now... - std::vector Args(II->op_begin()+3, II->op_end()); - CallInst *CI = new CallInst(II->getCalledValue(), Args, - II->getName(), BI); - // If the invoke produced a value, the Call now does instead - II->replaceAllUsesWith(CI); - delete II; - Changed = true; - } - - Preds.pop_back(); - } - } - // Remove basic blocks that have no predecessors... which are unreachable. if (pred_begin(BB) == pred_end(BB)) { //cerr << "Removing BB: \n" << BB; @@ -472,6 +442,33 @@ return true; } + } + } else if (UnwindInst *UI = dyn_cast(BB->begin())) { + // Check to see if the first instruction in this block is just an unwind. + // If so, replace any invoke instructions which use this as an exception + // destination with call instructions. + // + std::vector Preds(pred_begin(BB), pred_end(BB)); + while (!Preds.empty()) { + BasicBlock *Pred = Preds.back(); + if (InvokeInst *II = dyn_cast(Pred->getTerminator())) + if (II->getUnwindDest() == BB) { + // Insert a new branch instruction before the invoke, because this + // is now a fall through... + BranchInst *BI = new BranchInst(II->getNormalDest(), II); + Pred->getInstList().remove(II); // Take out of symbol table + + // Insert the call now... + std::vector Args(II->op_begin()+3, II->op_end()); + CallInst *CI = new CallInst(II->getCalledValue(), Args, + II->getName(), BI); + // If the invoke produced a value, the Call now does instead + II->replaceAllUsesWith(CI); + delete II; + Changed = true; + } + + Preds.pop_back(); } } From lattner at cs.uiuc.edu Tue Feb 24 00:27:08 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Feb 24 00:27:08 2004 Subject: [llvm-commits] CVS: llvm/include/llvm/iTerminators.h Message-ID: <200402240626.AAA14706@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm: iTerminators.h updated: 1.38 -> 1.39 --- Log message: Add some helpful methods for dealing with switch instructions --- Diffs of the changes: (+30 -0) Index: llvm/include/llvm/iTerminators.h diff -u llvm/include/llvm/iTerminators.h:1.38 llvm/include/llvm/iTerminators.h:1.39 --- llvm/include/llvm/iTerminators.h:1.38 Sun Feb 8 15:43:20 2004 +++ llvm/include/llvm/iTerminators.h Tue Feb 24 00:26:00 2004 @@ -178,6 +178,36 @@ return cast(Operands[1].get()); } + /// getNumCases - return the number of 'cases' in this switch instruction. + /// Note that case #0 is always the default case. + unsigned getNumCases() const { + return Operands.size()/2; + } + + /// getCaseValue - Return the specified case value. Note that case #0, the + /// default destination, does not have a case value. + Constant *getCaseValue(unsigned i) { + assert(i && i < getNumCases() && "Illegal case value to get!"); + return getSuccessorValue(i); + } + + /// getCaseValue - Return the specified case value. Note that case #0, the + /// default destination, does not have a case value. + const Constant *getCaseValue(unsigned i) const { + assert(i && i < getNumCases() && "Illegal case value to get!"); + return getSuccessorValue(i); + } + + /// findCaseValue - Search all of the case values for the specified constant. + /// If it is explicitly handled, return the case number of it, otherwise + /// return 0 to indicate that it is handled by the default handler. + unsigned findCaseValue(const Constant *C) const { + for (unsigned i = 1, e = getNumCases(); i != e; ++i) + if (getCaseValue(i) == C) + return i; + return 0; + } + /// addCase - Add an entry to the switch instruction... /// void addCase(Constant *OnVal, BasicBlock *Dest); From alkis at niobe.cs.uiuc.edu Tue Feb 24 00:31:01 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Tue Feb 24 00:31:01 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/VirtRegMap.h Message-ID: <200402240630.i1O6UkS27847@niobe.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: VirtRegMap.h updated: 1.3 -> 1.4 --- Log message: Add predicates for checking if a virtual register has a physical register mapping or a stack slot mapping. --- Diffs of the changes: (+8 -0) Index: llvm/lib/CodeGen/VirtRegMap.h diff -u llvm/lib/CodeGen/VirtRegMap.h:1.3 llvm/lib/CodeGen/VirtRegMap.h:1.4 --- llvm/lib/CodeGen/VirtRegMap.h:1.3 Mon Feb 23 17:49:40 2004 +++ llvm/lib/CodeGen/VirtRegMap.h Tue Feb 24 00:30:36 2004 @@ -57,6 +57,10 @@ v2ssMap_(mf.getSSARegMap()->getNumVirtualRegs(), NO_STACK_SLOT) { } + bool hasPhys(unsigned virtReg) const { + return getPhys(virtReg) != NO_PHYS_REG; + } + unsigned getPhys(unsigned virtReg) const { assert(MRegisterInfo::isVirtualRegister(virtReg)); return v2pMap_[toIndex(virtReg)]; @@ -76,6 +80,10 @@ assert(v2pMap_[toIndex(virtReg)] != NO_PHYS_REG && "attempt to clear a not assigned virtual register"); v2pMap_[toIndex(virtReg)] = NO_PHYS_REG; + } + + bool hasStackSlot(unsigned virtReg) const { + return getStackSlot(virtReg) != NO_STACK_SLOT; } int getStackSlot(unsigned virtReg) const { From lattner at cs.uiuc.edu Tue Feb 24 01:22:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Feb 24 01:22:01 2004 Subject: [llvm-commits] CVS: llvm/test/Regression/Transforms/SimplifyCFG/switch_switch_fold.ll Message-ID: <200402240721.BAA27154@zion.cs.uiuc.edu> Changes in directory llvm/test/Regression/Transforms/SimplifyCFG: switch_switch_fold.ll added (r1.1) --- Log message: New testcase. Switch instructions that go to switch instructions should be merged. --- Diffs of the changes: (+46 -0) Index: llvm/test/Regression/Transforms/SimplifyCFG/switch_switch_fold.ll diff -c /dev/null llvm/test/Regression/Transforms/SimplifyCFG/switch_switch_fold.ll:1.1 *** /dev/null Tue Feb 24 01:21:19 2004 --- llvm/test/Regression/Transforms/SimplifyCFG/switch_switch_fold.ll Tue Feb 24 01:21:09 2004 *************** *** 0 **** --- 1,46 ---- + ; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis | grep switch | wc -l | grep 1 + + ; Test that a switch going to a switch on the same value can be merged. All + ; three switches in this example can be merged into one big one. + + declare void %foo1() + declare void %foo2() + declare void %foo3() + declare void %foo4() + + void %test1(uint %V) { + switch uint %V, label %F [ + uint 4, label %T + uint 17, label %T + uint 5, label %T + uint 1234, label %F + ] + + T: + switch uint %V, label %F [ + uint 4, label %A + uint 17, label %B + uint 42, label %C + ] + A: + call void %foo1() + ret void + + B: + call void %foo2() + ret void + C: + call void %foo3() + ret void + + F: + switch uint %V, label %F [ + uint 4, label %B + uint 18, label %B + uint 42, label %D + ] + D: + call void %foo4() + ret void + } + From lattner at cs.uiuc.edu Tue Feb 24 01:25:04 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Feb 24 01:25:04 2004 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Utils/SimplifyCFG.cpp Message-ID: <200402240724.BAA27464@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Utils: SimplifyCFG.cpp updated: 1.25 -> 1.26 --- Log message: Implement SimplifyCFG/switch_switch_fold.ll This case occurs many times in various benchmarks, especially when combined with the previous patch. This allows it to get stuff like: if (X == 4 || X == 3) if (X == 5 || X == 8) and switch (X) { case 4: case 5: case 6: if (X == 4 || X == 5) --- Diffs of the changes: (+150 -2) Index: llvm/lib/Transforms/Utils/SimplifyCFG.cpp diff -u llvm/lib/Transforms/Utils/SimplifyCFG.cpp:1.25 llvm/lib/Transforms/Utils/SimplifyCFG.cpp:1.26 --- llvm/lib/Transforms/Utils/SimplifyCFG.cpp:1.25 Mon Feb 23 23:54:22 2004 +++ llvm/lib/Transforms/Utils/SimplifyCFG.cpp Tue Feb 24 01:23:58 2004 @@ -18,6 +18,7 @@ #include "llvm/Support/CFG.h" #include #include +#include using namespace llvm; // PropagatePredecessorsForPHIs - This gets "Succ" ready to have the @@ -286,6 +287,47 @@ } } +/// SafeToMergeTerminators - Return true if it is safe to merge these two +/// terminator instructions together. +/// +static bool SafeToMergeTerminators(TerminatorInst *SI1, TerminatorInst *SI2) { + if (SI1 == SI2) return false; // Can't merge with self! + + // It is not safe to merge these two switch instructions if they have a common + // successor, and if that successor has a PHI node, and if that PHI node has + // conflicting incoming values from the two switch blocks. + BasicBlock *SI1BB = SI1->getParent(); + BasicBlock *SI2BB = SI2->getParent(); + std::set SI1Succs(succ_begin(SI1BB), succ_end(SI1BB)); + + for (succ_iterator I = succ_begin(SI2BB), E = succ_end(SI2BB); I != E; ++I) + if (SI1Succs.count(*I)) + for (BasicBlock::iterator BBI = (*I)->begin(); + PHINode *PN = dyn_cast(BBI); ++BBI) + if (PN->getIncomingValueForBlock(SI1BB) != + PN->getIncomingValueForBlock(SI2BB)) + return false; + + return true; +} + +/// AddPredecessorToBlock - Update PHI nodes in Succ to indicate that there will +/// now be entries in it from the 'NewPred' block. The values that will be +/// flowing into the PHI nodes will be the same as those coming in from +/// ExistPred, and existing predecessor of Succ. +static void AddPredecessorToBlock(BasicBlock *Succ, BasicBlock *NewPred, + BasicBlock *ExistPred) { + assert(std::find(succ_begin(ExistPred), succ_end(ExistPred), Succ) != + succ_end(ExistPred) && "ExistPred is not a predecessor of Succ!"); + if (!isa(Succ->begin())) return; // Quick exit if nothing to do + + for (BasicBlock::iterator I = Succ->begin(); + PHINode *PN = dyn_cast(I); ++I) { + Value *V = PN->getIncomingValueForBlock(ExistPred); + PN->addIncoming(V, NewPred); + } +} + // SimplifyCFG - This function is used to do simplification of a CFG. For // example, it adjusts branches to branches to eliminate the extra hop, it // eliminates unreachable basic blocks, and does other "peephole" optimization @@ -302,7 +344,8 @@ assert(&BB->getParent()->front() != BB && "Can't Simplify entry block!"); // Remove basic blocks that have no predecessors... which are unreachable. - if (pred_begin(BB) == pred_end(BB)) { + if (pred_begin(BB) == pred_end(BB) || + *pred_begin(BB) == BB && ++pred_begin(BB) == pred_end(BB)) { //cerr << "Removing BB: \n" << BB; // Loop through all of our successors and make sure they know that one @@ -439,7 +482,6 @@ // We know there are no successors, so just nuke the block. M->getBasicBlockList().erase(BB); - return true; } } @@ -470,6 +512,112 @@ Preds.pop_back(); } + } else if (SwitchInst *SI = dyn_cast(BB->begin())) { + // If the only instruction in this block is a switch instruction, see if we + // can fold the switch instruction into a switch in a predecessor block. + std::vector Preds(pred_begin(BB), pred_end(BB)); + while (!Preds.empty()) { + BasicBlock *Pred = Preds.back(); + Preds.pop_back(); + + // If the two blocks are switching on the same value, we can merge this + // switch into the predecessor's switch. + if (SwitchInst *PSI = dyn_cast(Pred->getTerminator())) + if (PSI->getCondition() == SI->getCondition() && + SafeToMergeTerminators(SI, PSI)) { + // Figure out which 'cases' to copy from SI to PSI. + std::vector > Cases; + BasicBlock *NewDefault = 0; + if (PSI->getDefaultDest() == BB) { + // If this is the default destination from PSI, only the edges in SI + // that don't occur in PSI, or that branch to BB will be activated. + std::set PSIHandled; + for (unsigned i = 1, e = PSI->getNumSuccessors(); i != e; ++i) + if (PSI->getSuccessor(i) != BB) + PSIHandled.insert(PSI->getCaseValue(i)); + else { + // This entry will be replaced. + PSI->removeCase(i); + --i; --e; + } + + NewDefault = SI->getDefaultDest(); + for (unsigned i = 1, e = SI->getNumSuccessors(); i != e; ++i) { + Constant *C = SI->getCaseValue(i); + if (!PSIHandled.count(C)) + Cases.push_back(std::make_pair(C, SI->getSuccessor(i))); + } + + } else { + // If this is not the default destination from PSI, only the edges + // in SI that occur in PSI with a destination of BB will be + // activated. + std::set PSIHandled; + for (unsigned i = 1, e = PSI->getNumSuccessors(); i != e; ++i) + if (PSI->getSuccessor(i) == BB) { + // We know that BB doesn't have any PHI nodes in it, so just + // drop the edges. + PSIHandled.insert(PSI->getCaseValue(i)); + PSI->removeCase(i); + --i; --e; + } + + // Okay, now we know which constants were sent to BB from the + // predecessor. Figure out where they will all go now. + for (unsigned i = 1, e = SI->getNumSuccessors(); i != e; ++i) { + Constant *C = SI->getCaseValue(i); + if (PSIHandled.count(C)) { + // If this is one we are capable of getting... + Cases.push_back(std::make_pair(C, SI->getSuccessor(i))); + PSIHandled.erase(C); // This constant is taken care of + } + } + + // If there are any constants vectored to BB that SI doesn't handle, + // they must go to the default destination of SI. + for (std::set::iterator I = PSIHandled.begin(), + E = PSIHandled.end(); I != E; ++I) + Cases.push_back(std::make_pair(*I, SI->getDefaultDest())); + } + + // Okay, at this point, we know which cases need to be added to the + // PSI switch and which destinations they go to. If PSI needs its + // default destination changed, NewDefault is set. Start changing + // stuff now. + if (NewDefault) { + AddPredecessorToBlock(NewDefault, Pred, BB); + PSI->setSuccessor(0, NewDefault); + } + + // Okay, add all of the cases now. + for (unsigned i = 0, e = Cases.size(); i != e; ++i) { + AddPredecessorToBlock(Cases[i].second, Pred, BB); + PSI->addCase(Cases[i].first, Cases[i].second); + } + + // Okay, last check. If BB is still a successor of PSI, then we must + // have an infinite loop case. If so, add an infinitely looping block + // to handle the case to preserve the behavior of the code. + BasicBlock *InfLoopBlock = 0; + for (unsigned i = 0, e = PSI->getNumSuccessors(); i != e; ++i) + if (PSI->getSuccessor(i) == BB) { + if (InfLoopBlock == 0) { + // Insert it at the end of the loop, because it's either code, + // or it won't matter if it's hot. :) + InfLoopBlock = new BasicBlock("infloop", BB->getParent()); + new BranchInst(InfLoopBlock, InfLoopBlock); + } + PSI->setSuccessor(i, InfLoopBlock); + } + + Changed = true; + } + } + + // If we removed all predecessors of this block, recursively call + // SimplifyCFG to remove it. + if (pred_begin(BB) == pred_end(BB)) + return SimplifyCFG(BB); } // Merge basic blocks into their predecessor if there is only one distinct From alkis at niobe.cs.uiuc.edu Tue Feb 24 02:59:01 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Tue Feb 24 02:59:01 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/VirtRegMap.h VirtRegMap.cpp RegAllocLinearScan.cpp Message-ID: <200402240858.i1O8whW21194@niobe.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: VirtRegMap.h updated: 1.4 -> 1.5 VirtRegMap.cpp updated: 1.1 -> 1.2 RegAllocLinearScan.cpp updated: 1.63 -> 1.64 --- Log message: Move machine code rewriter and spiller outside the register allocator. The implementation is completely rewritten and now employs several optimizations not exercised before. For example for 164.gzip we have 997 loads and 699 stores vs the 1221 loads and 880 stores we have before. --- Diffs of the changes: (+176 -143) Index: llvm/lib/CodeGen/VirtRegMap.h diff -u llvm/lib/CodeGen/VirtRegMap.h:1.4 llvm/lib/CodeGen/VirtRegMap.h:1.5 --- llvm/lib/CodeGen/VirtRegMap.h:1.4 Tue Feb 24 00:30:36 2004 +++ llvm/lib/CodeGen/VirtRegMap.h Tue Feb 24 02:58:29 2004 @@ -98,6 +98,8 @@ std::ostream& operator<<(std::ostream& os, const VirtRegMap& li); + void eliminateVirtRegs(MachineFunction& mf, const VirtRegMap& vrm); + } // End llvm namespace #endif Index: llvm/lib/CodeGen/VirtRegMap.cpp diff -u llvm/lib/CodeGen/VirtRegMap.cpp:1.1 llvm/lib/CodeGen/VirtRegMap.cpp:1.2 --- llvm/lib/CodeGen/VirtRegMap.cpp:1.1 Mon Feb 23 17:08:11 2004 +++ llvm/lib/CodeGen/VirtRegMap.cpp Tue Feb 24 02:58:29 2004 @@ -7,20 +7,32 @@ // //===----------------------------------------------------------------------===// // -// This file implements the virtual register map. +// This file implements the virtual register map. It also implements +// the eliminateVirtRegs() function that given a virtual register map +// and a machine function it eliminates all virtual references by +// replacing them with physical register references and adds spill +// code as necessary. // //===----------------------------------------------------------------------===// +#define DEBUG_TYPE "regalloc" #include "VirtRegMap.h" +#include "llvm/Function.h" #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/Target/TargetMachine.h" +#include "llvm/Target/TargetInstrInfo.h" #include "Support/Statistic.h" +#include "Support/Debug.h" +#include "Support/STLExtras.h" #include using namespace llvm; namespace { - Statistic<> numSpills("ra-linearscan", "Number of register spills"); + Statistic<> numSpills("spiller", "Number of register spills"); + Statistic<> numStores("spiller", "Number of stores added"); + Statistic<> numLoads ("spiller", "Number of loads added"); + } int VirtRegMap::assignVirt2StackSlot(unsigned virtReg) @@ -52,4 +64,149 @@ << vrm.v2ssMap_[i] << "]\n"; } return std::cerr << '\n'; +} + +namespace { + + class Spiller { + typedef std::vector Phys2VirtMap; + typedef std::vector PhysFlag; + + MachineFunction& mf_; + const TargetMachine& tm_; + const TargetInstrInfo& tii_; + const MRegisterInfo& mri_; + const VirtRegMap& vrm_; + Phys2VirtMap p2vMap_; + PhysFlag dirty_; + + public: + Spiller(MachineFunction& mf, const VirtRegMap& vrm) + : mf_(mf), + tm_(mf_.getTarget()), + tii_(tm_.getInstrInfo()), + mri_(*tm_.getRegisterInfo()), + vrm_(vrm), + p2vMap_(mri_.getNumRegs()), + dirty_(mri_.getNumRegs()) { + DEBUG(std::cerr << "********** REWRITE MACHINE CODE **********\n"); + DEBUG(std::cerr << "********** Function: " + << mf_.getFunction()->getName() << '\n'); + } + + void eliminateVirtRegs() { + for (MachineFunction::iterator mbbi = mf_.begin(), + mbbe = mf_.end(); mbbi != mbbe; ++mbbi) { + // clear map and dirty flag + p2vMap_.assign(p2vMap_.size(), 0); + dirty_.assign(dirty_.size(), false); + DEBUG(std::cerr << mbbi->getBasicBlock()->getName() << ":\n"); + eliminateVirtRegsInMbb(*mbbi); + } + } + + private: + void vacateJustPhysReg(MachineBasicBlock& mbb, + MachineBasicBlock::iterator mii, + unsigned physReg) { + unsigned virtReg = p2vMap_[physReg]; + if (dirty_[physReg] && vrm_.hasStackSlot(virtReg)) { + mri_.storeRegToStackSlot(mbb, mii, physReg, + vrm_.getStackSlot(virtReg), + mri_.getRegClass(physReg)); + ++numStores; + DEBUG(std::cerr << "*\t"; prior(mii)->print(std::cerr, tm_)); + } + p2vMap_[physReg] = 0; + dirty_[physReg] = false; + } + + void vacatePhysReg(MachineBasicBlock& mbb, + MachineBasicBlock::iterator mii, + unsigned physReg) { + vacateJustPhysReg(mbb, mii, physReg); + for (const unsigned* as = mri_.getAliasSet(physReg); *as; ++as) + vacateJustPhysReg(mbb, mii, *as); + } + + void handleUse(MachineBasicBlock& mbb, + MachineBasicBlock::iterator mii, + unsigned virtReg, + unsigned physReg) { + // check if we are replacing a previous mapping + if (p2vMap_[physReg] != virtReg) { + vacatePhysReg(mbb, mii, physReg); + p2vMap_[physReg] = virtReg; + // load if necessary + if (vrm_.hasStackSlot(virtReg)) { + mri_.loadRegFromStackSlot(mbb, mii, physReg, + vrm_.getStackSlot(virtReg), + mri_.getRegClass(physReg)); + ++numLoads; + DEBUG(std::cerr << "*\t"; prior(mii)->print(std::cerr,tm_)); + } + } + } + + void handleDef(MachineBasicBlock& mbb, + MachineBasicBlock::iterator mii, + unsigned virtReg, + unsigned physReg) { + // check if we are replacing a previous mapping + if (p2vMap_[physReg] != virtReg) + vacatePhysReg(mbb, mii, physReg); + + p2vMap_[physReg] = virtReg; + dirty_[physReg] = true; + } + + void eliminateVirtRegsInMbb(MachineBasicBlock& mbb) { + for (MachineBasicBlock::iterator mii = mbb.begin(), + mie = mbb.end(); mii != mie; ++mii) { + // rewrite all used operands + for (unsigned i = 0, e = mii->getNumOperands(); i != e; ++i) { + MachineOperand& op = mii->getOperand(i); + if (op.isRegister() && op.isUse() && + MRegisterInfo::isVirtualRegister(op.getReg())) { + unsigned physReg = vrm_.getPhys(op.getReg()); + handleUse(mbb, mii, op.getReg(), physReg); + mii->SetMachineOperandReg(i, physReg); + // mark as dirty if this is def&use + if (op.isDef()) dirty_[physReg] = true; + } + } + + // spill implicit defs + const TargetInstrDescriptor& tid =tii_.get(mii->getOpcode()); + for (const unsigned* id = tid.ImplicitDefs; *id; ++id) + vacatePhysReg(mbb, mii, *id); + + // rewrite def operands (def&use was handled with the + // uses so don't check for those here) + for (unsigned i = 0, e = mii->getNumOperands(); i != e; ++i) { + MachineOperand& op = mii->getOperand(i); + if (op.isRegister() && !op.isUse()) + if (MRegisterInfo::isPhysicalRegister(op.getReg())) + vacatePhysReg(mbb, mii, op.getReg()); + else { + unsigned physReg = vrm_.getPhys(op.getReg()); + handleDef(mbb, mii, op.getReg(), physReg); + mii->SetMachineOperandReg(i, physReg); + } + } + + DEBUG(std::cerr << '\t'; mii->print(std::cerr, tm_)); + } + + for (unsigned i = 1, e = p2vMap_.size(); i != e; ++i) + vacateJustPhysReg(mbb, mbb.getFirstTerminator(), i); + + } + }; +} + + +void llvm::eliminateVirtRegs(MachineFunction& mf, const VirtRegMap& vrm) +{ + Spiller(mf, vrm).eliminateVirtRegs(); } Index: llvm/lib/CodeGen/RegAllocLinearScan.cpp diff -u llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.63 llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.64 --- llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.63 Mon Feb 23 17:47:10 2004 +++ llvm/lib/CodeGen/RegAllocLinearScan.cpp Tue Feb 24 02:58:30 2004 @@ -10,6 +10,7 @@ // This file implements a linear scan register allocator. // //===----------------------------------------------------------------------===// + #define DEBUG_TYPE "regalloc" #include "llvm/Function.h" #include "llvm/CodeGen/LiveVariables.h" @@ -18,28 +19,21 @@ #include "llvm/CodeGen/Passes.h" #include "llvm/CodeGen/SSARegMap.h" #include "llvm/Target/MRegisterInfo.h" -#include "llvm/Target/TargetInstrInfo.h" #include "llvm/Target/TargetMachine.h" -#include "llvm/Support/CFG.h" #include "Support/Debug.h" -#include "Support/DepthFirstIterator.h" -#include "Support/Statistic.h" -#include "Support/STLExtras.h" #include "LiveIntervals.h" #include "PhysRegTracker.h" #include "VirtRegMap.h" #include +#include + using namespace llvm; namespace { - Statistic<> numStores("ra-linearscan", "Number of stores added"); - Statistic<> numLoads ("ra-linearscan", "Number of loads added"); - class RA : public MachineFunctionPass { private: MachineFunction* mf_; const TargetMachine* tm_; - const TargetInstrInfo* tii_; const MRegisterInfo* mri_; LiveIntervals* li_; typedef std::list IntervalPtrs; @@ -48,8 +42,6 @@ std::auto_ptr prt_; std::auto_ptr vrm_; - int instrAdded_; - typedef std::vector SpillWeights; SpillWeights spillWeights_; @@ -70,6 +62,9 @@ void releaseMemory(); private: + /// linearScan - the linear scan algorithm + void linearScan(); + /// initIntervalSets - initializa the four interval sets: /// unhandled, fixed, active and inactive void initIntervalSets(LiveIntervals::Intervals& li); @@ -90,10 +85,6 @@ /// is available, or spill. void assignRegOrStackSlotAtInterval(IntervalPtrs::value_type cur); - /// addSpillCode - adds spill code for interval. The interval - /// must be modified by LiveIntervals::updateIntervalForSpill. - void addSpillCode(IntervalPtrs::value_type li, int slot); - /// /// register handling helpers /// @@ -152,7 +143,6 @@ bool RA::runOnMachineFunction(MachineFunction &fn) { mf_ = &fn; tm_ = &fn.getTarget(); - tii_ = &tm_->getInstrInfo(); mri_ = tm_->getRegisterInfo(); li_ = &getAnalysis(); if (!prt_.get()) prt_.reset(new PhysRegTracker(*mri_)); @@ -160,6 +150,15 @@ initIntervalSets(li_->getIntervals()); + linearScan(); + + eliminateVirtRegs(*mf_, *vrm_); + + return true; +} + +void RA::linearScan() +{ // linear scan algorithm DEBUG(std::cerr << "********** LINEAR SCAN **********\n"); DEBUG(std::cerr << "********** Function: " @@ -223,63 +222,6 @@ } DEBUG(std::cerr << *vrm_); - - DEBUG(std::cerr << "********** REWRITE MACHINE CODE **********\n"); - DEBUG(std::cerr << "********** Function: " - << mf_->getFunction()->getName() << '\n'); - - for (MachineFunction::iterator mbbi = mf_->begin(), mbbe = mf_->end(); - mbbi != mbbe; ++mbbi) { - instrAdded_ = 0; - - for (MachineBasicBlock::iterator mii = mbbi->begin(), mie = mbbi->end(); - mii != mie; ++mii) { - DEBUG( - std::cerr << '['; - unsigned index = li_->getInstructionIndex(mii); - if (index == std::numeric_limits::max()) - std::cerr << '*'; - else - std::cerr << index; - std::cerr << "]\t"; - mii->print(std::cerr, *tm_)); - - // use our current mapping and actually replace every - // virtual register with its allocated physical registers - DEBUG(std::cerr << "\t"); - for (unsigned i = 0, e = mii->getNumOperands(); - i != e; ++i) { - MachineOperand& op = mii->getOperand(i); - if (op.isRegister() && - MRegisterInfo::isVirtualRegister(op.getReg())) { - unsigned virtReg = op.getReg(); - unsigned physReg = vrm_->getPhys(virtReg); - DEBUG(std::cerr << "\t[reg" << virtReg - << " -> " << mri_->getName(physReg) << ']'); - mii->SetMachineOperandReg(i, physReg); - } - } - DEBUG(std::cerr << '\n'); - } - } - - DEBUG(std::cerr << "********** MACHINEINSTRS **********\n"); - DEBUG( - for (MachineFunction::iterator mbbi = mf_->begin(), mbbe = mf_->end(); - mbbi != mbbe; ++mbbi) { - std::cerr << mbbi->getBasicBlock()->getName() << ":\n"; - for (MachineBasicBlock::iterator mii = mbbi->begin(), - mie = mbbi->end(); mii != mie; ++mii) { - unsigned index = li_->getInstructionIndex(mii); - if (index == std::numeric_limits::max()) - std::cerr << "*\t"; - else - std::cerr << index << '\t'; - mii->print(std::cerr, *tm_); - } - }); - - return true; } void RA::initIntervalSets(LiveIntervals::Intervals& li) @@ -450,7 +392,6 @@ // sorted on earliest start point and we may have changed our // start point. if (!cur->empty()) { - addSpillCode(cur, slot); IntervalPtrs::iterator it = unhandled_.begin(); while (it != unhandled_.end() && (*it)->start() < cur->start()) ++it; @@ -484,7 +425,6 @@ earliestStart = std::min(earliestStart, (*i)->start()); int slot = vrm_->assignVirt2StackSlot((*i)->reg); li_->updateSpilledInterval(**i, slot); - addSpillCode(*i, slot); } } for (IntervalPtrs::iterator i = inactive_.begin(); @@ -497,7 +437,6 @@ earliestStart = std::min(earliestStart, (*i)->start()); int slot = vrm_->assignVirt2StackSlot((*i)->reg); li_->updateSpilledInterval(**i, slot); - addSpillCode(*i, slot); } } @@ -576,71 +515,6 @@ prt_->addRegUse((*i)->reg); else prt_->addRegUse(vrm_->getPhys((*i)->reg)); - } - } -} - -void RA::addSpillCode(IntervalPtrs::value_type li, int slot) -{ - // We scan the instructions corresponding to each range. We load - // when we have a use and spill at end of basic blocks or end of - // ranges only if the register was modified. - const TargetRegisterClass* rc = mf_->getSSARegMap()->getRegClass(li->reg); - - for (LiveIntervals::Interval::Ranges::iterator i = li->ranges.begin(), - e = li->ranges.end(); i != e; ++i) { - unsigned index = i->first; - unsigned end = i->second; - - bool loaded = false; - - // skip deleted instructions. getInstructionFromIndex returns - // null if the instruction was deleted (because of coalescing - // for example) - while (!li_->getInstructionFromIndex(index)) - index += LiveIntervals::InstrSlots::NUM; - MachineBasicBlock::iterator mi = li_->getInstructionFromIndex(index); - MachineBasicBlock* mbb = mi->getParent(); - assert(mbb && "machine instruction not bound to basic block"); - - for (; index < end; index += LiveIntervals::InstrSlots::NUM) { - // ignore deleted instructions - while (!li_->getInstructionFromIndex(index)) index += 2; - mi = li_->getInstructionFromIndex(index); - DEBUG(std::cerr << "\t\t\t\texamining: \t\t\t\t\t" - << LiveIntervals::getBaseIndex(index) << '\t'; - mi->print(std::cerr, *tm_)); - - // if it is used in this instruction load it - for (unsigned i = 0; i < mi->getNumOperands(); ++i) { - MachineOperand& mop = mi->getOperand(i); - if (mop.isRegister() && mop.getReg() == li->reg && - mop.isUse() && !loaded) { - loaded = true; - mri_->loadRegFromStackSlot(*mbb, mi, li->reg, slot, rc); - ++numLoads; - DEBUG(std::cerr << "\t\t\t\tadded load for reg" << li->reg - << " from ss#" << slot << " before: \t" - << LiveIntervals::getBaseIndex(index) << '\t'; - mi->print(std::cerr, *tm_)); - } - } - - // if it is defined in this instruction mark as dirty - for (unsigned i = 0; i < mi->getNumOperands(); ++i) { - MachineOperand& mop = mi->getOperand(i); - if (mop.isRegister() && mop.getReg() == li->reg && - mop.isDef()) { - loaded = true; - - mri_->storeRegToStackSlot(*mbb, next(mi), li->reg, slot,rc); - ++numStores; - DEBUG(std::cerr << "\t\t\t\tadded store for reg" << li->reg - << " to ss#" << slot << " after: \t\t" - << LiveIntervals::getBaseIndex(index) << " \t"; - mi->print(std::cerr, *tm_)); - } - } } } } From lattner at cs.uiuc.edu Tue Feb 24 10:10:04 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Feb 24 10:10:04 2004 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Utils/SimplifyCFG.cpp Message-ID: <200402241609.KAA09997@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Utils: SimplifyCFG.cpp updated: 1.26 -> 1.27 --- Log message: If a block is made dead, make sure to promptly remove it. --- Diffs of the changes: (+8 -0) Index: llvm/lib/Transforms/Utils/SimplifyCFG.cpp diff -u llvm/lib/Transforms/Utils/SimplifyCFG.cpp:1.26 llvm/lib/Transforms/Utils/SimplifyCFG.cpp:1.27 --- llvm/lib/Transforms/Utils/SimplifyCFG.cpp:1.26 Tue Feb 24 01:23:58 2004 +++ llvm/lib/Transforms/Utils/SimplifyCFG.cpp Tue Feb 24 10:09:21 2004 @@ -512,6 +512,14 @@ Preds.pop_back(); } + + // If this block is now dead, remove it. + if (pred_begin(BB) == pred_end(BB)) { + // We know there are no successors, so just nuke the block. + M->getBasicBlockList().erase(BB); + return true; + } + } else if (SwitchInst *SI = dyn_cast(BB->begin())) { // If the only instruction in this block is a switch instruction, see if we // can fold the switch instruction into a switch in a predecessor block. From criswell at cs.uiuc.edu Tue Feb 24 10:15:01 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Tue Feb 24 10:15:01 2004 Subject: [llvm-commits] CVS: llvm/docs/LangRef.html Message-ID: <200402241614.KAA27692@choi.cs.uiuc.edu> Changes in directory llvm/docs: LangRef.html updated: 1.49 -> 1.50 --- Log message: Fixed minor typos. --- Diffs of the changes: (+3 -3) Index: llvm/docs/LangRef.html diff -u llvm/docs/LangRef.html:1.49 llvm/docs/LangRef.html:1.50 --- llvm/docs/LangRef.html:1.49 Mon Feb 23 22:54:45 2004 +++ llvm/docs/LangRef.html Tue Feb 24 10:13:56 2004 @@ -1283,8 +1283,8 @@

    The 'malloc' instruction allocates memory from the system heap and returns a pointer to it.

    Arguments:
    -

    The the 'malloc' instruction allocates sizeof(<type>)*NumElements -bytes of memory from the operating system, and returns a pointer of the +

    The 'malloc' instruction allocates sizeof(<type>)*NumElements +bytes of memory from the operating system and returns a pointer of the appropriate type to the program. The second form of the instruction is a shorter version of the first instruction that defaults to allocating one element.

    @@ -2053,6 +2053,6 @@ +Last modified: $Date: 2004/02/24 16:13:56 $ From lattner at cs.uiuc.edu Tue Feb 24 12:11:02 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Feb 24 12:11:02 2004 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200402241810.MAA08249@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: InstructionCombining.cpp updated: 1.164 -> 1.165 --- Log message: Fix a faulty optimization on FP values --- Diffs of the changes: (+2 -1) Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.164 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.165 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.164 Mon Feb 23 15:46:58 2004 +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Tue Feb 24 12:10:14 2004 @@ -441,7 +441,8 @@ Value *LHS = I.getOperand(0), *RHS = I.getOperand(1); // X + 0 --> X - if (RHS == Constant::getNullValue(I.getType())) + if (!I.getType()->isFloatingPoint() && // -0 + +0 = +0, so it's not a noop + RHS == Constant::getNullValue(I.getType())) return ReplaceInstUsesWith(I, LHS); // X + X --> X << 1 From lattner at cs.uiuc.edu Tue Feb 24 12:21:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Feb 24 12:21:01 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/Makefile.programs Message-ID: <200402241820.MAA24784@zion.cs.uiuc.edu> Changes in directory llvm/test/Programs: Makefile.programs updated: 1.120 -> 1.121 --- Log message: Add a couple of missing dependencies Remove the Output/%.noopt-linked.bc target, using linked.rbc instead --- Diffs of the changes: (+4 -9) Index: llvm/test/Programs/Makefile.programs diff -u llvm/test/Programs/Makefile.programs:1.120 llvm/test/Programs/Makefile.programs:1.121 --- llvm/test/Programs/Makefile.programs:1.120 Fri Feb 13 17:39:16 2004 +++ llvm/test/Programs/Makefile.programs Tue Feb 24 12:19:44 2004 @@ -209,11 +209,6 @@ $(LOPT) -mstrip $< -o $@ -f -$(PROGRAMS_TO_TEST:%=Output/%.noopt-linked.bc): \ -Output/%.noopt-linked.bc: Output/%.linked.rll $(LGCCAS) - $(LGCCAS) $(STATS) -disable-opt $< -o $@ - - ifndef DISABLE_FOR_LLVM_PROGRAMS # Rule to produce final program bytecode file from linked, optimized, bytecode. # Link the program to the libraries it uses, then perform postlink @@ -236,19 +231,19 @@ endif $(PROGRAMS_TO_TEST:%=Output/%.noopt-llvm.bc): \ -Output/%.noopt-llvm.bc: Output/%.noopt-linked.bc $(LGCCLDPROG) +Output/%.noopt-llvm.bc: Output/%.linked.rbc $(LGCCLDPROG) $(LGCCLD) -disable-opt $(STATS) $< -lc $(LIBS) -lcrtend -o Output/$*.noopt-llvm $(PROGRAMS_TO_TEST:%=Output/%.noopt-llvm): \ -Output/%.noopt-llvm: Output/%.noopt-linked.bc $(LGCCLDPROG) +Output/%.noopt-llvm: Output/%.linked.rbc $(LGCCLDPROG) $(LGCCLD) -disable-opt $(STATS) $< -lc $(LIBS) -lcrtend -o Output/$*.noopt-llvm endif # ifndef DISABLE_FOR_LLVM_PROGRAMS # Targets to get the pass arguments that gccas and gccld are using... -Output/gccas-pass-args: $(LGCCAS) +Output/gccas-pass-args: $(LGCCAS) Output/.dir $(LGCCAS) /dev/null -o /dev/null -debug-pass=Arguments > $@.1 2>&1 sed 's/Pass Arguments: //' < $@.1 > $@ -Output/gccld-pass-args: $(LGCCLDPROG) +Output/gccld-pass-args: $(LGCCLDPROG) Output/.dir $(LLVMAS) < /dev/null > Output/gccld.test.bc $(LGCCLD) -disable-inlining Output/gccld.test.bc -o Output/gccld.test-out -debug-pass=Arguments > $@.1 2>&1 sed 's/Pass Arguments: //' < $@.1 > $@ From lattner at cs.uiuc.edu Tue Feb 24 12:35:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Feb 24 12:35:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/CBackend/Writer.cpp Message-ID: <200402241834.MAA06650@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/CBackend: Writer.cpp updated: 1.163 -> 1.164 --- Log message: Fix some unexpected fallout from the config.h changes. Because the CBE no longer was getting this #include, it always fell back on the less precise floating point initializer values, causing some testsuite failures. --- Diffs of the changes: (+1 -0) Index: llvm/lib/Target/CBackend/Writer.cpp diff -u llvm/lib/Target/CBackend/Writer.cpp:1.163 llvm/lib/Target/CBackend/Writer.cpp:1.164 --- llvm/lib/Target/CBackend/Writer.cpp:1.163 Thu Feb 19 23:49:22 2004 +++ llvm/lib/Target/CBackend/Writer.cpp Tue Feb 24 12:34:10 2004 @@ -31,6 +31,7 @@ #include "llvm/Support/InstVisitor.h" #include "llvm/Support/Mangler.h" #include "Support/StringExtras.h" +#include "Config/config.h" #include #include using namespace llvm; From gaeke at cs.uiuc.edu Tue Feb 24 13:46:01 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Tue Feb 24 13:46:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/Sparc/RegAlloc/PhyRegAlloc.cpp Message-ID: <200402241945.NAA21038@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/Sparc/RegAlloc: PhyRegAlloc.cpp updated: 1.137 -> 1.138 --- Log message: FunctionLiveVarInfo.h moved: include/llvm/CodeGen -> lib/Target/Sparc/LiveVar --- Diffs of the changes: (+1 -1) Index: llvm/lib/Target/Sparc/RegAlloc/PhyRegAlloc.cpp diff -u llvm/lib/Target/Sparc/RegAlloc/PhyRegAlloc.cpp:1.137 llvm/lib/Target/Sparc/RegAlloc/PhyRegAlloc.cpp:1.138 --- llvm/lib/Target/Sparc/RegAlloc/PhyRegAlloc.cpp:1.137 Fri Feb 13 19:18:33 2004 +++ llvm/lib/Target/Sparc/RegAlloc/PhyRegAlloc.cpp Tue Feb 24 13:45:45 2004 @@ -25,13 +25,13 @@ #include "PhyRegAlloc.h" #include "RegAllocCommon.h" #include "RegClass.h" +#include "../LiveVar/FunctionLiveVarInfo.h" #include "llvm/Constants.h" #include "llvm/DerivedTypes.h" #include "llvm/iOther.h" #include "llvm/Module.h" #include "llvm/Type.h" #include "llvm/Analysis/LoopInfo.h" -#include "llvm/CodeGen/FunctionLiveVarInfo.h" #include "llvm/CodeGen/InstrSelection.h" #include "llvm/CodeGen/MachineCodeForInstruction.h" #include "llvm/CodeGen/MachineFunction.h" From gaeke at cs.uiuc.edu Tue Feb 24 13:46:35 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Tue Feb 24 13:46:35 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/InstrSched/InstrScheduling.cpp SchedPriorities.cpp Message-ID: <200402241945.NAA21024@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/InstrSched: InstrScheduling.cpp updated: 1.66 -> 1.67 SchedPriorities.cpp updated: 1.30 -> 1.31 --- Log message: FunctionLiveVarInfo.h moved: include/llvm/CodeGen -> lib/Target/Sparc/LiveVar --- Diffs of the changes: (+2 -2) Index: llvm/lib/CodeGen/InstrSched/InstrScheduling.cpp diff -u llvm/lib/CodeGen/InstrSched/InstrScheduling.cpp:1.66 llvm/lib/CodeGen/InstrSched/InstrScheduling.cpp:1.67 --- llvm/lib/CodeGen/InstrSched/InstrScheduling.cpp:1.66 Wed Feb 18 10:38:18 2004 +++ llvm/lib/CodeGen/InstrSched/InstrScheduling.cpp Tue Feb 24 13:45:44 2004 @@ -16,7 +16,7 @@ #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineCodeForInstruction.h" #include "llvm/CodeGen/MachineFunction.h" -#include "llvm/CodeGen/FunctionLiveVarInfo.h" +#include "../../Target/Sparc/LiveVar/FunctionLiveVarInfo.h" #include "llvm/Target/TargetMachine.h" #include "llvm/BasicBlock.h" #include "Support/CommandLine.h" Index: llvm/lib/CodeGen/InstrSched/SchedPriorities.cpp diff -u llvm/lib/CodeGen/InstrSched/SchedPriorities.cpp:1.30 llvm/lib/CodeGen/InstrSched/SchedPriorities.cpp:1.31 --- llvm/lib/CodeGen/InstrSched/SchedPriorities.cpp:1.30 Wed Feb 11 19:34:05 2004 +++ llvm/lib/CodeGen/InstrSched/SchedPriorities.cpp Tue Feb 24 13:45:44 2004 @@ -18,7 +18,7 @@ //===----------------------------------------------------------------------===// #include "SchedPriorities.h" -#include "llvm/CodeGen/FunctionLiveVarInfo.h" +#include "../../Target/Sparc/LiveVar/FunctionLiveVarInfo.h" #include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/Support/CFG.h" #include "Support/PostOrderIterator.h" From gaeke at cs.uiuc.edu Tue Feb 24 13:47:06 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Tue Feb 24 13:47:06 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/Sparc/LiveVar/FunctionLiveVarInfo.h BBLiveVar.cpp FunctionLiveVarInfo.cpp Message-ID: <200402241945.NAA21033@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/Sparc/LiveVar: FunctionLiveVarInfo.h added (r1.1) BBLiveVar.cpp updated: 1.44 -> 1.45 FunctionLiveVarInfo.cpp updated: 1.53 -> 1.54 --- Log message: FunctionLiveVarInfo.h moved: include/llvm/CodeGen -> lib/Target/Sparc/LiveVar --- Diffs of the changes: (+113 -2) Index: llvm/lib/Target/Sparc/LiveVar/FunctionLiveVarInfo.h diff -c /dev/null llvm/lib/Target/Sparc/LiveVar/FunctionLiveVarInfo.h:1.1 *** /dev/null Tue Feb 24 13:45:55 2004 --- llvm/lib/Target/Sparc/LiveVar/FunctionLiveVarInfo.h Tue Feb 24 13:45:45 2004 *************** *** 0 **** --- 1,111 ---- + //===-- CodeGen/FunctionLiveVarInfo.h - LiveVar Analysis --------*- C++ -*-===// + // + // 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 is the interface for live variable info of a function that is required + // by any other part of the compiler + // + // After the analysis, getInSetOfBB or getOutSetofBB can be called to get + // live var info of a BB. + // + // The live var set before an instruction can be obtained in 2 ways: + // + // 1. Use the method getLiveVarSetAfterInst(Instruction *) to get the LV Info + // just after an instruction. (also exists getLiveVarSetBeforeInst(..)) + // + // This function caluclates the LV info for a BB only once and caches that + // info. If the cache does not contain the LV info of the instruction, it + // calculates the LV info for the whole BB and caches them. + // + // Getting liveVar info this way uses more memory since, LV info should be + // cached. However, if you need LV info of nearly all the instructions of a + // BB, this is the best and simplest interfrace. + // + // 2. Use the OutSet and applyTranferFuncForInst(const Instruction *const Inst) + // declared in LiveVarSet and traverse the instructions of a basic block in + // reverse (using const_reverse_iterator in the BB class). + // + //===----------------------------------------------------------------------===// + + #ifndef FUNCTION_LIVE_VAR_INFO_H + #define FUNCTION_LIVE_VAR_INFO_H + + #include "Support/hash_map" + #include "llvm/Pass.h" + #include "llvm/CodeGen/ValueSet.h" + + namespace llvm { + + class BBLiveVar; + class MachineInstr; + + class FunctionLiveVarInfo : public FunctionPass { + // Machine Instr to LiveVarSet Map for providing LVset BEFORE each inst + // These sets are owned by this map and will be freed in releaseMemory(). + hash_map MInst2LVSetBI; + + // Machine Instr to LiveVarSet Map for providing LVset AFTER each inst. + // These sets are just pointers to sets in MInst2LVSetBI or BBLiveVar. + hash_map MInst2LVSetAI; + + hash_map BBLiveVarInfo; + + // Stored Function that the data is computed with respect to + const Function *M; + + // --------- private methods ----------------------------------------- + + // constructs BBLiveVars and init Def and In sets + void constructBBs(const Function *F); + + // do one backward pass over the CFG + bool doSingleBackwardPass(const Function *F, unsigned int iter); + + // calculates live var sets for instructions in a BB + void calcLiveVarSetsForBB(const BasicBlock *BB); + + public: + // --------- Implement the FunctionPass interface ---------------------- + + // runOnFunction - Perform analysis, update internal data structures. + virtual bool runOnFunction(Function &F); + + // releaseMemory - After LiveVariable analysis has been used, forget! + virtual void releaseMemory(); + + // getAnalysisUsage - Provide self! + virtual void getAnalysisUsage(AnalysisUsage &AU) const { + AU.setPreservesAll(); + } + + // --------- Functions to access analysis results ------------------- + + // get OutSet of a BB + const ValueSet &getOutSetOfBB(const BasicBlock *BB) const; + ValueSet &getOutSetOfBB(const BasicBlock *BB) ; + + // get InSet of a BB + const ValueSet &getInSetOfBB(const BasicBlock *BB) const; + ValueSet &getInSetOfBB(const BasicBlock *BB) ; + + // gets the Live var set BEFORE an instruction. + // if BB is specified and the live var set has not yet been computed, + // it will be computed on demand. + const ValueSet &getLiveVarSetBeforeMInst(const MachineInstr *MI, + const BasicBlock *BB = 0); + + // gets the Live var set AFTER an instruction + // if BB is specified and the live var set has not yet been computed, + // it will be computed on demand. + const ValueSet &getLiveVarSetAfterMInst(const MachineInstr *MI, + const BasicBlock *BB = 0); + }; + + } // End llvm namespace + + #endif Index: llvm/lib/Target/Sparc/LiveVar/BBLiveVar.cpp diff -u llvm/lib/Target/Sparc/LiveVar/BBLiveVar.cpp:1.44 llvm/lib/Target/Sparc/LiveVar/BBLiveVar.cpp:1.45 --- llvm/lib/Target/Sparc/LiveVar/BBLiveVar.cpp:1.44 Wed Feb 11 20:27:09 2004 +++ llvm/lib/Target/Sparc/LiveVar/BBLiveVar.cpp Tue Feb 24 13:45:45 2004 @@ -12,7 +12,7 @@ //===----------------------------------------------------------------------===// #include "BBLiveVar.h" -#include "llvm/CodeGen/FunctionLiveVarInfo.h" +#include "FunctionLiveVarInfo.h" #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/Support/CFG.h" Index: llvm/lib/Target/Sparc/LiveVar/FunctionLiveVarInfo.cpp diff -u llvm/lib/Target/Sparc/LiveVar/FunctionLiveVarInfo.cpp:1.53 llvm/lib/Target/Sparc/LiveVar/FunctionLiveVarInfo.cpp:1.54 --- llvm/lib/Target/Sparc/LiveVar/FunctionLiveVarInfo.cpp:1.53 Wed Feb 11 20:27:09 2004 +++ llvm/lib/Target/Sparc/LiveVar/FunctionLiveVarInfo.cpp Tue Feb 24 13:45:45 2004 @@ -12,7 +12,7 @@ // //===----------------------------------------------------------------------===// -#include "llvm/CodeGen/FunctionLiveVarInfo.h" +#include "FunctionLiveVarInfo.h" #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/Target/TargetMachine.h" From gaeke at cs.uiuc.edu Tue Feb 24 13:48:01 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Tue Feb 24 13:48:01 2004 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/FunctionLiveVarInfo.h Message-ID: <200402241946.NAA21070@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: FunctionLiveVarInfo.h (r1.32) removed --- Log message: FunctionLiveVarInfo.h moved: include/llvm/CodeGen -> lib/Target/Sparc/LiveVar --- Diffs of the changes: (+0 -0) From gaeke at cs.uiuc.edu Tue Feb 24 14:43:01 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Tue Feb 24 14:43:01 2004 Subject: [llvm-commits] CVS: reopt/lib/Inst/lib/Phase1/Phase1.cpp PrimInfo.cpp Message-ID: <200402242042.OAA15174@kain.cs.uiuc.edu> Changes in directory reopt/lib/Inst/lib/Phase1: Phase1.cpp updated: 1.30 -> 1.31 PrimInfo.cpp updated: 1.18 -> 1.19 --- Log message: Fix ConstantAggregateZero bit rot --- Diffs of the changes: (+4 -5) Index: reopt/lib/Inst/lib/Phase1/Phase1.cpp diff -u reopt/lib/Inst/lib/Phase1/Phase1.cpp:1.30 reopt/lib/Inst/lib/Phase1/Phase1.cpp:1.31 --- reopt/lib/Inst/lib/Phase1/Phase1.cpp:1.30 Wed Nov 19 14:49:53 2003 +++ reopt/lib/Inst/lib/Phase1/Phase1.cpp Tue Feb 24 14:42:03 2004 @@ -256,10 +256,9 @@ // Make the GBT itself, and the corresponding global variable. ArrayType* gbtType = ArrayType::get(PrimInfo::getStructType(), gbtElems.size()); - ConstantArray* gbtContents = ConstantArray::get(gbtType, gbtElems); - GlobalVariable* gbt = new GlobalVariable(gbtType, true, - GlobalVariable::ExternalLinkage, - gbtContents, "ppGBT", m_module); + GlobalVariable* gbt = + new GlobalVariable(gbtType, true, GlobalVariable::ExternalLinkage, + ConstantArray::get(gbtType, gbtElems), "ppGBT", m_module); // Record the GBT size ConstantUInt* size = ConstantUInt::get(Type::UIntTy, gbtElems.size()); Index: reopt/lib/Inst/lib/Phase1/PrimInfo.cpp diff -u reopt/lib/Inst/lib/Phase1/PrimInfo.cpp:1.18 reopt/lib/Inst/lib/Phase1/PrimInfo.cpp:1.19 --- reopt/lib/Inst/lib/Phase1/PrimInfo.cpp:1.18 Wed Nov 19 14:49:53 2003 +++ reopt/lib/Inst/lib/Phase1/PrimInfo.cpp Tue Feb 24 14:42:03 2004 @@ -78,7 +78,7 @@ module->addTypeName("PrimInfo", sm_structType); } -static ConstantStruct* makeConstStruct(StructType* st, +static Constant* makeConstStruct(StructType* st, unsigned siteID, unsigned gbtType, GlobalVariable* loadVar) From lattner at cs.uiuc.edu Tue Feb 24 15:03:00 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Feb 24 15:03:00 2004 Subject: [llvm-commits] CVS: poolalloc/test/TEST.poolalloc.Makefile Message-ID: <200402242102.PAA04376@zion.cs.uiuc.edu> Changes in directory poolalloc/test: TEST.poolalloc.Makefile updated: 1.13 -> 1.14 --- Log message: Correct dependencies --- Diffs of the changes: (+1 -1) Index: poolalloc/test/TEST.poolalloc.Makefile diff -u poolalloc/test/TEST.poolalloc.Makefile:1.13 poolalloc/test/TEST.poolalloc.Makefile:1.14 --- poolalloc/test/TEST.poolalloc.Makefile:1.13 Sat Feb 21 22:09:24 2004 +++ poolalloc/test/TEST.poolalloc.Makefile Tue Feb 24 15:02:05 2004 @@ -100,4 +100,4 @@ @echo "---------------------------------------------------------------" @cat $< -REPORT_DEPENDENCIES := $(PA_RT_O) $(PA_SO) $(PROGRAMS_TO_TEST:%=Output/%.llvm.bc) +REPORT_DEPENDENCIES := $(PA_RT_O) $(PA_SO) $(PROGRAMS_TO_TEST:%=Output/%.llvm.bc) $(LLC) From lattner at cs.uiuc.edu Tue Feb 24 15:04:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Feb 24 15:04:01 2004 Subject: [llvm-commits] CVS: poolalloc/runtime/FL2Allocator/FreeListAllocator.cpp Message-ID: <200402242103.PAA05155@zion.cs.uiuc.edu> Changes in directory poolalloc/runtime/FL2Allocator: FreeListAllocator.cpp updated: 1.3 -> 1.4 --- Log message: Add these two lines: + if (LAH->Next) + LAH->Next->Prev = &LAH->Next; Which fix a really nasty memory corruption problem, and makes pcompress2 work! :) --- Diffs of the changes: (+13 -0) Index: poolalloc/runtime/FL2Allocator/FreeListAllocator.cpp diff -u poolalloc/runtime/FL2Allocator/FreeListAllocator.cpp:1.3 poolalloc/runtime/FL2Allocator/FreeListAllocator.cpp:1.4 --- poolalloc/runtime/FL2Allocator/FreeListAllocator.cpp:1.3 Thu Feb 19 23:25:48 2004 +++ poolalloc/runtime/FL2Allocator/FreeListAllocator.cpp Tue Feb 24 15:02:56 2004 @@ -74,6 +74,8 @@ Pool->Slabs = 0; Pool->FreeNodeList = 0; Pool->LargeArrays = 0; + + //printf("init pool 0x%X\n", Pool); } // pooldestroy - Release all memory allocated for a pool @@ -81,6 +83,8 @@ void pooldestroy(PoolTy *Pool) { assert(Pool && "Null pool pointer passed in to pooldestroy!\n"); + //printf("destroy pool 0x%X\n", Pool); + // Free all allocated slabs. PoolSlab *PS = Pool->Slabs; while (PS) { @@ -117,10 +121,12 @@ NextNodes->NormalHeader.Next = FirstNode->NormalHeader.Next; Pool->FreeNodeList = NextNodes; FirstNode->NormalHeader.ObjectSize = NumBytes; + //printf("alloc 0x%X -> 0x%X\n", Pool, &FirstNode->NormalHeader+1); return &FirstNode->NormalHeader+1; } else if (FirstNodeSize > NumBytes) { Pool->FreeNodeList = FirstNode->NormalHeader.Next; // Unlink FirstNode->NormalHeader.ObjectSize = FirstNodeSize; + //printf("alloc 0x%X -> 0x%X\n", Pool, &FirstNode->NormalHeader+1); return &FirstNode->NormalHeader+1; } } @@ -148,10 +154,12 @@ NextNodes->NormalHeader.Next = FNN->NormalHeader.Next; *FN = NextNodes; FNN->NormalHeader.ObjectSize = NumBytes; + //printf("alloc 0x%X -> 0x%X\n", Pool, &FNN->NormalHeader+1); return &FNN->NormalHeader+1; } else { *FN = FNN->NormalHeader.Next; // Unlink FNN->NormalHeader.ObjectSize = FNN->Size; + //printf("alloc 0x%X -> 0x%X\n", Pool, &FNN->NormalHeader+1); return &FNN->NormalHeader+1; } } @@ -167,9 +175,12 @@ LargeArrayHeader *LAH = (LargeArrayHeader*)malloc(sizeof(LargeArrayHeader) + NumBytes); LAH->Next = Pool->LargeArrays; + if (LAH->Next) + LAH->Next->Prev = &LAH->Next; Pool->LargeArrays = LAH; LAH->Prev = &Pool->LargeArrays; LAH->Marker = ~0U; + //printf("alloc large 0x%X -> 0x%X\n", Pool, LAH+1); return LAH+1; } @@ -177,6 +188,8 @@ void poolfree(PoolTy *Pool, void *Node) { assert(Pool && "Null pool pointer passed in to poolfree!\n"); if (Node == 0) return; + + //printf("free 0x%X <- 0x%X\n", Pool, Node); // Check to see how many elements were allocated to this node... FreedNodeHeader *FNH = (FreedNodeHeader*)((char*)Node-sizeof(NodeHeader)); From alkis at cs.uiuc.edu Tue Feb 24 15:16:01 2004 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Tue Feb 24 15:16:01 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/Makefile.spec Message-ID: <200402242115.PAA07462@zion.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC: Makefile.spec updated: 1.23 -> 1.24 --- Log message: Add jit-ls for SPEC tests. --- Diffs of the changes: (+8 -0) Index: llvm/test/Programs/External/SPEC/Makefile.spec diff -u llvm/test/Programs/External/SPEC/Makefile.spec:1.23 llvm/test/Programs/External/SPEC/Makefile.spec:1.24 --- llvm/test/Programs/External/SPEC/Makefile.spec:1.23 Wed Feb 11 13:09:00 2004 +++ llvm/test/Programs/External/SPEC/Makefile.spec Tue Feb 24 15:15:03 2004 @@ -86,6 +86,14 @@ -(cd Output/jit-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > $@ -cp Output/jit-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time +$(PROGRAMS_TO_TEST:%=Output/%.out-jit-ls): \ +Output/%.out-jit-ls: Output/%.llvm.bc $(LLI) + $(SPEC_SANDBOX) jit-ls-$(RUN_TYPE) $@ $(REF_IN_DIR) \ + $(RUNSAFELY) $(STDIN_FILENAME) $(STDOUT_FILENAME) \ + $(LLI) -regalloc=linearscan $(JIT_OPTS) ../../$< $(RUN_OPTIONS) + -(cd Output/jit-ls-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > $@ + -cp Output/jit-ls-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time + $(PROGRAMS_TO_TEST:%=Output/%.out-llc): \ Output/%.out-llc: Output/%.llc $(SPEC_SANDBOX) llc-$(RUN_TYPE) $@ $(REF_IN_DIR) \ From alkis at cs.uiuc.edu Tue Feb 24 15:17:01 2004 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Tue Feb 24 15:17:01 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/Makefile.spec95 Message-ID: <200402242116.PAA07481@zion.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC: Makefile.spec95 updated: 1.3 -> 1.4 --- Log message: Add jit-ls for SPEC tests. --- Diffs of the changes: (+8 -0) Index: llvm/test/Programs/External/SPEC/Makefile.spec95 diff -u llvm/test/Programs/External/SPEC/Makefile.spec95:1.3 llvm/test/Programs/External/SPEC/Makefile.spec95:1.4 --- llvm/test/Programs/External/SPEC/Makefile.spec95:1.3 Thu Feb 19 23:53:09 2004 +++ llvm/test/Programs/External/SPEC/Makefile.spec95 Tue Feb 24 15:16:06 2004 @@ -86,6 +86,14 @@ -(cd Output/jit-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > $@ -cp Output/jit-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time +$(PROGRAMS_TO_TEST:%=Output/%.out-jit-ls): \ +Output/%.out-jit-ls: Output/%.llvm.bc $(LLI) + $(SPEC_SANDBOX) jit-ls-$(RUN_TYPE) $@ $(REF_IN_DIR) \ + $(RUNSAFELY) $(STDIN_FILENAME) $(STDOUT_FILENAME) \ + $(LLI) -regalloc=linearscan $(JIT_OPTS) ../../$< $(RUN_OPTIONS) + -(cd Output/jit-ls-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > $@ + -cp Output/jit-ls-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time + $(PROGRAMS_TO_TEST:%=Output/%.out-llc): \ Output/%.out-llc: Output/%.llc $(SPEC_SANDBOX) llc-$(RUN_TYPE) $@ $(REF_IN_DIR) \ From criswell at cs.uiuc.edu Tue Feb 24 15:35:01 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Tue Feb 24 15:35:01 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/TEST.vtl.Makefile Message-ID: <200402242134.PAA31613@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs: TEST.vtl.Makefile added (r1.1) --- Log message: Initial commit of VTune tests for the LLVM Build system. --- Diffs of the changes: (+46 -0) Index: llvm/test/Programs/TEST.vtl.Makefile diff -c /dev/null llvm/test/Programs/TEST.vtl.Makefile:1.1 *** /dev/null Tue Feb 24 15:34:43 2004 --- llvm/test/Programs/TEST.vtl.Makefile Tue Feb 24 15:34:32 2004 *************** *** 0 **** --- 1,46 ---- + ##===- test/Programs/TEST.example.Makefile -----------------*- Makefile -*-===## + # + # Example to show a custom test. This test just prints the size of the bytecode + # file for each program. + # + ##===----------------------------------------------------------------------===## + + TESTNAME = $* + + VTL := /opt/intel/vtune/bin/vtl + + # + # Events: These will need to be modified for every different CPU that is used + # (i.e. the Pentium 3 on Cypher has a different set of available events than + # the Pentium 4 on Zion). + # + P4_EVENTS := "-ec en='2nd Level Cache Read Misses' en='2nd-Level Cache Read References'" + P3_EVENTS := "-ec en='L2 Cache Request Misses (highly correlated)'" + + EVENTS := $(P3_EVENTS) + + # + # Generate events for LLC + # + #$(PROGRAMS_TO_TEST:%=test.$(TEST).%): \ + #test.$(TEST).%: Output/%.llc + #@echo "=========================================" + #@echo "Running '$(TEST)' test on '$(TESTNAME)' program" + #$(VERB) $(VTL) activity $* -d 50 -c sampling -o $(EVENTS) -app $< + #-$(VERB) $(VTL) run $* + #-$(VERB) $(VTL) view > $@ + #$(VERB) $(VTL) delete $* -f + + # + # Generate events for CBE + # + $(PROGRAMS_TO_TEST:%=test.$(TEST).%): \ + test.$(TEST).%: Output/%.cbe + @echo "=========================================" + @echo "Running '$(TEST)' test on '$(TESTNAME)' program" + $(VERB) $(VTL) activity $* -d 50 -c sampling -o $(EVENTS) -app $< + -$(VERB) $(VTL) run $* + -$(VERB) $(VTL) view > $@ + $(VERB) $(VTL) delete $* -f + + From criswell at cs.uiuc.edu Tue Feb 24 15:44:01 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Tue Feb 24 15:44:01 2004 Subject: [llvm-commits] CVS: llvm/autoconf/configure.ac Message-ID: <200402242143.PAA31739@choi.cs.uiuc.edu> Changes in directory llvm/autoconf: configure.ac updated: 1.78 -> 1.79 --- Log message: Added the VTune tests. --- Diffs of the changes: (+1 -0) Index: llvm/autoconf/configure.ac diff -u llvm/autoconf/configure.ac:1.78 llvm/autoconf/configure.ac:1.79 --- llvm/autoconf/configure.ac:1.78 Mon Feb 23 16:07:01 2004 +++ llvm/autoconf/configure.ac Tue Feb 24 15:43:38 2004 @@ -52,6 +52,7 @@ AC_CONFIG_MAKEFILE(test/Programs/TEST.typesafe.Makefile) AC_CONFIG_MAKEFILE(test/Programs/TEST.dsgraph.gnuplot) AC_CONFIG_MAKEFILE(test/Programs/TEST.micro.Makefile) +AC_CONFIG_MAKEFILE(test/Programs/TEST.vtl.Makefile) AC_CONFIG_MAKEFILE(test/Programs/External/Makefile) AC_CONFIG_MAKEFILE(test/Programs/External/SPEC/Makefile) AC_CONFIG_MAKEFILE(test/Programs/External/SPEC/Makefile.spec) From criswell at cs.uiuc.edu Tue Feb 24 15:44:31 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Tue Feb 24 15:44:31 2004 Subject: [llvm-commits] CVS: llvm/configure Message-ID: <200402242143.PAA31730@choi.cs.uiuc.edu> Changes in directory llvm: configure updated: 1.80 -> 1.81 --- Log message: Added the VTune tests. --- Diffs of the changes: (+34 -28) Index: llvm/configure diff -u llvm/configure:1.80 llvm/configure:1.81 --- llvm/configure:1.80 Mon Feb 23 16:07:00 2004 +++ llvm/configure Tue Feb 24 15:43:36 2004 @@ -1607,6 +1607,9 @@ ac_config_commands="$ac_config_commands test/Programs/TEST.micro.Makefile" + ac_config_commands="$ac_config_commands test/Programs/TEST.vtl.Makefile" + + ac_config_commands="$ac_config_commands test/Programs/External/Makefile" @@ -4041,7 +4044,7 @@ ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 4044 "configure"' > conftest.$ac_ext + echo '#line 4047 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -4882,7 +4885,7 @@ # Provide some information about the compiler. -echo "$as_me:4885:" \ +echo "$as_me:4888:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 @@ -5887,11 +5890,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:5890: $lt_compile\"" >&5) + (eval echo "\"\$as_me:5893: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:5894: \$? = $ac_status" >&5 + echo "$as_me:5897: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -6119,11 +6122,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6122: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6125: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6126: \$? = $ac_status" >&5 + echo "$as_me:6129: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -6186,11 +6189,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6189: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6192: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:6193: \$? = $ac_status" >&5 + echo "$as_me:6196: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -8198,7 +8201,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:10434: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:10435: \$? = $ac_status" >&5 + echo "$as_me:10438: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -10495,11 +10498,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:10498: $lt_compile\"" >&5) + (eval echo "\"\$as_me:10501: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:10502: \$? = $ac_status" >&5 + echo "$as_me:10505: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -11738,7 +11741,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:12664: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:12665: \$? = $ac_status" >&5 + echo "$as_me:12668: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -12725,11 +12728,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:12728: $lt_compile\"" >&5) + (eval echo "\"\$as_me:12731: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:12732: \$? = $ac_status" >&5 + echo "$as_me:12735: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -14665,11 +14668,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14668: $lt_compile\"" >&5) + (eval echo "\"\$as_me:14671: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:14672: \$? = $ac_status" >&5 + echo "$as_me:14675: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -14897,11 +14900,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14900: $lt_compile\"" >&5) + (eval echo "\"\$as_me:14903: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:14904: \$? = $ac_status" >&5 + echo "$as_me:14907: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -14964,11 +14967,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14967: $lt_compile\"" >&5) + (eval echo "\"\$as_me:14970: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:14971: \$? = $ac_status" >&5 + echo "$as_me:14974: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -16976,7 +16979,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext < Changes in directory llvm/lib/Analysis/DataStructure: Local.cpp updated: 1.86 -> 1.87 --- Log message: Add support for remove, fwrite, and fread Also fix problem where we didn't check to see if a node pointer was null. Though fclose(null) doesn't make a lot of sense, 300.twolf does it. --- Diffs of the changes: (+53 -22) Index: llvm/lib/Analysis/DataStructure/Local.cpp diff -u llvm/lib/Analysis/DataStructure/Local.cpp:1.86 llvm/lib/Analysis/DataStructure/Local.cpp:1.87 --- llvm/lib/Analysis/DataStructure/Local.cpp:1.86 Fri Feb 20 17:27:09 2004 +++ llvm/lib/Analysis/DataStructure/Local.cpp Tue Feb 24 16:02:48 2004 @@ -483,7 +483,8 @@ if (DSNode *N = RetNH.getNode()) N->setHeapNodeMarker()->setModifiedMarker()->setReadMarker(); return; - } else if (F->getName() == "atoi" || F->getName() == "atof") { + } else if (F->getName() == "atoi" || F->getName() == "atof" || + F->getName() == "remove") { // atoi reads its argument. if (DSNode *N = getValueDest(**CS.arg_begin()).getNode()) N->setReadMarker(); @@ -500,21 +501,30 @@ // fopen allocates in an unknown way and writes to the file // descriptor. Also, merge the allocated type into the node. DSNodeHandle Result = getValueDest(*CS.getInstruction()); - Result.getNode()->setModifiedMarker()->setUnknownNodeMarker(); - const Type *RetTy = F->getFunctionType()->getReturnType(); - if (const PointerType *PTy = dyn_cast(RetTy)) - Result.getNode()->mergeTypeInfo(PTy->getElementType(), - Result.getOffset()); + if (DSNode *N = Result.getNode()) { + N->setModifiedMarker()->setUnknownNodeMarker(); + const Type *RetTy = F->getFunctionType()->getReturnType(); + if (const PointerType *PTy = dyn_cast(RetTy)) + N->mergeTypeInfo(PTy->getElementType(), Result.getOffset()); + } + return; + } else if (F->getName() == "memcmp" && CS.arg_end()-CS.arg_begin() ==3){ + // memcmp reads the memory pointed to by the first two operands. + if (DSNode *N = getValueDest(**CS.arg_begin()).getNode()) + N->setReadMarker(); + if (DSNode *N = getValueDest(**++CS.arg_begin()).getNode()) + N->setReadMarker(); return; } else if (F->getName() == "fclose" && CS.arg_end()-CS.arg_begin() ==1){ // fclose reads and deallocates the memory in an unknown way for the // file descriptor. It merges the FILE type into the descriptor. DSNodeHandle H = getValueDest(**CS.arg_begin()); - H.getNode()->setReadMarker()->setUnknownNodeMarker(); - - const Type *ArgTy = *F->getFunctionType()->param_begin(); - if (const PointerType *PTy = dyn_cast(ArgTy)) - H.getNode()->mergeTypeInfo(PTy->getElementType(), H.getOffset()); + if (DSNode *N = H.getNode()) { + N->setReadMarker()->setUnknownNodeMarker(); + const Type *ArgTy = F->getFunctionType()->getParamType(0); + if (const PointerType *PTy = dyn_cast(ArgTy)) + N->mergeTypeInfo(PTy->getElementType(), H.getOffset()); + } return; } else if (CS.arg_end()-CS.arg_begin() == 1 && (F->getName() == "fflush" || F->getName() == "feof" || @@ -523,11 +533,32 @@ // fflush reads and writes the memory for the file descriptor. It // merges the FILE type into the descriptor. DSNodeHandle H = getValueDest(**CS.arg_begin()); - H.getNode()->setReadMarker()->setModifiedMarker(); + if (DSNode *N = H.getNode()) { + N->setReadMarker()->setModifiedMarker(); - const Type *ArgTy = *F->getFunctionType()->param_begin(); - if (const PointerType *PTy = dyn_cast(ArgTy)) - H.getNode()->mergeTypeInfo(PTy->getElementType(), H.getOffset()); + const Type *ArgTy = F->getFunctionType()->getParamType(0); + if (const PointerType *PTy = dyn_cast(ArgTy)) + N->mergeTypeInfo(PTy->getElementType(), H.getOffset()); + } + return; + } else if (CS.arg_end()-CS.arg_begin() == 4 && + (F->getName() == "fwrite" || F->getName() == "fread")) { + // fread writes the first operand, fwrite reads it. They both + // read/write the FILE descriptor, and merges the FILE type. + DSNodeHandle H = getValueDest(**--CS.arg_end()); + if (DSNode *N = H.getNode()) { + N->setReadMarker()->setModifiedMarker(); + const Type *ArgTy = F->getFunctionType()->getParamType(3); + if (const PointerType *PTy = dyn_cast(ArgTy)) + N->mergeTypeInfo(PTy->getElementType(), H.getOffset()); + } + + H = getValueDest(**CS.arg_begin()); + if (DSNode *N = H.getNode()) + if (F->getName() == "fwrite") + N->setReadMarker(); + else + N->setModifiedMarker(); return; } else if (F->getName() == "fgets" && CS.arg_end()-CS.arg_begin() == 3){ // fgets reads and writes the memory for the file descriptor. It @@ -542,11 +573,12 @@ // Reads and writes file descriptor, merge in FILE type. H = getValueDest(**CS.arg_begin()); - if (DSNode *N = H.getNode()) + if (DSNode *N = H.getNode()) { N->setReadMarker()->setModifiedMarker(); - const Type *ArgTy = *(F->getFunctionType()->param_begin()+2); - if (const PointerType *PTy = dyn_cast(ArgTy)) - H.getNode()->mergeTypeInfo(PTy->getElementType(), H.getOffset()); + const Type *ArgTy = *(F->getFunctionType()->param_begin()+2); + if (const PointerType *PTy = dyn_cast(ArgTy)) + N->mergeTypeInfo(PTy->getElementType(), H.getOffset()); + } return; } else if (F->getName() == "printf" || F->getName() == "fprintf" || F->getName() == "sprintf") { @@ -688,9 +720,8 @@ void GraphBuilder::visitFreeInst(FreeInst &FI) { // Mark that the node is written to... - DSNode *N = getValueDest(*FI.getOperand(0)).getNode(); - N->setModifiedMarker(); - N->setHeapNodeMarker(); + if (DSNode *N = getValueDest(*FI.getOperand(0)).getNode()) + N->setModifiedMarker()->setHeapNodeMarker(); } /// Handle casts... From lattner at cs.uiuc.edu Tue Feb 24 16:07:03 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Feb 24 16:07:03 2004 Subject: [llvm-commits] CVS: llvm/lib/VMCore/Verifier.cpp Message-ID: <200402242206.QAA02284@zion.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: Verifier.cpp updated: 1.81 -> 1.82 --- Log message: Make the verifier a little more explicit about this problem. --- Diffs of the changes: (+2 -2) Index: llvm/lib/VMCore/Verifier.cpp diff -u llvm/lib/VMCore/Verifier.cpp:1.81 llvm/lib/VMCore/Verifier.cpp:1.82 --- llvm/lib/VMCore/Verifier.cpp:1.81 Fri Feb 13 20:47:17 2004 +++ llvm/lib/VMCore/Verifier.cpp Tue Feb 24 16:06:07 2004 @@ -386,9 +386,9 @@ // Verify that all arguments to the call match the function type... for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i) - Assert2(CI.getOperand(i+1)->getType() == FTy->getParamType(i), + Assert3(CI.getOperand(i+1)->getType() == FTy->getParamType(i), "Call parameter type does not match function signature!", - CI.getOperand(i+1), FTy->getParamType(i)); + CI.getOperand(i+1), FTy->getParamType(i), &CI); if (Function *F = CI.getCalledFunction()) if (Intrinsic::ID ID = (Intrinsic::ID)F->getIntrinsicID()) From lattner at cs.uiuc.edu Tue Feb 24 16:10:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Feb 24 16:10:01 2004 Subject: [llvm-commits] CVS: poolalloc/lib/PoolAllocate/TransformFunctionBody.cpp Message-ID: <200402242209.QAA12804@zion.cs.uiuc.edu> Changes in directory poolalloc/lib/PoolAllocate: TransformFunctionBody.cpp updated: 1.19 -> 1.20 --- Log message: Fix a problem where we were passing an int parameter where poolalloc expected a uint --- Diffs of the changes: (+3 -0) Index: poolalloc/lib/PoolAllocate/TransformFunctionBody.cpp diff -u poolalloc/lib/PoolAllocate/TransformFunctionBody.cpp:1.19 poolalloc/lib/PoolAllocate/TransformFunctionBody.cpp:1.20 --- poolalloc/lib/PoolAllocate/TransformFunctionBody.cpp:1.19 Sat Feb 21 22:09:50 2004 +++ poolalloc/lib/PoolAllocate/TransformFunctionBody.cpp Tue Feb 24 16:09:41 2004 @@ -134,6 +134,9 @@ Value *Size) { std::string Name = I->getName(); I->setName(""); + if (Size->getType() != Type::UIntTy) + Size = new CastInst(Size, Type::UIntTy, Size->getName(), I); + // Insert a call to poolalloc Value *PH = getPoolHandle(I); Instruction *V = new CallInst(PAInfo.PoolAlloc, make_vector(PH, Size, 0), From lattner at cs.uiuc.edu Tue Feb 24 16:18:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Feb 24 16:18:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Analysis/DataStructure/Local.cpp Message-ID: <200402242217.QAA16801@zion.cs.uiuc.edu> Changes in directory llvm/lib/Analysis/DataStructure: Local.cpp updated: 1.87 -> 1.88 --- Log message: Add support for 'rename' --- Diffs of the changes: (+9 -4) Index: llvm/lib/Analysis/DataStructure/Local.cpp diff -u llvm/lib/Analysis/DataStructure/Local.cpp:1.87 llvm/lib/Analysis/DataStructure/Local.cpp:1.88 --- llvm/lib/Analysis/DataStructure/Local.cpp:1.87 Tue Feb 24 16:02:48 2004 +++ llvm/lib/Analysis/DataStructure/Local.cpp Tue Feb 24 16:17:00 2004 @@ -484,10 +484,15 @@ N->setHeapNodeMarker()->setModifiedMarker()->setReadMarker(); return; } else if (F->getName() == "atoi" || F->getName() == "atof" || - F->getName() == "remove") { - // atoi reads its argument. - if (DSNode *N = getValueDest(**CS.arg_begin()).getNode()) - N->setReadMarker(); + F->getName() == "remove" || F->getName() == "unlink" || + F->getName() == "rename") { + // These functions read all of their pointer operands. + for (CallSite::arg_iterator AI = CS.arg_begin(), E = CS.arg_end(); + AI != E; ++AI) { + if (isPointerType((*AI)->getType())) + if (DSNode *N = getValueDest(**AI).getNode()) + N->setReadMarker(); + } return; } else if (F->getName() == "fopen" && CS.arg_end()-CS.arg_begin() == 2){ From gaeke at cs.uiuc.edu Tue Feb 24 16:59:01 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Tue Feb 24 16:59:01 2004 Subject: [llvm-commits] CVS: llvm/autoconf/AutoRegen.sh Message-ID: <200402242258.QAA17349@zion.cs.uiuc.edu> Changes in directory llvm/autoconf: AutoRegen.sh updated: 1.1 -> 1.2 --- Log message: small portability fix. --- Diffs of the changes: (+2 -1) Index: llvm/autoconf/AutoRegen.sh diff -u llvm/autoconf/AutoRegen.sh:1.1 llvm/autoconf/AutoRegen.sh:1.2 --- llvm/autoconf/AutoRegen.sh:1.1 Sun Feb 8 01:44:48 2004 +++ llvm/autoconf/AutoRegen.sh Tue Feb 24 16:58:31 2004 @@ -7,7 +7,8 @@ [ -f configure.ac ] || die "Can't find 'autoconf' dir; please cd into it first" echo "Regenerating aclocal.m4 with aclocal" aclocal || die "aclocal failed" -if ! autoconf --version | egrep '2\.5[0-9]' > /dev/null +autoconf --version | egrep '2\.5[0-9]' > /dev/null +if test $? -ne 0 then die "Your autoconf was not detected as being 2.5x" fi From gaeke at cs.uiuc.edu Tue Feb 24 19:54:01 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Tue Feb 24 19:54:01 2004 Subject: [llvm-commits] CVS: llvm/include/Support/MathExtras.h Message-ID: <200402250153.TAA21223@zion.cs.uiuc.edu> Changes in directory llvm/include/Support: MathExtras.h updated: 1.10 -> 1.11 --- Log message: Cygwin defines log2 as a macro. Undef it here IFF it has already been defined, so that we always get the inline function instead. Remember, kids, like it says in the GCC manual, "An Inline Function is As Fast As a Macro." --- Diffs of the changes: (+4 -0) Index: llvm/include/Support/MathExtras.h diff -u llvm/include/Support/MathExtras.h:1.10 llvm/include/Support/MathExtras.h:1.11 --- llvm/include/Support/MathExtras.h:1.10 Sun Nov 16 14:21:13 2003 +++ llvm/include/Support/MathExtras.h Tue Feb 24 19:53:45 2004 @@ -18,6 +18,10 @@ namespace llvm { +#if defined(log2) +# undef log2 +#endif + inline unsigned log2(uint64_t C) { unsigned getPow; for (getPow = 0; C > 1; ++getPow) From lattner at cs.uiuc.edu Tue Feb 24 20:58:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Feb 24 20:58:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/InstSelectSimple.cpp Message-ID: <200402250257.UAA31218@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: InstSelectSimple.cpp updated: 1.174 -> 1.175 --- Log message: Implement special case for storing an immediate into memory so that we don't need an intermediate register. --- Diffs of the changes: (+29 -13) Index: llvm/lib/Target/X86/InstSelectSimple.cpp diff -u llvm/lib/Target/X86/InstSelectSimple.cpp:1.174 llvm/lib/Target/X86/InstSelectSimple.cpp:1.175 --- llvm/lib/Target/X86/InstSelectSimple.cpp:1.174 Mon Feb 23 12:14:47 2004 +++ llvm/lib/Target/X86/InstSelectSimple.cpp Tue Feb 24 20:56:58 2004 @@ -1907,24 +1907,40 @@ /// instruction. /// void ISel::visitStoreInst(StoreInst &I) { - unsigned ValReg = getReg(I.getOperand(0)); unsigned AddressReg = getReg(I.getOperand(1)); - const Type *ValTy = I.getOperand(0)->getType(); unsigned Class = getClassB(ValTy); - if (Class == cLong) { - addDirectMem(BuildMI(BB, X86::MOVmr32, 1+4), AddressReg).addReg(ValReg); - addRegOffset(BuildMI(BB, X86::MOVmr32, 1+4), AddressReg,4).addReg(ValReg+1); - return; + if (ConstantInt *CI = dyn_cast(I.getOperand(0))) { + uint64_t Val = CI->getRawValue(); + if (Class == cLong) { + addDirectMem(BuildMI(BB, X86::MOVmi32, 5), AddressReg).addZImm(Val & ~0U); + addRegOffset(BuildMI(BB, X86::MOVmi32, 5), AddressReg,4).addZImm(Val>>32); + } else { + static const unsigned Opcodes[] = { + X86::MOVmi8, X86::MOVmi16, X86::MOVmi32 + }; + unsigned Opcode = Opcodes[Class]; + addDirectMem(BuildMI(BB, Opcode, 5), AddressReg).addZImm(Val); + } + } else if (ConstantBool *CB = dyn_cast(I.getOperand(0))) { + addDirectMem(BuildMI(BB, X86::MOVmi8, 5), + AddressReg).addZImm(CB->getValue()); + } else { + if (Class == cLong) { + unsigned ValReg = getReg(I.getOperand(0)); + addDirectMem(BuildMI(BB, X86::MOVmr32, 5), AddressReg).addReg(ValReg); + addRegOffset(BuildMI(BB, X86::MOVmr32, 5), AddressReg,4).addReg(ValReg+1); + } else { + unsigned ValReg = getReg(I.getOperand(0)); + static const unsigned Opcodes[] = { + X86::MOVmr8, X86::MOVmr16, X86::MOVmr32, X86::FSTr32 + }; + unsigned Opcode = Opcodes[Class]; + if (ValTy == Type::DoubleTy) Opcode = X86::FSTr64; + addDirectMem(BuildMI(BB, Opcode, 1+4), AddressReg).addReg(ValReg); + } } - - static const unsigned Opcodes[] = { - X86::MOVmr8, X86::MOVmr16, X86::MOVmr32, X86::FSTr32 - }; - unsigned Opcode = Opcodes[Class]; - if (ValTy == Type::DoubleTy) Opcode = X86::FSTr64; - addDirectMem(BuildMI(BB, Opcode, 1+4), AddressReg).addReg(ValReg); } From lattner at cs.uiuc.edu Tue Feb 24 21:47:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Feb 24 21:47:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/InstSelectSimple.cpp Message-ID: <200402250346.VAA00623@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: InstSelectSimple.cpp updated: 1.175 -> 1.176 --- Log message: add an inefficient way of folding structure and constant array indexes together into a single LEA instruction. This should improve the code generated for things like X->A.B.C[12].D. The bigger benefit is still coming though. Note that this uses an LEA instruction instead of an add, giving the register allocator more freedom. We should probably never generate ADDri32's. --- Diffs of the changes: (+90 -22) Index: llvm/lib/Target/X86/InstSelectSimple.cpp diff -u llvm/lib/Target/X86/InstSelectSimple.cpp:1.175 llvm/lib/Target/X86/InstSelectSimple.cpp:1.176 --- llvm/lib/Target/X86/InstSelectSimple.cpp:1.175 Tue Feb 24 20:56:58 2004 +++ llvm/lib/Target/X86/InstSelectSimple.cpp Tue Feb 24 21:45:50 2004 @@ -2308,6 +2308,76 @@ I.op_begin()+1, I.op_end(), outputReg); } +/// getGEPIndex - Inspect the getelementptr operands specified with GEPOps and +/// GEPTypes (the derived types being stepped through at each level). On return +/// from this function, if some indexes of the instruction are representable as +/// an X86 lea instruction, the machine operands are put into the Ops +/// instruction and the consumed indexes are poped from the GEPOps/GEPTypes +/// lists. Otherwise, GEPOps.size() is returned. If this returns a an +/// addressing mode that only partially consumes the input, the BaseReg input of +/// the addressing mode must be left free. +/// +/// Note that there is one fewer entry in GEPTypes than there is in GEPOps. +/// +static void getGEPIndex(std::vector &GEPOps, + std::vector &GEPTypes, + MachineInstr *Ops, const TargetData &TD){ + // Clear out the state we are working with... + Ops->getOperand(0).setReg(0); // No base register + Ops->getOperand(1).setImmedValue(1); // Unit scale + Ops->getOperand(2).setReg(0); // No index register + Ops->getOperand(3).setImmedValue(0); // No displacement + + // While there are GEP indexes that can be folded into the current address, + // keep processing them. + while (!GEPTypes.empty()) { + if (const StructType *StTy = dyn_cast(GEPTypes.back())) { + // It's a struct access. CUI is the index into the structure, + // which names the field. This index must have unsigned type. + const ConstantUInt *CUI = cast(GEPOps.back()); + + // Use the TargetData structure to pick out what the layout of the + // structure is in memory. Since the structure index must be constant, we + // can get its value and use it to find the right byte offset from the + // StructLayout class's list of structure member offsets. + unsigned idxValue = CUI->getValue(); + unsigned FieldOff = TD.getStructLayout(StTy)->MemberOffsets[idxValue]; + if (FieldOff) { + if (Ops->getOperand(2).getReg()) + return; // Already has an index, can't add offset. + Ops->getOperand(3).setImmedValue(FieldOff+ + Ops->getOperand(3).getImmedValue()); + } + GEPOps.pop_back(); // Consume a GEP operand + GEPTypes.pop_back(); + } else { + // It's an array or pointer access: [ArraySize x ElementType]. + const SequentialType *SqTy = cast(GEPTypes.back()); + Value *idx = GEPOps.back(); + + // idx is the index into the array. Unlike with structure + // indices, we may not know its actual value at code-generation + // time. + assert(idx->getType() == Type::LongTy && "Bad GEP array index!"); + + // If idx is a constant, fold it into the offset. + if (ConstantSInt *CSI = dyn_cast(idx)) { + unsigned elementSize = TD.getTypeSize(SqTy->getElementType()); + unsigned Offset = elementSize*CSI->getValue(); + Ops->getOperand(3).setImmedValue(Offset+ + Ops->getOperand(3).getImmedValue()); + } else { + // If we can't handle it, return. + return; + } + + GEPOps.pop_back(); // Consume a GEP operand + GEPTypes.pop_back(); + } + } +} + + void ISel::emitGEPOperation(MachineBasicBlock *MBB, MachineBasicBlock::iterator IP, Value *Src, User::op_iterator IdxBegin, @@ -2326,11 +2396,28 @@ GEPTypes.assign(gep_type_begin(Src->getType(), IdxBegin, IdxEnd), gep_type_end(Src->getType(), IdxBegin, IdxEnd)); + // DummyMI - A dummy instruction to pass into getGEPIndex. The opcode doesn't + // matter, we just need 4 MachineOperands. + MachineInstr *DummyMI = + BuildMI(X86::PHI, 4).addReg(0).addZImm(1).addReg(0).addSImm(0); + // Keep emitting instructions until we consume the entire GEP instruction. while (!GEPOps.empty()) { unsigned OldSize = GEPOps.size(); + getGEPIndex(GEPOps, GEPTypes, DummyMI, TD); - if (GEPTypes.empty()) { + if (GEPOps.size() != OldSize) { + // getGEPIndex consumed some of the input. Build an LEA instruction here. + assert(DummyMI->getOperand(0).getReg() == 0 && + DummyMI->getOperand(1).getImmedValue() == 1 && + DummyMI->getOperand(2).getReg() == 0 && + "Unhandled GEP fold!"); + if (unsigned Offset = DummyMI->getOperand(3).getImmedValue()) { + unsigned Reg = makeAnotherReg(Type::UIntTy); + addRegOffset(BMI(MBB, IP, X86::LEAr32, 5, TargetReg), Reg, Offset); + TargetReg = Reg; + } + } else if (GEPTypes.empty()) { // The getGEPIndex operation didn't want to build an LEA. Check to see if // all operands are consumed but the base pointer. If so, just load it // into the register. @@ -2341,27 +2428,6 @@ BMI(MBB, IP, X86::MOVrr32, 1, TargetReg).addReg(BaseReg); } break; // we are now done - } else if (const StructType *StTy = dyn_cast(GEPTypes.back())) { - // It's a struct access. CUI is the index into the structure, - // which names the field. This index must have unsigned type. - const ConstantUInt *CUI = cast(GEPOps.back()); - GEPOps.pop_back(); // Consume a GEP operand - GEPTypes.pop_back(); - - // Use the TargetData structure to pick out what the layout of the - // structure is in memory. Since the structure index must be constant, we - // can get its value and use it to find the right byte offset from the - // StructLayout class's list of structure member offsets. - unsigned idxValue = CUI->getValue(); - unsigned FieldOff = TD.getStructLayout(StTy)->MemberOffsets[idxValue]; - if (FieldOff) { - unsigned Reg = makeAnotherReg(Type::UIntTy); - // Emit an ADD to add FieldOff to the basePtr. - BMI(MBB, IP, X86::ADDri32, 2, TargetReg).addReg(Reg).addZImm(FieldOff); - --IP; // Insert the next instruction before this one. - TargetReg = Reg; // Codegen the rest of the GEP into this - } - } else { // It's an array or pointer access: [ArraySize x ElementType]. const SequentialType *SqTy = cast(GEPTypes.back()); @@ -2430,6 +2496,8 @@ } } } + + delete DummyMI; } From lattner at cs.uiuc.edu Wed Feb 25 00:02:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 00:02:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86InstrBuilder.h Message-ID: <200402250601.AAA14830@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86InstrBuilder.h updated: 1.9 -> 1.10 --- Log message: Add a helper to create an addressing mode given all of the pieces. --- Diffs of the changes: (+8 -0) Index: llvm/lib/Target/X86/X86InstrBuilder.h diff -u llvm/lib/Target/X86/X86InstrBuilder.h:1.9 llvm/lib/Target/X86/X86InstrBuilder.h:1.10 --- llvm/lib/Target/X86/X86InstrBuilder.h:1.9 Tue Nov 11 16:41:33 2003 +++ llvm/lib/Target/X86/X86InstrBuilder.h Wed Feb 25 00:01:07 2004 @@ -49,6 +49,14 @@ return MIB.addReg(Reg).addZImm(1).addReg(0).addSImm(Offset); } +inline const MachineInstrBuilder &addFullAddress(const MachineInstrBuilder &MIB, + unsigned BaseReg, + unsigned Scale, + unsigned IndexReg, + unsigned Disp) { + return MIB.addReg(BaseReg).addZImm(Scale).addReg(IndexReg).addSImm(Disp); +} + /// addFrameReference - This function is used to add a reference to the base of /// an abstract object on the stack frame of the current function. This /// reference has base register as the FrameIndex offset until it is resolved. From lattner at cs.uiuc.edu Wed Feb 25 00:14:03 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 00:14:03 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/InstSelectSimple.cpp Message-ID: <200402250613.AAA16013@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: InstSelectSimple.cpp updated: 1.176 -> 1.177 --- Log message: * Make the previous patch more efficient by not allocating a temporary MachineInstr to do analysis. *** FOLD getelementptr instructions into loads and stores when possible, making use of some of the crazy X86 addressing modes. For example, the following C++ program fragment: struct complex { double re, im; complex(double r, double i) : re(r), im(i) {} }; inline complex operator+(const complex& a, const complex& b) { return complex(a.re+b.re, a.im+b.im); } complex addone(const complex& arg) { return arg + complex(1,0); } Used to be compiled to: _Z6addoneRK7complex: mov %EAX, DWORD PTR [%ESP + 4] mov %ECX, DWORD PTR [%ESP + 8] *** mov %EDX, %ECX fld QWORD PTR [%EDX] fld1 faddp %ST(1) *** add %ECX, 8 fld QWORD PTR [%ECX] fldz faddp %ST(1) *** mov %ECX, %EAX fxch %ST(1) fstp QWORD PTR [%ECX] *** add %EAX, 8 fstp QWORD PTR [%EAX] ret Now it is compiled to: _Z6addoneRK7complex: mov %EAX, DWORD PTR [%ESP + 4] mov %ECX, DWORD PTR [%ESP + 8] fld QWORD PTR [%ECX] fld1 faddp %ST(1) fld QWORD PTR [%ECX + 8] fldz faddp %ST(1) fxch %ST(1) fstp QWORD PTR [%EAX] fstp QWORD PTR [%EAX + 8] ret Other programs should see similar improvements, across the board. Note that in addition to reducing instruction count, this also reduces register pressure a lot, always a good thing on X86. :) --- Diffs of the changes: (+184 -56) Index: llvm/lib/Target/X86/InstSelectSimple.cpp diff -u llvm/lib/Target/X86/InstSelectSimple.cpp:1.176 llvm/lib/Target/X86/InstSelectSimple.cpp:1.177 --- llvm/lib/Target/X86/InstSelectSimple.cpp:1.176 Tue Feb 24 21:45:50 2004 +++ llvm/lib/Target/X86/InstSelectSimple.cpp Wed Feb 25 00:13:04 2004 @@ -222,6 +222,20 @@ /// void promote32(unsigned targetReg, const ValueRecord &VR); + // getGEPIndex - This is used to fold GEP instructions into X86 addressing + // expressions. + void getGEPIndex(MachineBasicBlock *MBB, MachineBasicBlock::iterator IP, + std::vector &GEPOps, + std::vector &GEPTypes, unsigned &BaseReg, + unsigned &Scale, unsigned &IndexReg, unsigned &Disp); + + /// isGEPFoldable - Return true if the specified GEP can be completely + /// folded into the addressing mode of a load/store or lea instruction. + bool isGEPFoldable(MachineBasicBlock *MBB, + Value *Src, User::op_iterator IdxBegin, + User::op_iterator IdxEnd, unsigned &BaseReg, + unsigned &Scale, unsigned &IndexReg, unsigned &Disp); + /// emitGEPOperation - Common code shared between visitGetElementPtrInst and /// constant expression GEP support. /// @@ -1884,14 +1898,32 @@ /// need to worry about the memory layout of the target machine. /// void ISel::visitLoadInst(LoadInst &I) { - unsigned SrcAddrReg = getReg(I.getOperand(0)); unsigned DestReg = getReg(I); + unsigned BaseReg = 0, Scale = 1, IndexReg = 0, Disp = 0; + Value *Addr = I.getOperand(0); + if (GetElementPtrInst *GEP = dyn_cast(Addr)) { + if (isGEPFoldable(BB, GEP->getOperand(0), GEP->op_begin()+1, GEP->op_end(), + BaseReg, Scale, IndexReg, Disp)) + Addr = 0; // Address is consumed! + } else if (ConstantExpr *CE = dyn_cast(Addr)) { + if (CE->getOpcode() == Instruction::GetElementPtr) + if (isGEPFoldable(BB, CE->getOperand(0), CE->op_begin()+1, CE->op_end(), + BaseReg, Scale, IndexReg, Disp)) + Addr = 0; + } + + if (Addr) { + // If it's not foldable, reset addr mode. + BaseReg = getReg(Addr); + Scale = 1; IndexReg = 0; Disp = 0; + } unsigned Class = getClassB(I.getType()); - if (Class == cLong) { - addDirectMem(BuildMI(BB, X86::MOVrm32, 4, DestReg), SrcAddrReg); - addRegOffset(BuildMI(BB, X86::MOVrm32, 4, DestReg+1), SrcAddrReg, 4); + addFullAddress(BuildMI(BB, X86::MOVrm32, 4, DestReg), + BaseReg, Scale, IndexReg, Disp); + addFullAddress(BuildMI(BB, X86::MOVrm32, 4, DestReg+1), + BaseReg, Scale, IndexReg, Disp+4); return; } @@ -1900,37 +1932,61 @@ }; unsigned Opcode = Opcodes[Class]; if (I.getType() == Type::DoubleTy) Opcode = X86::FLDr64; - addDirectMem(BuildMI(BB, Opcode, 4, DestReg), SrcAddrReg); + addFullAddress(BuildMI(BB, Opcode, 4, DestReg), + BaseReg, Scale, IndexReg, Disp); } /// visitStoreInst - Implement LLVM store instructions in terms of the x86 'mov' /// instruction. /// void ISel::visitStoreInst(StoreInst &I) { - unsigned AddressReg = getReg(I.getOperand(1)); + unsigned BaseReg = 0, Scale = 1, IndexReg = 0, Disp = 0; + Value *Addr = I.getOperand(1); + if (GetElementPtrInst *GEP = dyn_cast(Addr)) { + if (isGEPFoldable(BB, GEP->getOperand(0), GEP->op_begin()+1, GEP->op_end(), + BaseReg, Scale, IndexReg, Disp)) + Addr = 0; // Address is consumed! + } else if (ConstantExpr *CE = dyn_cast(Addr)) { + if (CE->getOpcode() == Instruction::GetElementPtr) + if (isGEPFoldable(BB, CE->getOperand(0), CE->op_begin()+1, CE->op_end(), + BaseReg, Scale, IndexReg, Disp)) + Addr = 0; + } + + if (Addr) { + // If it's not foldable, reset addr mode. + BaseReg = getReg(Addr); + Scale = 1; IndexReg = 0; Disp = 0; + } + const Type *ValTy = I.getOperand(0)->getType(); unsigned Class = getClassB(ValTy); if (ConstantInt *CI = dyn_cast(I.getOperand(0))) { uint64_t Val = CI->getRawValue(); if (Class == cLong) { - addDirectMem(BuildMI(BB, X86::MOVmi32, 5), AddressReg).addZImm(Val & ~0U); - addRegOffset(BuildMI(BB, X86::MOVmi32, 5), AddressReg,4).addZImm(Val>>32); + addFullAddress(BuildMI(BB, X86::MOVmi32, 5), + BaseReg, Scale, IndexReg, Disp).addZImm(Val & ~0U); + addFullAddress(BuildMI(BB, X86::MOVmi32, 5), + BaseReg, Scale, IndexReg, Disp+4).addZImm(Val>>32); } else { static const unsigned Opcodes[] = { X86::MOVmi8, X86::MOVmi16, X86::MOVmi32 }; unsigned Opcode = Opcodes[Class]; - addDirectMem(BuildMI(BB, Opcode, 5), AddressReg).addZImm(Val); + addFullAddress(BuildMI(BB, Opcode, 5), + BaseReg, Scale, IndexReg, Disp).addZImm(Val); } } else if (ConstantBool *CB = dyn_cast(I.getOperand(0))) { - addDirectMem(BuildMI(BB, X86::MOVmi8, 5), - AddressReg).addZImm(CB->getValue()); + addFullAddress(BuildMI(BB, X86::MOVmi8, 5), + BaseReg, Scale, IndexReg, Disp).addZImm(CB->getValue()); } else { if (Class == cLong) { unsigned ValReg = getReg(I.getOperand(0)); - addDirectMem(BuildMI(BB, X86::MOVmr32, 5), AddressReg).addReg(ValReg); - addRegOffset(BuildMI(BB, X86::MOVmr32, 5), AddressReg,4).addReg(ValReg+1); + addFullAddress(BuildMI(BB, X86::MOVmr32, 5), + BaseReg, Scale, IndexReg, Disp).addReg(ValReg); + addFullAddress(BuildMI(BB, X86::MOVmr32, 5), + BaseReg, Scale, IndexReg, Disp+4).addReg(ValReg+1); } else { unsigned ValReg = getReg(I.getOperand(0)); static const unsigned Opcodes[] = { @@ -1938,7 +1994,8 @@ }; unsigned Opcode = Opcodes[Class]; if (ValTy == Type::DoubleTy) Opcode = X86::FSTr64; - addDirectMem(BuildMI(BB, Opcode, 1+4), AddressReg).addReg(ValReg); + addFullAddress(BuildMI(BB, Opcode, 1+4), + BaseReg, Scale, IndexReg, Disp).addReg(ValReg); } } } @@ -2138,7 +2195,8 @@ } // Spill the integer to memory and reload it from there... - int FrameIdx = F->getFrameInfo()->CreateStackObject(SrcTy, TM.getTargetData()); + int FrameIdx = + F->getFrameInfo()->CreateStackObject(SrcTy, TM.getTargetData()); if (SrcClass == cLong) { addFrameReference(BMI(BB, IP, X86::MOVmr32, 5), FrameIdx).addReg(SrcReg); @@ -2160,15 +2218,18 @@ // Emit a test instruction to see if the dynamic input value was signed. BMI(BB, IP, X86::TESTrr32, 2).addReg(SrcReg+1).addReg(SrcReg+1); - // If the sign bit is set, get a pointer to an offset, otherwise get a pointer to a zero. + // If the sign bit is set, get a pointer to an offset, otherwise get a + // pointer to a zero. MachineConstantPool *CP = F->getConstantPool(); unsigned Zero = makeAnotherReg(Type::IntTy); + Constant *Null = Constant::getNullValue(Type::UIntTy); addConstantPoolReference(BMI(BB, IP, X86::LEAr32, 5, Zero), - CP->getConstantPoolIndex(Constant::getNullValue(Type::UIntTy))); + CP->getConstantPoolIndex(Null)); unsigned Offset = makeAnotherReg(Type::IntTy); + Constant *OffsetCst = ConstantUInt::get(Type::UIntTy, 0x5f800000); + addConstantPoolReference(BMI(BB, IP, X86::LEAr32, 5, Offset), - CP->getConstantPoolIndex(ConstantUInt::get(Type::UIntTy, - 0x5f800000))); + CP->getConstantPoolIndex(OffsetCst)); unsigned Addr = makeAnotherReg(Type::IntTy); BMI(BB, IP, X86::CMOVSrr32, 2, Addr).addReg(Zero).addReg(Offset); @@ -2303,6 +2364,26 @@ void ISel::visitGetElementPtrInst(GetElementPtrInst &I) { + // If this GEP instruction will be folded into all of its users, we don't need + // to explicitly calculate it! + unsigned A, B, C, D; + if (isGEPFoldable(0, I.getOperand(0), I.op_begin()+1, I.op_end(), A,B,C,D)) { + // Check all of the users of the instruction to see if they are loads and + // stores. + bool AllWillFold = true; + for (Value::use_iterator UI = I.use_begin(), E = I.use_end(); UI != E; ++UI) + if (cast(*UI)->getOpcode() != Instruction::Load) + if (cast(*UI)->getOpcode() != Instruction::Store || + cast(*UI)->getOperand(0) == &I) { + AllWillFold = false; + break; + } + + // If the instruction is foldable, and will be folded into all users, don't + // emit it! + if (AllWillFold) return; + } + unsigned outputReg = getReg(I); emitGEPOperation(BB, BB->end(), I.getOperand(0), I.op_begin()+1, I.op_end(), outputReg); @@ -2319,15 +2400,18 @@ /// /// Note that there is one fewer entry in GEPTypes than there is in GEPOps. /// -static void getGEPIndex(std::vector &GEPOps, - std::vector &GEPTypes, - MachineInstr *Ops, const TargetData &TD){ +void ISel::getGEPIndex(MachineBasicBlock *MBB, MachineBasicBlock::iterator IP, + std::vector &GEPOps, + std::vector &GEPTypes, unsigned &BaseReg, + unsigned &Scale, unsigned &IndexReg, unsigned &Disp) { + const TargetData &TD = TM.getTargetData(); + // Clear out the state we are working with... - Ops->getOperand(0).setReg(0); // No base register - Ops->getOperand(1).setImmedValue(1); // Unit scale - Ops->getOperand(2).setReg(0); // No index register - Ops->getOperand(3).setImmedValue(0); // No displacement - + BaseReg = 0; // No base register + Scale = 1; // Unit scale + IndexReg = 0; // No index register + Disp = 0; // No displacement + // While there are GEP indexes that can be folded into the current address, // keep processing them. while (!GEPTypes.empty()) { @@ -2340,14 +2424,7 @@ // structure is in memory. Since the structure index must be constant, we // can get its value and use it to find the right byte offset from the // StructLayout class's list of structure member offsets. - unsigned idxValue = CUI->getValue(); - unsigned FieldOff = TD.getStructLayout(StTy)->MemberOffsets[idxValue]; - if (FieldOff) { - if (Ops->getOperand(2).getReg()) - return; // Already has an index, can't add offset. - Ops->getOperand(3).setImmedValue(FieldOff+ - Ops->getOperand(3).getImmedValue()); - } + Disp += TD.getStructLayout(StTy)->MemberOffsets[CUI->getValue()]; GEPOps.pop_back(); // Consume a GEP operand GEPTypes.pop_back(); } else { @@ -2362,10 +2439,7 @@ // If idx is a constant, fold it into the offset. if (ConstantSInt *CSI = dyn_cast(idx)) { - unsigned elementSize = TD.getTypeSize(SqTy->getElementType()); - unsigned Offset = elementSize*CSI->getValue(); - Ops->getOperand(3).setImmedValue(Offset+ - Ops->getOperand(3).getImmedValue()); + Disp += TD.getTypeSize(SqTy->getElementType())*CSI->getValue(); } else { // If we can't handle it, return. return; @@ -2375,15 +2449,49 @@ GEPTypes.pop_back(); } } + + // GEPTypes is empty, which means we have a single operand left. See if we + // can set it as the base register. + // + // FIXME: When addressing modes are more powerful/correct, we could load + // global addresses directly as 32-bit immediates. + assert(BaseReg == 0); + BaseReg = MBB ? getReg(GEPOps[0], MBB, IP) : 0; + GEPOps.pop_back(); // Consume the last GEP operand } +/// isGEPFoldable - Return true if the specified GEP can be completely +/// folded into the addressing mode of a load/store or lea instruction. +bool ISel::isGEPFoldable(MachineBasicBlock *MBB, + Value *Src, User::op_iterator IdxBegin, + User::op_iterator IdxEnd, unsigned &BaseReg, + unsigned &Scale, unsigned &IndexReg, unsigned &Disp) { + if (ConstantPointerRef *CPR = dyn_cast(Src)) + Src = CPR->getValue(); + + std::vector GEPOps; + GEPOps.resize(IdxEnd-IdxBegin+1); + GEPOps[0] = Src; + std::copy(IdxBegin, IdxEnd, GEPOps.begin()+1); + + std::vector GEPTypes; + GEPTypes.assign(gep_type_begin(Src->getType(), IdxBegin, IdxEnd), + gep_type_end(Src->getType(), IdxBegin, IdxEnd)); + + MachineBasicBlock::iterator IP; + if (MBB) IP = MBB->end(); + getGEPIndex(MBB, IP, GEPOps, GEPTypes, BaseReg, Scale, IndexReg, Disp); + + // We can fold it away iff the getGEPIndex call eliminated all operands. + return GEPOps.empty(); +} + void ISel::emitGEPOperation(MachineBasicBlock *MBB, MachineBasicBlock::iterator IP, Value *Src, User::op_iterator IdxBegin, User::op_iterator IdxEnd, unsigned TargetReg) { const TargetData &TD = TM.getTargetData(); - if (ConstantPointerRef *CPR = dyn_cast(Src)) Src = CPR->getValue(); @@ -2396,27 +2504,28 @@ GEPTypes.assign(gep_type_begin(Src->getType(), IdxBegin, IdxEnd), gep_type_end(Src->getType(), IdxBegin, IdxEnd)); - // DummyMI - A dummy instruction to pass into getGEPIndex. The opcode doesn't - // matter, we just need 4 MachineOperands. - MachineInstr *DummyMI = - BuildMI(X86::PHI, 4).addReg(0).addZImm(1).addReg(0).addSImm(0); - // Keep emitting instructions until we consume the entire GEP instruction. while (!GEPOps.empty()) { unsigned OldSize = GEPOps.size(); - getGEPIndex(GEPOps, GEPTypes, DummyMI, TD); + unsigned BaseReg, Scale, IndexReg, Disp; + getGEPIndex(MBB, IP, GEPOps, GEPTypes, BaseReg, Scale, IndexReg, Disp); if (GEPOps.size() != OldSize) { // getGEPIndex consumed some of the input. Build an LEA instruction here. - assert(DummyMI->getOperand(0).getReg() == 0 && - DummyMI->getOperand(1).getImmedValue() == 1 && - DummyMI->getOperand(2).getReg() == 0 && - "Unhandled GEP fold!"); - if (unsigned Offset = DummyMI->getOperand(3).getImmedValue()) { - unsigned Reg = makeAnotherReg(Type::UIntTy); - addRegOffset(BMI(MBB, IP, X86::LEAr32, 5, TargetReg), Reg, Offset); - TargetReg = Reg; + unsigned NextTarget = 0; + if (!GEPOps.empty()) { + assert(BaseReg == 0 && + "getGEPIndex should have left the base register open for chaining!"); + NextTarget = BaseReg = makeAnotherReg(Type::UIntTy); } + + if (IndexReg == 0 && Disp == 0) + BMI(MBB, IP, X86::MOVrr32, 1, TargetReg).addReg(BaseReg); + else + addFullAddress(BMI(MBB, IP, X86::LEAr32, 5, TargetReg), + BaseReg, Scale, IndexReg, Disp); + --IP; + TargetReg = NextTarget; } else if (GEPTypes.empty()) { // The getGEPIndex operation didn't want to build an LEA. Check to see if // all operands are consumed but the base pointer. If so, just load it @@ -2428,6 +2537,27 @@ BMI(MBB, IP, X86::MOVrr32, 1, TargetReg).addReg(BaseReg); } break; // we are now done + + } else if (const StructType *StTy = dyn_cast(GEPTypes.back())) { + // It's a struct access. CUI is the index into the structure, + // which names the field. This index must have unsigned type. + const ConstantUInt *CUI = cast(GEPOps.back()); + GEPOps.pop_back(); // Consume a GEP operand + GEPTypes.pop_back(); + + // Use the TargetData structure to pick out what the layout of the + // structure is in memory. Since the structure index must be constant, we + // can get its value and use it to find the right byte offset from the + // StructLayout class's list of structure member offsets. + unsigned idxValue = CUI->getValue(); + unsigned FieldOff = TD.getStructLayout(StTy)->MemberOffsets[idxValue]; + if (FieldOff) { + unsigned Reg = makeAnotherReg(Type::UIntTy); + // Emit an ADD to add FieldOff to the basePtr. + BMI(MBB, IP, X86::ADDri32, 2, TargetReg).addReg(Reg).addZImm(FieldOff); + --IP; // Insert the next instruction before this one. + TargetReg = Reg; // Codegen the rest of the GEP into this + } } else { // It's an array or pointer access: [ArraySize x ElementType]. const SequentialType *SqTy = cast(GEPTypes.back()); @@ -2496,8 +2626,6 @@ } } } - - delete DummyMI; } From lattner at cs.uiuc.edu Wed Feb 25 01:02:03 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 01:02:03 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/InstSelectSimple.cpp Message-ID: <200402250701.BAA23681@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: InstSelectSimple.cpp updated: 1.177 -> 1.178 --- Log message: Teach the instruction selector how to transform 'array' GEP computations into X86 scaled indexes. This allows us to compile GEP's like this: int* %test([10 x { int, { int } }]* %X, int %Idx) { %Idx = cast int %Idx to long %X = getelementptr [10 x { int, { int } }]* %X, long 0, long %Idx, ubyte 1, ubyte 0 ret int* %X } Into a single address computation: test: mov %EAX, DWORD PTR [%ESP + 4] mov %ECX, DWORD PTR [%ESP + 8] lea %EAX, DWORD PTR [%EAX + 8*%ECX + 4] ret Before it generated: test: mov %EAX, DWORD PTR [%ESP + 4] mov %ECX, DWORD PTR [%ESP + 8] shl %ECX, 3 add %EAX, %ECX lea %EAX, DWORD PTR [%EAX + 4] ret This is useful for things like int/float/double arrays, as the indexing can be folded into the loads&stores, reducing register pressure and decreasing the pressure on the decode unit. With these changes, I expect our performance on 256.bzip2 and gzip to improve a lot. On bzip2 for example, we go from this: 10665 asm-printer - Number of machine instrs printed 40 ra-local - Number of loads/stores folded into instructions 1708 ra-local - Number of loads added 1532 ra-local - Number of stores added 1354 twoaddressinstruction - Number of instructions added 1354 twoaddressinstruction - Number of two-address instructions 2794 x86-peephole - Number of peephole optimization performed to this: 9873 asm-printer - Number of machine instrs printed 41 ra-local - Number of loads/stores folded into instructions 1710 ra-local - Number of loads added 1521 ra-local - Number of stores added 789 twoaddressinstruction - Number of instructions added 789 twoaddressinstruction - Number of two-address instructions 2142 x86-peephole - Number of peephole optimization performed ... and these types of instructions are often in tight loops. Linear scan is also helped, but not as much. It goes from: 8787 asm-printer - Number of machine instrs printed 2389 liveintervals - Number of identity moves eliminated after coalescing 2288 liveintervals - Number of interval joins performed 3522 liveintervals - Number of intervals after coalescing 5810 liveintervals - Number of original intervals 700 spiller - Number of loads added 487 spiller - Number of stores added 303 spiller - Number of register spills 1354 twoaddressinstruction - Number of instructions added 1354 twoaddressinstruction - Number of two-address instructions 363 x86-peephole - Number of peephole optimization performed to: 7982 asm-printer - Number of machine instrs printed 1759 liveintervals - Number of identity moves eliminated after coalescing 1658 liveintervals - Number of interval joins performed 3282 liveintervals - Number of intervals after coalescing 4940 liveintervals - Number of original intervals 635 spiller - Number of loads added 452 spiller - Number of stores added 288 spiller - Number of register spills 789 twoaddressinstruction - Number of instructions added 789 twoaddressinstruction - Number of two-address instructions 258 x86-peephole - Number of peephole optimization performed Though I'm not complaining about the drop in the number of intervals. :) --- Diffs of the changes: (+23 -24) Index: llvm/lib/Target/X86/InstSelectSimple.cpp diff -u llvm/lib/Target/X86/InstSelectSimple.cpp:1.177 llvm/lib/Target/X86/InstSelectSimple.cpp:1.178 --- llvm/lib/Target/X86/InstSelectSimple.cpp:1.177 Wed Feb 25 00:13:04 2004 +++ llvm/lib/Target/X86/InstSelectSimple.cpp Wed Feb 25 01:00:55 2004 @@ -2438,11 +2438,30 @@ assert(idx->getType() == Type::LongTy && "Bad GEP array index!"); // If idx is a constant, fold it into the offset. + unsigned TypeSize = TD.getTypeSize(SqTy->getElementType()); if (ConstantSInt *CSI = dyn_cast(idx)) { - Disp += TD.getTypeSize(SqTy->getElementType())*CSI->getValue(); + Disp += TypeSize*CSI->getValue(); } else { - // If we can't handle it, return. - return; + // If the index reg is already taken, we can't handle this index. + if (IndexReg) return; + + // If this is a size that we can handle, then add the index as + switch (TypeSize) { + case 1: case 2: case 4: case 8: + // These are all acceptable scales on X86. + Scale = TypeSize; + break; + default: + // Otherwise, we can't handle this scale + return; + } + + if (CastInst *CI = dyn_cast(idx)) + if (CI->getOperand(0)->getType() == Type::IntTy || + CI->getOperand(0)->getType() == Type::UIntTy) + idx = CI->getOperand(0); + + IndexReg = MBB ? getReg(idx, MBB, IP) : 1; } GEPOps.pop_back(); // Consume a GEP operand @@ -2456,7 +2475,7 @@ // FIXME: When addressing modes are more powerful/correct, we could load // global addresses directly as 32-bit immediates. assert(BaseReg == 0); - BaseReg = MBB ? getReg(GEPOps[0], MBB, IP) : 0; + BaseReg = MBB ? getReg(GEPOps[0], MBB, IP) : 1; GEPOps.pop_back(); // Consume the last GEP operand } @@ -2538,26 +2557,6 @@ } break; // we are now done - } else if (const StructType *StTy = dyn_cast(GEPTypes.back())) { - // It's a struct access. CUI is the index into the structure, - // which names the field. This index must have unsigned type. - const ConstantUInt *CUI = cast(GEPOps.back()); - GEPOps.pop_back(); // Consume a GEP operand - GEPTypes.pop_back(); - - // Use the TargetData structure to pick out what the layout of the - // structure is in memory. Since the structure index must be constant, we - // can get its value and use it to find the right byte offset from the - // StructLayout class's list of structure member offsets. - unsigned idxValue = CUI->getValue(); - unsigned FieldOff = TD.getStructLayout(StTy)->MemberOffsets[idxValue]; - if (FieldOff) { - unsigned Reg = makeAnotherReg(Type::UIntTy); - // Emit an ADD to add FieldOff to the basePtr. - BMI(MBB, IP, X86::ADDri32, 2, TargetReg).addReg(Reg).addZImm(FieldOff); - --IP; // Insert the next instruction before this one. - TargetReg = Reg; // Codegen the rest of the GEP into this - } } else { // It's an array or pointer access: [ArraySize x ElementType]. const SequentialType *SqTy = cast(GEPTypes.back()); From lattner at cs.uiuc.edu Wed Feb 25 09:16:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 09:16:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/LowerSwitch.cpp Message-ID: <200402251515.JAA05683@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: LowerSwitch.cpp updated: 1.10 -> 1.11 --- Log message: Fix incorrect debug code --- Diffs of the changes: (+2 -1) Index: llvm/lib/Transforms/Scalar/LowerSwitch.cpp diff -u llvm/lib/Transforms/Scalar/LowerSwitch.cpp:1.10 llvm/lib/Transforms/Scalar/LowerSwitch.cpp:1.11 --- llvm/lib/Transforms/Scalar/LowerSwitch.cpp:1.10 Fri Jan 9 00:02:20 2004 +++ llvm/lib/Transforms/Scalar/LowerSwitch.cpp Wed Feb 25 09:15:04 2004 @@ -115,7 +115,8 @@ Case& Pivot = *(Begin + Mid); DEBUG(std::cerr << "Pivot ==> " - << cast(Pivot.first)->getValue() << "\n"); + << (int64_t)cast(Pivot.first)->getRawValue() + << "\n"); BasicBlock* LBranch = switchConvert(LHS.begin(), LHS.end(), Val, OrigBlock, Default); From lattner at cs.uiuc.edu Wed Feb 25 10:38:02 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 10:38:02 2004 Subject: [llvm-commits] CVS: llvm/docs/ReleaseNotes.html Message-ID: <200402251637.KAA01611@zion.cs.uiuc.edu> Changes in directory llvm/docs: ReleaseNotes.html updated: 1.133 -> 1.134 --- Log message: Substantial improvements and cleanups for the release notes. We were missing a bunch of stuff! :) --- Diffs of the changes: (+37 -20) Index: llvm/docs/ReleaseNotes.html diff -u llvm/docs/ReleaseNotes.html:1.133 llvm/docs/ReleaseNotes.html:1.134 --- llvm/docs/ReleaseNotes.html:1.133 Mon Feb 23 21:50:24 2004 +++ llvm/docs/ReleaseNotes.html Wed Feb 25 10:36:51 2004 @@ -69,20 +69,28 @@
    -

    This is the third public release of the LLVM compiler infrastructure. +

    +This is the third public release of the LLVM compiler infrastructure. This +release incorporates several new features (including +exception handling support for the native code generators, the start of a +source-level debugger, and profile guided optimizer components), many speedups and code quality +improvements, documentation improvements, and a small collection of important bug fixes. Overall, this is our highest quality release to +date, and we encourage you to upgrade if you are using LLVM 1.0 or 1.1.

    -

    At this time, LLVM is known to correctly compile and run all C +

    FIXME: UPDATE: +At this time, LLVM is known to correctly compile and run all C & C++ SPEC CPU2000 benchmarks, the Olden benchmarks, and the Ptrdist benchmarks. It has also been used to compile many other programs. LLVM now also works with a broad variety of C++ programs, though it has still received less testing than the C front-end.

    -
    -This release implements the following new features: +This release implements the following new features:
      @@ -90,8 +98,23 @@
    1. LLVM 1.2 encodes bytecode files for large programs in 10-30% less space.
    2. LLVM can now feed profile information back into optimizers for Profile Guided Optimization, and includes a simple basic block reordering pass.
    3. The LLVM JIT lazily initializes global variables, reducing startup time for programs with lots of globals (like C++ programs).
    4. + +
    5. The build and installation infrastructure in this release is dramatically +improved. There is now an autoconf/AutoRegen.sh script +that you can run to rebuild the configure script and its associated +files as well as beta support for "make install" and RPM package generation.
    6. +
    7. The "tblgen" tool is now documented.
    8. +
    9. The LLVM code generator can now fold spill code into instructions on targets +that support it.
    10. LLVM now no longer depends on the boost library.
    11. +
    12. The X86 backend now generates substantially better native code, and is faster.
    13. +
    14. The C backend has been turned moved from the "llvm-dis" tool to the "llc" +tool. You can activate it with "llc -march=c foo.bc -o foo.c".
    @@ -110,7 +133,7 @@
    -In this release, the following Quality of Implementation issues were fixed: +In this release, the following Quality of Implementation issues were fixed:
      @@ -123,20 +146,13 @@
    1. [loadvn/inline/scalarrepl] Slow optimizations with extremely large basic blocks
    2. [asmparser] Really slow parsing of types with complex upreferences
    3. [llvmgcc] C front-end does not emit 'zeroinitializer' when possible
    4. +
    5. [llvmgcc] Structure copies result in a LOT of code
    6. LLVM is now much more memory efficient when handling large zero initialized arrays
    -LLVM gained several improvements to its build and installation -infrastructure in this release. There is now -a autoconf/AutoRegen.sh script that you can run to rebuild the -configure script and its associated files -(Bug 105) as well as beta support -for "make install" (Bug 208 and -Bug 220) and RPM package generation -(Bug 203). -Additionally, in this release, the following build problems were fixed: +In this release, the following build problems were fixed:
      @@ -147,20 +163,22 @@
      -In this release, the following Code Quality issues were fixed: +In this release, the following Code Quality issues were fixed:
      1. [loopsimplify] Many pointless phi nodes are created
      2. -
      3. The X86 backend didn't generate fchs to negate floating point numbers
      4. -
      5. The X86 backend didn't expand memcpy() into the rep movs instruction
      6. [x86] wierd stack/frame pointer manipulation
      7. + +
      8. The X86 backend now generate fchs to negate floating point numbers, +compiles memcpy() into the rep movs instruction, and makes much better +use of powerful addressing modes and instructions.
      -In this release, the following bugs in the previous release were fixed: +In this release, the following bugs in the previous release were fixed:

      Bugs in the LLVM Core:

      @@ -197,7 +215,6 @@
    1. [llvmg++] Dynamically initialized constants cannot be marked 'constant'
    2. [llvmgcc] floating-point unary minus is incorrect for +0.0
    3. [llvm-gcc] miscompilation of 'X = Y = Z' with aggregate values
    4. -
    5. [llvmgcc] Structure copies result in a LOT of code
    6. [llvm-gcc] miscompilation when a function is re-declared as static
    @@ -589,7 +606,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /> The LLVM Compiler Infrastructure
    - Last modified: $Date: 2004/02/24 03:50:24 $ + Last modified: $Date: 2004/02/25 16:36:51 $ From criswell at cs.uiuc.edu Wed Feb 25 11:16:01 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Feb 25 11:16:01 2004 Subject: [llvm-commits] CVS: llvm/utils/llvm-native-gcc Message-ID: <200402251715.LAA16320@choi.cs.uiuc.edu> Changes in directory llvm/utils: llvm-native-gcc updated: 1.1 -> 1.2 --- Log message: Updated to use llc to generate CBE code. --- Diffs of the changes: (+2 -2) Index: llvm/utils/llvm-native-gcc diff -u llvm/utils/llvm-native-gcc:1.1 llvm/utils/llvm-native-gcc:1.2 --- llvm/utils/llvm-native-gcc:1.1 Tue Dec 9 16:23:24 2003 +++ llvm/utils/llvm-native-gcc Wed Feb 25 11:15:02 2004 @@ -114,7 +114,7 @@ } else { $GeneratedCode = "/tmp/nativebuild-$$.c"; } - run "llvm-dis -c -f -o $GeneratedCode $BCFile"; + run "llc -march=c -f -o $GeneratedCode $BCFile"; } elsif ($Backend eq 'llc') { if ($SaveTemps) { $GeneratedCode = "${OutputFile}.s"; @@ -145,7 +145,7 @@ my $GeneratedCode; if ($Backend eq 'cbe') { $GeneratedCode = "${OutputFile}.cbe.c"; - run "llvm-dis -c -f -o $GeneratedCode $BCFile"; + run "llc -march=c -f -o $GeneratedCode $BCFile"; } elsif ($Backend eq 'llc') { $GeneratedCode = "${OutputFile}.llc.s"; run "llc -f -o $GeneratedCode $BCFile"; From lattner at cs.uiuc.edu Wed Feb 25 11:44:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 11:44:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Analysis/DataStructure/Local.cpp Message-ID: <200402251743.LAA27179@zion.cs.uiuc.edu> Changes in directory llvm/lib/Analysis/DataStructure: Local.cpp updated: 1.88 -> 1.89 --- Log message: Add a bunch more functions used by perlbmk --- Diffs of the changes: (+50 -14) Index: llvm/lib/Analysis/DataStructure/Local.cpp diff -u llvm/lib/Analysis/DataStructure/Local.cpp:1.88 llvm/lib/Analysis/DataStructure/Local.cpp:1.89 --- llvm/lib/Analysis/DataStructure/Local.cpp:1.88 Tue Feb 24 16:17:00 2004 +++ llvm/lib/Analysis/DataStructure/Local.cpp Wed Feb 25 11:43:20 2004 @@ -484,8 +484,13 @@ N->setHeapNodeMarker()->setModifiedMarker()->setReadMarker(); return; } else if (F->getName() == "atoi" || F->getName() == "atof" || + F->getName() == "atol" || F->getName() == "atoll" || F->getName() == "remove" || F->getName() == "unlink" || - F->getName() == "rename") { + F->getName() == "rename" || F->getName() == "memcmp" || + F->getName() == "strcmp" || F->getName() == "strncmp" || + F->getName() == "execl" || F->getName() == "execlp" || + F->getName() == "execle" || F->getName() == "execv" || + F->getName() == "execvp" || F->getName() == "chmod") { // These functions read all of their pointer operands. for (CallSite::arg_iterator AI = CS.arg_begin(), E = CS.arg_end(); AI != E; ++AI) { @@ -494,13 +499,35 @@ N->setReadMarker(); } return; + } else if (F->getName() == "stat" || F->getName() == "fstat" || + F->getName() == "lstat") { + // These functions read their first operand if its a pointer. + CallSite::arg_iterator AI = CS.arg_begin(); + if (isPointerType((*AI)->getType())) { + DSNodeHandle Path = getValueDest(**AI); + if (DSNode *N = Path.getNode()) N->setReadMarker(); + } + + // Then they write into the stat buffer. + DSNodeHandle StatBuf = getValueDest(**++AI); + if (DSNode *N = StatBuf.getNode()) { + N->setModifiedMarker(); + const Type *StatTy = F->getFunctionType()->getParamType(1); + if (const PointerType *PTy = dyn_cast(StatTy)) + N->mergeTypeInfo(PTy->getElementType(), StatBuf.getOffset()); + } - } else if (F->getName() == "fopen" && CS.arg_end()-CS.arg_begin() == 2){ + + return; + } else if (F->getName() == "fopen" || F->getName() == "fdopen") { // fopen reads the mode argument strings. CallSite::arg_iterator AI = CS.arg_begin(); - DSNodeHandle Path = getValueDest(**AI); + if (isPointerType((*AI)->getType())) { + DSNodeHandle Path = getValueDest(**AI); + if (DSNode *N = Path.getNode()) N->setReadMarker(); + } + DSNodeHandle Mode = getValueDest(**++AI); - if (DSNode *N = Path.getNode()) N->setReadMarker(); if (DSNode *N = Mode.getNode()) N->setReadMarker(); // fopen allocates in an unknown way and writes to the file @@ -513,13 +540,6 @@ N->mergeTypeInfo(PTy->getElementType(), Result.getOffset()); } return; - } else if (F->getName() == "memcmp" && CS.arg_end()-CS.arg_begin() ==3){ - // memcmp reads the memory pointed to by the first two operands. - if (DSNode *N = getValueDest(**CS.arg_begin()).getNode()) - N->setReadMarker(); - if (DSNode *N = getValueDest(**++CS.arg_begin()).getNode()) - N->setReadMarker(); - return; } else if (F->getName() == "fclose" && CS.arg_end()-CS.arg_begin() ==1){ // fclose reads and deallocates the memory in an unknown way for the // file descriptor. It merges the FILE type into the descriptor. @@ -577,10 +597,20 @@ ++AI; ++AI; // Reads and writes file descriptor, merge in FILE type. - H = getValueDest(**CS.arg_begin()); + H = getValueDest(**AI); + if (DSNode *N = H.getNode()) { + N->setReadMarker()->setModifiedMarker(); + const Type *ArgTy = F->getFunctionType()->getParamType(2); + if (const PointerType *PTy = dyn_cast(ArgTy)) + N->mergeTypeInfo(PTy->getElementType(), H.getOffset()); + } + return; + } else if (F->getName() == "ungetc" &&CS.arg_end()-CS.arg_begin() == 2){ + // ungetc reads and writes the memory for the file descriptor. + DSNodeHandle H = getValueDest(**--CS.arg_end()); if (DSNode *N = H.getNode()) { N->setReadMarker()->setModifiedMarker(); - const Type *ArgTy = *(F->getFunctionType()->param_begin()+2); + const Type *ArgTy = F->getFunctionType()->getParamType(1); if (const PointerType *PTy = dyn_cast(ArgTy)) N->mergeTypeInfo(PTy->getElementType(), H.getOffset()); } @@ -608,7 +638,6 @@ if (const PointerType *PTy = dyn_cast(ArgTy)) N->mergeTypeInfo(PTy->getElementType(), H.getOffset()); } - } for (; AI != E; ++AI) { @@ -671,6 +700,13 @@ if (const PointerType *PTy = dyn_cast(ArgTy)) N->mergeTypeInfo(PTy->getElementType(), H.getOffset()); } + return; + } else if (F->getName() == "strchr" || F->getName() == "strrchr") { + // These read their first argument, and return it. + DSNodeHandle H = getValueDest(**CS.arg_begin()); + if (DSNode *N = H.getNode()) + N->setReadMarker(); + H.mergeWith(getValueDest(*CS.getInstruction())); // Returns buffer return; } else { From gaeke at cs.uiuc.edu Wed Feb 25 12:29:02 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 12:29:02 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV9/ Message-ID: <200402251825.MAA15146@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/SparcV9: --- Log message: Directory /home/vadve/shared/PublicCVS/llvm/lib/Target/SparcV9 added to the repository --- Diffs of the changes: (+0 -0) From alkis at cs.uiuc.edu Wed Feb 25 12:39:02 2004 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 12:39:02 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/TEST.nightly.report Message-ID: <200402251838.MAA20410@zion.cs.uiuc.edu> Changes in directory llvm/test/Programs: TEST.nightly.report updated: 1.22 -> 1.23 --- Log message: Update column offsets after jit-ls addition. --- Diffs of the changes: (+6 -6) Index: llvm/test/Programs/TEST.nightly.report diff -u llvm/test/Programs/TEST.nightly.report:1.22 llvm/test/Programs/TEST.nightly.report:1.23 --- llvm/test/Programs/TEST.nightly.report:1.22 Mon Feb 23 10:21:11 2004 +++ llvm/test/Programs/TEST.nightly.report Wed Feb 25 12:38:17 2004 @@ -21,8 +21,8 @@ sub GCCCBERatio { my ($Cols, $Col) = @_; - my $GCC = $Cols->[$Col-5]; - my $CBE = $Cols->[$Col-4]; + my $GCC = $Cols->[$Col-6]; + my $CBE = $Cols->[$Col-5]; if ($GCC ne "*" and $CBE ne "*" and $CBE != "0") { return sprintf("%3.2f", $GCC/$CBE); } else { @@ -32,8 +32,8 @@ sub GCCLLCRatio { my ($Cols, $Col) = @_; - my $GCC = $Cols->[$Col-6]; - my $LLC = $Cols->[$Col-4]; + my $GCC = $Cols->[$Col-7]; + my $LLC = $Cols->[$Col-5]; if ($GCC ne "*" and $LLC ne "*" and $LLC != "0") { return sprintf("%3.2f", $GCC/$LLC); } else { @@ -43,8 +43,8 @@ sub GCCLLC_LSRatio { my ($Cols, $Col) = @_; - my $GCC = $Cols->[$Col-7]; - my $LLC_LS = $Cols->[$Col-4]; + my $GCC = $Cols->[$Col-8]; + my $LLC_LS = $Cols->[$Col-5]; if ($GCC ne "*" and $LLC_LS ne "*" and $LLC_LS != "0") { return sprintf("%3.2f", $GCC/$LLC_LS); } else { From gaeke at cs.uiuc.edu Wed Feb 25 12:45:02 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 12:45:02 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV9/EmitBytecodeToAssembly.cpp Makefile MappingInfo.h SparcV9.burg.in SparcV9.td SparcV9AsmPrinter.cpp SparcV9CodeEmitter.cpp SparcV9FrameInfo.cpp SparcV9FrameInfo.h SparcV9InstrInfo.cpp SparcV9InstrInfo.h SparcV9InstrSelection.cpp SparcV9InstrSelectionSupport.h SparcV9Internals.h SparcV9JITInfo.h SparcV9PeepholeOpts.cpp SparcV9PreSelection.cpp SparcV9PrologEpilogInserter.cpp SparcV9RegClassInfo.cpp SparcV9RegClassInfo.h SparcV9RegInfo.cpp SparcV9RegInfo.h SparcV9SchedInfo.cpp SparcV9TargetMachine.cpp SparcV9TargetMachine.h SparcV9_F2.td SparcV9_F3.td SparcV9_F4.td SparcV9_Reg.td Message-ID: <200402251844.MAA32315@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/SparcV9: EmitBytecodeToAssembly.cpp updated: 1.12 -> 1.13 Makefile updated: 1.40 -> 1.41 MappingInfo.h updated: 1.6 -> 1.7 SparcV9.burg.in updated: 1.11 -> 1.12 SparcV9.td updated: 1.29 -> 1.30 SparcV9AsmPrinter.cpp updated: 1.107 -> 1.108 SparcV9CodeEmitter.cpp updated: 1.57 -> 1.58 SparcV9FrameInfo.cpp updated: 1.1 -> 1.2 SparcV9FrameInfo.h updated: 1.1 -> 1.2 SparcV9InstrInfo.cpp updated: 1.59 -> 1.60 SparcV9InstrInfo.h updated: 1.2 -> 1.3 SparcV9InstrSelection.cpp updated: 1.133 -> 1.134 SparcV9InstrSelectionSupport.h updated: 1.13 -> 1.14 SparcV9Internals.h updated: 1.110 -> 1.111 SparcV9JITInfo.h updated: 1.3 -> 1.4 SparcV9PeepholeOpts.cpp updated: 1.21 -> 1.22 SparcV9PreSelection.cpp updated: 1.27 -> 1.28 SparcV9PrologEpilogInserter.cpp updated: 1.35 -> 1.36 SparcV9RegClassInfo.cpp updated: 1.34 -> 1.35 SparcV9RegClassInfo.h updated: 1.23 -> 1.24 SparcV9RegInfo.cpp updated: 1.119 -> 1.120 SparcV9RegInfo.h updated: 1.9 -> 1.10 SparcV9SchedInfo.cpp updated: 1.9 -> 1.10 SparcV9TargetMachine.cpp updated: 1.99 -> 1.100 SparcV9TargetMachine.h updated: 1.4 -> 1.5 SparcV9_F2.td updated: 1.8 -> 1.9 SparcV9_F3.td updated: 1.17 -> 1.18 SparcV9_F4.td updated: 1.10 -> 1.11 SparcV9_Reg.td updated: 1.7 -> 1.8 --- Log message: Great renaming: Sparc --> SparcV9 --- Diffs of the changes: (+370 -370) Index: llvm/lib/Target/SparcV9/EmitBytecodeToAssembly.cpp diff -u llvm/lib/Target/SparcV9/EmitBytecodeToAssembly.cpp:1.12 llvm/lib/Target/SparcV9/EmitBytecodeToAssembly.cpp:1.13 --- llvm/lib/Target/SparcV9/EmitBytecodeToAssembly.cpp:1.12 Wed Nov 12 18:19:02 2003 +++ llvm/lib/Target/SparcV9/EmitBytecodeToAssembly.cpp Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===-- EmitBytecodeToAssembly.cpp - Emit bytecode to Sparc .s File --------==// +//===-- EmitBytecodeToAssembly.cpp - Emit bytecode to SparcV9 .s File --------==// // // The LLVM Compiler Infrastructure // @@ -13,7 +13,7 @@ // //===----------------------------------------------------------------------===// -#include "SparcInternals.h" +#include "SparcV9Internals.h" #include "llvm/Pass.h" #include "llvm/Bytecode/Writer.h" #include @@ -86,13 +86,13 @@ << "\n"; } - // SparcBytecodeWriter - Write bytecode out to a stream that is sparc'ified - class SparcBytecodeWriter : public Pass { + // SparcV9BytecodeWriter - Write bytecode out to a stream that is sparc'ified + class SparcV9BytecodeWriter : public Pass { std::ostream &Out; public: - SparcBytecodeWriter(std::ostream &out) : Out(out) {} + SparcV9BytecodeWriter(std::ostream &out) : Out(out) {} - const char *getPassName() const { return "Emit Bytecode to Sparc Assembly";} + const char *getPassName() const { return "Emit Bytecode to SparcV9 Assembly";} virtual bool run(Module &M) { // Write an object containing the bytecode to the SPARC assembly stream @@ -113,7 +113,7 @@ } // end anonymous namespace Pass *createBytecodeAsmPrinterPass(std::ostream &Out) { - return new SparcBytecodeWriter(Out); + return new SparcV9BytecodeWriter(Out); } } // End llvm namespace Index: llvm/lib/Target/SparcV9/Makefile diff -u llvm/lib/Target/SparcV9/Makefile:1.40 llvm/lib/Target/SparcV9/Makefile:1.41 --- llvm/lib/Target/SparcV9/Makefile:1.40 Fri Jan 9 12:15:22 2004 +++ llvm/lib/Target/SparcV9/Makefile Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -##===- lib/Target/Sparc/Makefile ---------------------------*- Makefile -*-===## +##===- lib/Target/SparcV9/Makefile ---------------------------*- Makefile -*-===## # # The LLVM Compiler Infrastructure # @@ -7,10 +7,10 @@ # ##===----------------------------------------------------------------------===## LEVEL = ../../.. -LIBRARYNAME = sparc +LIBRARYNAME = sparcv9 DIRS = InstrSelection RegAlloc LiveVar -ExtraSource = Sparc.burm.cpp +ExtraSource = SparcV9.burm.cpp include $(LEVEL)/Makefile.common @@ -20,26 +20,26 @@ DEBUG_FLAG = -D_DEBUG endif -Sparc.burg.in1 : $(SourceDir)/Sparc.burg.in +SparcV9.burg.in1 : $(SourceDir)/SparcV9.burg.in $(CXX) -E -I$(LLVM_SRC_ROOT)/include $(DEBUG_FLAG) -x c++ $< | $(SED) '/^#/d' | $(SED) 's/Ydefine/#define/' > $@ -Sparc.burm : Sparc.burg.in1 +SparcV9.burm : SparcV9.burg.in1 $(CXX) -E -I$(LLVM_SRC_ROOT)/include $(DEBUG_FLAG) -x c++ $< | $(SED) '/^#/d' | $(SED) 's/^Xinclude/#include/' | $(SED) 's/^Xdefine/#define/' > $@ -Sparc.burm.cpp: Sparc.burm +SparcV9.burm.cpp: SparcV9.burm @echo "Burging `basename $<`" $(RunBurg) $< -o $@ -$(BUILD_OBJ_DIR)/Debug/Sparc.burm.lo: Sparc.burm.cpp +$(BUILD_OBJ_DIR)/Debug/SparcV9.burm.lo: SparcV9.burm.cpp $(CompileG) $< -o $@ -$(BUILD_OBJ_DIR)/Release/Sparc.burm.lo: Sparc.burm.cpp +$(BUILD_OBJ_DIR)/Release/SparcV9.burm.lo: SparcV9.burm.cpp $(CompileO) $< -o $@ -$(BUILD_OBJ_DIR)/Profile/Sparc.burm.lo: Sparc.burm.cpp +$(BUILD_OBJ_DIR)/Profile/SparcV9.burm.lo: SparcV9.burm.cpp $(CompileP) $< -o $@ -$(BUILD_OBJ_DIR)/Depend/Sparc.burm.d: $(BUILD_OBJ_DIR)/Depend/.dir +$(BUILD_OBJ_DIR)/Depend/SparcV9.burm.d: $(BUILD_OBJ_DIR)/Depend/.dir touch $@ TARGET_NAME := SparcV9 @@ -56,5 +56,5 @@ $(TBLGEN) -I $(SourceDir) $< -gen-emitter -o $@ clean:: - $(RM) -f $(TARGET_NAME)CodeEmitter.inc Sparc.burg.in1 Sparc.burm Sparc.burm.cpp + $(RM) -f $(TARGET_NAME)CodeEmitter.inc SparcV9.burg.in1 SparcV9.burm SparcV9.burm.cpp Index: llvm/lib/Target/SparcV9/MappingInfo.h diff -u llvm/lib/Target/SparcV9/MappingInfo.h:1.6 llvm/lib/Target/SparcV9/MappingInfo.h:1.7 --- llvm/lib/Target/SparcV9/MappingInfo.h:1.6 Tue Nov 11 16:41:33 2003 +++ llvm/lib/Target/SparcV9/MappingInfo.h Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===- lib/Target/Sparc/MappingInfo.h ---------------------------*- C++ -*-===// +//===- lib/Target/SparcV9/MappingInfo.h ---------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // Index: llvm/lib/Target/SparcV9/SparcV9.burg.in diff -u llvm/lib/Target/SparcV9/SparcV9.burg.in:1.11 llvm/lib/Target/SparcV9/SparcV9.burg.in:1.12 --- llvm/lib/Target/SparcV9/SparcV9.burg.in:1.11 Tue Nov 11 16:41:33 2003 +++ llvm/lib/Target/SparcV9/SparcV9.burg.in Wed Feb 25 12:44:15 2004 @@ -46,7 +46,7 @@ %term Or=OrOPCODE %term Xor=XorOPCODE /* Use the next 4 to distinguish bitwise operators from - * logical operators. This is no longer used for Sparc, + * logical operators. This is no longer used for SparcV9, * but may be useful for other target machines. * The last one is the bitwise Not(val) == XOR val, 11..1. * Note that it is also a binary operator, not unary. Index: llvm/lib/Target/SparcV9/SparcV9.td diff -u llvm/lib/Target/SparcV9/SparcV9.td:1.29 llvm/lib/Target/SparcV9/SparcV9.td:1.30 --- llvm/lib/Target/SparcV9/SparcV9.td:1.29 Tue Oct 21 10:17:13 2003 +++ llvm/lib/Target/SparcV9/SparcV9.td Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===- SparcV9.td - Target Description for Sparc V9 Target ----------------===// +//===- SparcV9.td - Target Description for SparcV9 V9 Target ----------------===// // // The LLVM Compiler Infrastructure // @@ -19,7 +19,7 @@ // Instructions //===----------------------------------------------------------------------===// -class InstV9 : Instruction { // Sparc instruction baseline +class InstV9 : Instruction { // SparcV9 instruction baseline field bits<32> Inst; let Namespace = "V9"; @@ -27,7 +27,7 @@ bits<2> op; let Inst{31-30} = op; // Top two bits are the 'op' field - // Bit attributes specific to Sparc instructions + // Bit attributes specific to SparcV9 instructions bit isPasi = 0; // Does this instruction affect an alternate addr space? bit isDeprecated = 0; // Is this instruction deprecated? bit isPrivileged = 0; // Is this a privileged instruction? @@ -62,7 +62,7 @@ } // Section A.4: Branch on Floating-Point Condition Codes (FBfcc) p140 -// The following deprecated instructions don't seem to play nice on Sparc +// The following deprecated instructions don't seem to play nice on SparcV9 /* let isDeprecated = 1 in { let op2 = 0b110 in { @@ -107,7 +107,7 @@ } // Section A.5: Branch on FP condition codes with prediction - p143 -// Not used in the Sparc backend (directly) +// Not used in the SparcV9 backend (directly) /* let op2 = 0b101 in { def FBPA : F2_3<0b1000, "fba">; // Branch always @@ -176,7 +176,7 @@ } // Section A.7: Branch on integer condition codes with prediction - p148 -// Not used in the Sparc backend +// Not used in the SparcV9 backend /* let op2 = 0b001 in { def BPA : F2_3<0b1000, "bpa">; // Branch always @@ -212,7 +212,7 @@ // Section A.10: Divide (64-bit / 32-bit) - p178 -// Not used in the Sparc backend +// Not used in the SparcV9 backend /* let isDeprecated = 1 in { def UDIVr : F3_1<2, 0b001110, "udiv">; // udiv r, r, r @@ -227,7 +227,7 @@ */ // Section A.11: DONE and RETRY - p181 -// Not used in the Sparc backend +// Not used in the SparcV9 backend /* let isPrivileged = 1 in { def DONE : F3_18<0, "done">; // done @@ -247,7 +247,7 @@ def FCMPS : F3_15<2, 0b110101, 0b001010001, "fcmps">; // fcmps %fcc, r1, r2 def FCMPD : F3_15<2, 0b110101, 0b001010010, "fcmpd">; // fcmpd %fcc, r1, r2 def FCMPQ : F3_15<2, 0b110101, 0b001010011, "fcmpq">; // fcmpq %fcc, r1, r2 -// Currently unused in the Sparc backend +// Currently unused in the SparcV9 backend /* def FCMPES : F3_15<2, 0b110101, 0b001010101, "fcmpes">; // fcmpes %fcc, r1, r2 def FCMPED : F3_15<2, 0b110101, 0b001010110, "fcmped">; // fcmped %fcc, r1, r2 @@ -317,7 +317,7 @@ // Not currently used // Section A.24: Jump and Link - p172 -// Mimicking the Sparc's instr def... +// Mimicking the SparcV9's instr def... def JMPLCALLr : F3_1<2, 0b111000, "jmpl">; // jmpl [rs1+rs2], rd def JMPLCALLi : F3_2<2, 0b111000, "jmpl">; // jmpl [rs1+imm], rd def JMPLRETr : F3_1<2, 0b111000, "jmpl">; // jmpl [rs1+rs2], rd @@ -393,7 +393,7 @@ def XNORcci : F3_2<2, 0b010111, "xnorcc">; // xnorcc rs1, imm, rd // Section A.32: Memory Barrier - p186 -// Not currently used in the Sparc backend +// Not currently used in the SparcV9 backend // Section A.33: Move Floating-Point Register on Condition (FMOVcc) // ======================= Single Floating Point ====================== @@ -622,7 +622,7 @@ def UDIVXi : F3_2<2, 0b001101, "udivx">; // udivx r, i, r // Section A.38: Multiply (32-bit) - p200 -// Not used in the Sparc backend +// Not used in the SparcV9 backend /* let Inst{13} = 0 in { def UMULr : F3_1<2, 0b001010, "umul">; // umul r, r, r @@ -639,7 +639,7 @@ */ // Section A.39: Multiply Step - p202 -// Not currently used in the Sparc backend +// Not currently used in the SparcV9 backend // Section A.40: No operation - p204 // NOP is really a pseudo-instruction (special case of SETHI) @@ -652,13 +652,13 @@ } // Section A.41: Population Count - p205 -// Not currently used in the Sparc backend +// Not currently used in the SparcV9 backend // Section A.42: Prefetch Data - p206 -// Not currently used in the Sparc backend +// Not currently used in the SparcV9 backend // Section A.43: Read Privileged Register - p211 -// Not currently used in the Sparc backend +// Not currently used in the SparcV9 backend // Section A.44: Read State Register // The only instr from this section currently used is RDCCR @@ -679,7 +679,7 @@ def RESTOREi : F3_2<2, 0b111101, "restore">; // restore r, i, r // Section A.47: SAVED and RESTORED - p219 -// Not currently used in Sparc backend +// Not currently used in SparcV9 backend // Section A.48: SETHI - p220 let op2 = 0b100 in { @@ -687,7 +687,7 @@ } // Section A.49: Shift - p221 -// Not currently used in the Sparc backend +// Not currently used in the SparcV9 backend /* uses 5 least significant bits of rs2 let x = 0 in { @@ -720,10 +720,10 @@ def SRAXi6 : F3_13<2, 0b100111, "srax">; // srax r, shcnt64, r // Section A.50: Sofware-Initiated Reset - p223 -// Not currently used in the Sparc backend +// Not currently used in the SparcV9 backend // Section A.51: Store Barrier - p224 -// Not currently used in the Sparc backend +// Not currently used in the SparcV9 backend // Section A.52: Store Floating-point - p225 // Store instructions all want their rd register first @@ -732,7 +732,7 @@ def STDFr : F3_1rd<3, 0b100111, "std">; // std r, [r+r] def STDFi : F3_2rd<3, 0b100111, "std">; // std r, [r+i] -// Not currently used in the Sparc backend +// Not currently used in the SparcV9 backend /* def STQFr : F3_1rd<3, 0b100110, "stq">; // stq r, [r+r] def STQFi : F3_2rd<3, 0b100110, "stq">; // stq r, [r+i] @@ -740,7 +740,7 @@ // FIXME: An encoding needs to be chosen here, because STFSRx expect rd=0, // while STXFSRx expect rd=1, but assembly syntax dictates %fsr as first arg. -// These are being disabled because they aren't used in the Sparc backend. +// These are being disabled because they aren't used in the SparcV9 backend. /* let isDeprecated = 1 in { def STFSRr : F3_1<3, 0b100101, "st">; // st %fsr, [r+r] @@ -751,7 +751,7 @@ def STXFSRi : F3_2<3, 0b100101, "stx">; // stx %fsr, [r+i] // Section A.53: Store Floating-Point into Alternate Space - p227 -// Not currently used in the Sparc backend +// Not currently used in the SparcV9 backend // Section A.54: Store Integer - p229 // Store instructions all want their rd register first @@ -765,7 +765,7 @@ def STXi : F3_2rd<3, 0b001110, "stx">; // stx r, [r+i] // Section A.55: Store Integer into Alternate Space - p231 -// Not currently used in the Sparc backend +// Not currently used in the SparcV9 backend // Section A.56: Subtract - p233 def SUBr : F3_1<2, 0b000100, "sub">; // sub r, r, r Index: llvm/lib/Target/SparcV9/SparcV9AsmPrinter.cpp diff -u llvm/lib/Target/SparcV9/SparcV9AsmPrinter.cpp:1.107 llvm/lib/Target/SparcV9/SparcV9AsmPrinter.cpp:1.108 --- llvm/lib/Target/SparcV9/SparcV9AsmPrinter.cpp:1.107 Sat Feb 14 23:55:07 2004 +++ llvm/lib/Target/SparcV9/SparcV9AsmPrinter.cpp Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===-- EmitAssembly.cpp - Emit Sparc Specific .s File ---------------------==// +//===-- EmitAssembly.cpp - Emit SparcV9 Specific .s File ---------------------==// // // The LLVM Compiler Infrastructure // @@ -30,7 +30,7 @@ #include "llvm/Support/Mangler.h" #include "Support/StringExtras.h" #include "Support/Statistic.h" -#include "SparcInternals.h" +#include "SparcV9Internals.h" #include using namespace llvm; @@ -251,7 +251,7 @@ } // getID Wrappers - Ensure consistent usage - // Symbol names in Sparc assembly language have these rules: + // Symbol names in SparcV9 assembly language have these rules: // (a) Must match { letter | _ | . | $ } { letter | _ | . | $ | digit }* // (b) A name beginning in "." is treated as a local name. std::string getID(const Function *F) { @@ -504,19 +504,19 @@ //===----------------------------------------------------------------------===// -// SparcAsmPrinter Code +// SparcV9AsmPrinter Code //===----------------------------------------------------------------------===// namespace { - struct SparcAsmPrinter : public FunctionPass, public AsmPrinter { - inline SparcAsmPrinter(std::ostream &os, const TargetMachine &t) + struct SparcV9AsmPrinter : public FunctionPass, public AsmPrinter { + inline SparcV9AsmPrinter(std::ostream &os, const TargetMachine &t) : AsmPrinter(os, t) {} const Function *currFunction; const char *getPassName() const { - return "Output Sparc Assembly for Functions"; + return "Output SparcV9 Assembly for Functions"; } virtual bool doInitialization(Module &M) { @@ -565,7 +565,7 @@ } // End anonymous namespace inline bool -SparcAsmPrinter::OpIsBranchTargetLabel(const MachineInstr *MI, +SparcV9AsmPrinter::OpIsBranchTargetLabel(const MachineInstr *MI, unsigned int opNum) { switch (MI->getOpcode()) { case V9::JMPLCALLr: @@ -579,7 +579,7 @@ } inline bool -SparcAsmPrinter::OpIsMemoryAddressBase(const MachineInstr *MI, +SparcV9AsmPrinter::OpIsMemoryAddressBase(const MachineInstr *MI, unsigned int opNum) { if (Target.getInstrInfo().isLoad(MI->getOpcode())) return (opNum == 0); @@ -596,7 +596,7 @@ printOneOperand(mop2, opCode); unsigned int -SparcAsmPrinter::printOperands(const MachineInstr *MI, +SparcV9AsmPrinter::printOperands(const MachineInstr *MI, unsigned int opNum) { const MachineOperand& mop = MI->getOperand(opNum); @@ -616,7 +616,7 @@ } void -SparcAsmPrinter::printOneOperand(const MachineOperand &mop, +SparcV9AsmPrinter::printOneOperand(const MachineOperand &mop, MachineOpCode opCode) { bool needBitsFlag = true; @@ -659,7 +659,7 @@ case MachineOperand::MO_PCRelativeDisp: { const Value *Val = mop.getVRegValue(); - assert(Val && "\tNULL Value in SparcAsmPrinter"); + assert(Val && "\tNULL Value in SparcV9AsmPrinter"); if (const BasicBlock *BB = dyn_cast(Val)) toAsm << getID(BB); @@ -670,7 +670,7 @@ else if (const Constant *CV = dyn_cast(Val)) toAsm << getID(CV); else - assert(0 && "Unrecognized value in SparcAsmPrinter"); + assert(0 && "Unrecognized value in SparcV9AsmPrinter"); break; } @@ -691,7 +691,7 @@ toAsm << ")"; } -void SparcAsmPrinter::emitMachineInst(const MachineInstr *MI) { +void SparcV9AsmPrinter::emitMachineInst(const MachineInstr *MI) { unsigned Opcode = MI->getOpcode(); if (Target.getInstrInfo().isDummyPhiInstr(Opcode)) @@ -715,7 +715,7 @@ ++EmittedInsts; } -void SparcAsmPrinter::emitBasicBlock(const MachineBasicBlock &MBB) { +void SparcV9AsmPrinter::emitBasicBlock(const MachineBasicBlock &MBB) { // Emit a label for the basic block toAsm << getID(MBB.getBasicBlock()) << ":\n"; @@ -726,7 +726,7 @@ toAsm << "\n"; // Separate BB's with newlines } -void SparcAsmPrinter::emitFunction(const Function &F) { +void SparcV9AsmPrinter::emitFunction(const Function &F) { std::string methName = getID(&F); toAsm << "!****** Outputing Function: " << methName << " ******\n"; @@ -760,7 +760,7 @@ toAsm << "\n\n"; } -void SparcAsmPrinter::printGlobalVariable(const GlobalVariable* GV) { +void SparcV9AsmPrinter::printGlobalVariable(const GlobalVariable* GV) { if (GV->hasExternalLinkage()) toAsm << "\t.global\t" << getID(GV) << "\n"; @@ -776,7 +776,7 @@ } } -void SparcAsmPrinter::emitGlobals(const Module &M) { +void SparcV9AsmPrinter::emitGlobals(const Module &M) { // Output global variables... for (Module::const_giterator GI = M.gbegin(), GE = M.gend(); GI != GE; ++GI) if (! GI->isExternal()) { @@ -796,5 +796,5 @@ FunctionPass *llvm::createAsmPrinterPass(std::ostream &Out, const TargetMachine &TM) { - return new SparcAsmPrinter(Out, TM); + return new SparcV9AsmPrinter(Out, TM); } Index: llvm/lib/Target/SparcV9/SparcV9CodeEmitter.cpp diff -u llvm/lib/Target/SparcV9/SparcV9CodeEmitter.cpp:1.57 llvm/lib/Target/SparcV9/SparcV9CodeEmitter.cpp:1.58 --- llvm/lib/Target/SparcV9/SparcV9CodeEmitter.cpp:1.57 Sun Feb 22 13:23:26 2004 +++ llvm/lib/Target/SparcV9/SparcV9CodeEmitter.cpp Wed Feb 25 12:44:15 2004 @@ -34,9 +34,9 @@ #include "Support/Debug.h" #include "Support/hash_set" #include "Support/Statistic.h" -#include "SparcInternals.h" -#include "SparcTargetMachine.h" -#include "SparcRegInfo.h" +#include "SparcV9Internals.h" +#include "SparcV9TargetMachine.h" +#include "SparcV9RegInfo.h" #include "SparcV9CodeEmitter.h" #include "Config/alloca.h" @@ -48,12 +48,12 @@ Statistic<> CallbackCalls("callback", "Number CompilationCallback() calls"); } -bool SparcTargetMachine::addPassesToEmitMachineCode(FunctionPassManager &PM, +bool SparcV9TargetMachine::addPassesToEmitMachineCode(FunctionPassManager &PM, MachineCodeEmitter &MCE) { MachineCodeEmitter *M = &MCE; DEBUG(M = MachineCodeEmitter::createFilePrinterEmitter(MCE)); PM.add(new SparcV9CodeEmitter(*this, *M)); - PM.add(createSparcMachineCodeDestructionPass()); //Free stuff no longer needed + PM.add(createSparcV9MachineCodeDestructionPass()); //Free stuff no longer needed return false; } @@ -179,8 +179,8 @@ void JITResolver::insertFarJumpAtAddr(int64_t Target, uint64_t Addr) { static const unsigned - o6 = SparcIntRegClass::o6, g0 = SparcIntRegClass::g0, - g1 = SparcIntRegClass::g1, g5 = SparcIntRegClass::g5; + o6 = SparcV9IntRegClass::o6, g0 = SparcV9IntRegClass::g0, + g1 = SparcV9IntRegClass::g1, g5 = SparcV9IntRegClass::g5; MachineInstr* BinaryCode[] = { // @@ -362,7 +362,7 @@ // Rewrite the call target so that we don't fault every time we execute it. // - static const unsigned o6 = SparcIntRegClass::o6; + static const unsigned o6 = SparcV9IntRegClass::o6; // Subtract enough to overwrite up to the 'save' instruction // This depends on whether we made a short call (1 instruction) or the @@ -418,7 +418,7 @@ DEBUG(std::cerr << "Emitting stub at addr: 0x" << std::hex << MCE.getCurrentPCValue() << "\n"); - unsigned o6 = SparcIntRegClass::o6, g0 = SparcIntRegClass::g0; + unsigned o6 = SparcV9IntRegClass::o6, g0 = SparcV9IntRegClass::g0; // restore %g0, 0, %g0 MachineInstr *R = BuildMI(V9::RESTOREi, 3).addMReg(g0).addSImm(0) @@ -485,8 +485,8 @@ fakeReg = RI.getClassRegNum(fakeReg, regClass); switch (regClass) { - case SparcRegInfo::IntRegClassID: { - // Sparc manual, p31 + case SparcV9RegInfo::IntRegClassID: { + // SparcV9 manual, p31 static const unsigned IntRegMap[] = { // "o0", "o1", "o2", "o3", "o4", "o5", "o7", 8, 9, 10, 11, 12, 13, 15, @@ -503,14 +503,14 @@ return IntRegMap[fakeReg]; break; } - case SparcRegInfo::FloatRegClassID: { + case SparcV9RegInfo::FloatRegClassID: { DEBUG(std::cerr << "FP reg: " << fakeReg << "\n"); - if (regType == SparcRegInfo::FPSingleRegType) { + if (regType == SparcV9RegInfo::FPSingleRegType) { // only numbered 0-31, hence can already fit into 5 bits (and 6) DEBUG(std::cerr << "FP single reg, returning: " << fakeReg << "\n"); - } else if (regType == SparcRegInfo::FPDoubleRegType) { + } else if (regType == SparcV9RegInfo::FPDoubleRegType) { // FIXME: This assumes that we only have 5-bit register fields! - // From Sparc Manual, page 40. + // From SparcV9 Manual, page 40. // The bit layout becomes: b[4], b[3], b[2], b[1], b[5] fakeReg |= (fakeReg >> 5) & 1; fakeReg &= 0x1f; @@ -518,7 +518,7 @@ } return fakeReg; } - case SparcRegInfo::IntCCRegClassID: { + case SparcV9RegInfo::IntCCRegClassID: { /* xcc, icc, ccr */ static const unsigned IntCCReg[] = { 6, 4, 2 }; @@ -527,7 +527,7 @@ DEBUG(std::cerr << "IntCC reg: " << IntCCReg[fakeReg] << "\n"); return IntCCReg[fakeReg]; } - case SparcRegInfo::FloatCCRegClassID: { + case SparcV9RegInfo::FloatCCRegClassID: { /* These are laid out %fcc0 - %fcc3 => 0 - 3, so are correct */ DEBUG(std::cerr << "FP CC reg: " << fakeReg << "\n"); return fakeReg; @@ -542,9 +542,9 @@ // WARNING: if the call used the delay slot to do meaningful work, that's not // being accounted for, and the behavior will be incorrect!! inline void SparcV9CodeEmitter::emitFarCall(uint64_t Target, Function *F) { - static const unsigned o6 = SparcIntRegClass::o6, - o7 = SparcIntRegClass::o7, g0 = SparcIntRegClass::g0, - g1 = SparcIntRegClass::g1, g5 = SparcIntRegClass::g5; + static const unsigned o6 = SparcV9IntRegClass::o6, + o7 = SparcV9IntRegClass::o7, g0 = SparcV9IntRegClass::g0, + g1 = SparcV9IntRegClass::g1, g5 = SparcV9IntRegClass::g5; MachineInstr* BinaryCode[] = { // @@ -582,7 +582,7 @@ } } -void SparcJITInfo::replaceMachineCodeForFunction (void *Old, void *New) { +void SparcV9JITInfo::replaceMachineCodeForFunction (void *Old, void *New) { assert (TheJITResolver && "Can only call replaceMachineCodeForFunction from within JIT"); uint64_t Target = (uint64_t)(intptr_t)New; @@ -658,7 +658,7 @@ } } else if (MO.isRegister() || MO.getType() == MachineOperand::MO_CCRegister) { - // This is necessary because the Sparc backend doesn't actually lay out + // This is necessary because the SparcV9 backend doesn't actually lay out // registers in the real fashion -- it skips those that it chooses not to // allocate, i.e. those that are the FP, SP, etc. unsigned fakeReg = MO.getReg(); @@ -677,17 +677,17 @@ MI, MO.isPCRelative()); } else if (MO.isMachineBasicBlock()) { // Duplicate code of the above case for VirtualRegister, BasicBlock... - // It should really hit this case, but Sparc backend uses VRegs instead + // It should really hit this case, but SparcV9 backend uses VRegs instead DEBUG(std::cerr << "Saving reference to MBB\n"); const BasicBlock *BB = MO.getMachineBasicBlock()->getBasicBlock(); unsigned* CurrPC = (unsigned*)(intptr_t)MCE.getCurrentPCValue(); BBRefs.push_back(std::make_pair(BB, std::make_pair(CurrPC, &MI))); } else if (MO.isExternalSymbol()) { - // Sparc backend doesn't generate this (yet...) + // SparcV9 backend doesn't generate this (yet...) std::cerr << "ERROR: External symbol unhandled: " << MO << "\n"; abort(); } else if (MO.isFrameIndex()) { - // Sparc backend doesn't generate this (yet...) + // SparcV9 backend doesn't generate this (yet...) int FrameIndex = MO.getFrameIndex(); std::cerr << "ERROR: Frame index unhandled.\n"; abort(); @@ -703,13 +703,13 @@ // are used in SPARC assembly. (Some of these make no sense in combination // with some of the above; we'll trust that the instruction selector // will not produce nonsense, and not check for valid combinations here.) - if (MO.isLoBits32()) { // %lo(val) == %lo() in Sparc ABI doc + if (MO.isLoBits32()) { // %lo(val) == %lo() in SparcV9 ABI doc return rv & 0x03ff; - } else if (MO.isHiBits32()) { // %lm(val) == %hi() in Sparc ABI doc + } else if (MO.isHiBits32()) { // %lm(val) == %hi() in SparcV9 ABI doc return (rv >> 10) & 0x03fffff; - } else if (MO.isLoBits64()) { // %hm(val) == %ulo() in Sparc ABI doc + } else if (MO.isLoBits64()) { // %hm(val) == %ulo() in SparcV9 ABI doc return (rv >> 32) & 0x03ff; - } else if (MO.isHiBits64()) { // %hh(val) == %uhi() in Sparc ABI doc + } else if (MO.isHiBits64()) { // %hh(val) == %uhi() in SparcV9 ABI doc return rv >> 42; } else { // (unadorned) val return rv; Index: llvm/lib/Target/SparcV9/SparcV9FrameInfo.cpp diff -u llvm/lib/Target/SparcV9/SparcV9FrameInfo.cpp:1.1 llvm/lib/Target/SparcV9/SparcV9FrameInfo.cpp:1.2 --- llvm/lib/Target/SparcV9/SparcV9FrameInfo.cpp:1.1 Wed Dec 17 16:04:00 2003 +++ llvm/lib/Target/SparcV9/SparcV9FrameInfo.cpp Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===-- Sparc.cpp - General implementation file for the Sparc Target ------===// +//===-- SparcV9.cpp - General implementation file for the SparcV9 Target ------===// // // The LLVM Compiler Infrastructure // @@ -16,18 +16,18 @@ #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunctionInfo.h" #include "llvm/Target/TargetFrameInfo.h" -#include "SparcFrameInfo.h" +#include "SparcV9FrameInfo.h" using namespace llvm; int -SparcFrameInfo::getFirstAutomaticVarOffset(MachineFunction&, bool& pos) const { +SparcV9FrameInfo::getFirstAutomaticVarOffset(MachineFunction&, bool& pos) const { pos = false; // static stack area grows downwards return StaticAreaOffsetFromFP; } int -SparcFrameInfo::getRegSpillAreaOffset(MachineFunction& mcInfo, bool& pos) const +SparcV9FrameInfo::getRegSpillAreaOffset(MachineFunction& mcInfo, bool& pos) const { // ensure no more auto vars are added mcInfo.getInfo()->freezeAutomaticVarsArea(); @@ -37,7 +37,7 @@ return StaticAreaOffsetFromFP - autoVarsSize; } -int SparcFrameInfo::getTmpAreaOffset(MachineFunction& mcInfo, bool& pos) const { +int SparcV9FrameInfo::getTmpAreaOffset(MachineFunction& mcInfo, bool& pos) const { MachineFunctionInfo *MFI = mcInfo.getInfo(); MFI->freezeAutomaticVarsArea(); // ensure no more auto vars are added MFI->freezeSpillsArea(); // ensure no more spill slots are added @@ -50,7 +50,7 @@ } int -SparcFrameInfo::getDynamicAreaOffset(MachineFunction& mcInfo, bool& pos) const { +SparcV9FrameInfo::getDynamicAreaOffset(MachineFunction& mcInfo, bool& pos) const { // Dynamic stack area grows downwards starting at top of opt-args area. // The opt-args, required-args, and register-save areas are empty except // during calls and traps, so they are shifted downwards on each Index: llvm/lib/Target/SparcV9/SparcV9FrameInfo.h diff -u llvm/lib/Target/SparcV9/SparcV9FrameInfo.h:1.1 llvm/lib/Target/SparcV9/SparcV9FrameInfo.h:1.2 --- llvm/lib/Target/SparcV9/SparcV9FrameInfo.h:1.1 Wed Dec 17 16:04:00 2003 +++ llvm/lib/Target/SparcV9/SparcV9FrameInfo.h Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===-- SparcFrameInfo.h - Define TargetFrameInfo for Sparc -----*- C++ -*-===// +//===-- SparcV9FrameInfo.h - Define TargetFrameInfo for SparcV9 -----*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -22,10 +22,10 @@ namespace llvm { -class SparcFrameInfo: public TargetFrameInfo { +class SparcV9FrameInfo: public TargetFrameInfo { const TargetMachine ⌖ public: - SparcFrameInfo(const TargetMachine &TM) + SparcV9FrameInfo(const TargetMachine &TM) : TargetFrameInfo(StackGrowsDown, StackFrameSizeAlignment, 0), target(TM) {} public: @@ -114,10 +114,10 @@ private: /*---------------------------------------------------------------------- - This diagram shows the stack frame layout used by llc on Sparc V9. + This diagram shows the stack frame layout used by llc on SparcV9 V9. Note that only the location of automatic variables, spill area, temporary storage, and dynamically allocated stack area are chosen - by us. The rest conform to the Sparc V9 ABI. + by us. The rest conform to the SparcV9 V9 ABI. All stack addresses are offset by OFFSET = 0x7ff (2047). Alignment assumptions and other invariants: @@ -156,7 +156,7 @@ *----------------------------------------------------------------------*/ - // All stack addresses must be offset by 0x7ff (2047) on Sparc V9. + // All stack addresses must be offset by 0x7ff (2047) on SparcV9 V9. static const int OFFSET = (int) 0x7ff; static const int StackFrameSizeAlignment = 16; static const int MinStackFrameSize = 176; Index: llvm/lib/Target/SparcV9/SparcV9InstrInfo.cpp diff -u llvm/lib/Target/SparcV9/SparcV9InstrInfo.cpp:1.59 llvm/lib/Target/SparcV9/SparcV9InstrInfo.cpp:1.60 --- llvm/lib/Target/SparcV9/SparcV9InstrInfo.cpp:1.59 Wed Dec 17 16:04:00 2003 +++ llvm/lib/Target/SparcV9/SparcV9InstrInfo.cpp Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===-- SparcInstrInfo.cpp ------------------------------------------------===// +//===-- SparcV9InstrInfo.cpp ------------------------------------------------===// // // The LLVM Compiler Infrastructure // @@ -20,9 +20,9 @@ #include "llvm/CodeGen/MachineFunctionInfo.h" #include "llvm/CodeGen/MachineCodeForInstruction.h" #include "llvm/CodeGen/MachineInstrBuilder.h" -#include "SparcInternals.h" -#include "SparcInstrSelectionSupport.h" -#include "SparcInstrInfo.h" +#include "SparcV9Internals.h" +#include "SparcV9InstrSelectionSupport.h" +#include "SparcV9InstrInfo.h" namespace llvm { @@ -42,7 +42,7 @@ //--------------------------------------------------------------------------- uint64_t -SparcInstrInfo::ConvertConstantToIntType(const TargetMachine &target, +SparcV9InstrInfo::ConvertConstantToIntType(const TargetMachine &target, const Value *V, const Type *destType, bool &isValidConstant) const @@ -386,7 +386,7 @@ default: break; }; - return (modelOpCode < 0)? 0: SparcMachineInstrDesc[modelOpCode].maxImmedConst; + return (modelOpCode < 0)? 0: SparcV9MachineInstrDesc[modelOpCode].maxImmedConst; } static void @@ -407,18 +407,18 @@ //--------------------------------------------------------------------------- -// class SparcInstrInfo +// class SparcV9InstrInfo // // Purpose: // Information about individual instructions. -// Most information is stored in the SparcMachineInstrDesc array above. +// Most information is stored in the SparcV9MachineInstrDesc array above. // Other information is computed on demand, and most such functions // default to member functions in base class TargetInstrInfo. //--------------------------------------------------------------------------- /*ctor*/ -SparcInstrInfo::SparcInstrInfo() - : TargetInstrInfo(SparcMachineInstrDesc, +SparcV9InstrInfo::SparcV9InstrInfo() + : TargetInstrInfo(SparcV9MachineInstrDesc, /*descSize = */ V9::NUM_TOTAL_OPCODES, /*numRealOpCodes = */ V9::NUM_REAL_OPCODES) { @@ -426,7 +426,7 @@ } bool -SparcInstrInfo::ConstantMayNotFitInImmedField(const Constant* CV, +SparcV9InstrInfo::ConstantMayNotFitInImmedField(const Constant* CV, const Instruction* I) const { if (I->getOpcode() >= MaxConstantsTable.size()) // user-defined op (or bug!) @@ -456,7 +456,7 @@ // Any stack space required is allocated via MachineFunction. // void -SparcInstrInfo::CreateCodeToLoadConst(const TargetMachine& target, +SparcV9InstrInfo::CreateCodeToLoadConst(const TargetMachine& target, Function* F, Value* val, Instruction* dest, @@ -553,7 +553,7 @@ // Any stack space required is allocated via MachineFunction. // void -SparcInstrInfo::CreateCodeToCopyIntToFloat(const TargetMachine& target, +SparcV9InstrInfo::CreateCodeToCopyIntToFloat(const TargetMachine& target, Function* F, Value* val, Instruction* dest, @@ -614,7 +614,7 @@ // Temporary stack space required is allocated via MachineFunction. // void -SparcInstrInfo::CreateCodeToCopyFloatToInt(const TargetMachine& target, +SparcV9InstrInfo::CreateCodeToCopyFloatToInt(const TargetMachine& target, Function* F, Value* val, Instruction* dest, @@ -665,7 +665,7 @@ // Any stack space required is allocated via MachineFunction. // void -SparcInstrInfo::CreateCopyInstructionsByType(const TargetMachine& target, +SparcV9InstrInfo::CreateCopyInstructionsByType(const TargetMachine& target, Function *F, Value* src, Instruction* dest, @@ -761,7 +761,7 @@ // Any stack space required is allocated via MachineFunction. // void -SparcInstrInfo::CreateSignExtensionInstructions( +SparcV9InstrInfo::CreateSignExtensionInstructions( const TargetMachine& target, Function* F, Value* srcVal, @@ -783,7 +783,7 @@ // Any stack space required is allocated via MachineFunction. // void -SparcInstrInfo::CreateZeroExtensionInstructions( +SparcV9InstrInfo::CreateZeroExtensionInstructions( const TargetMachine& target, Function* F, Value* srcVal, Index: llvm/lib/Target/SparcV9/SparcV9InstrInfo.h diff -u llvm/lib/Target/SparcV9/SparcV9InstrInfo.h:1.2 llvm/lib/Target/SparcV9/SparcV9InstrInfo.h:1.3 --- llvm/lib/Target/SparcV9/SparcV9InstrInfo.h:1.2 Tue Feb 10 15:12:06 2004 +++ llvm/lib/Target/SparcV9/SparcV9InstrInfo.h Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===-- SparcInstrInfo.h - Define TargetInstrInfo for Sparc -----*- C++ -*-===// +//===-- SparcV9InstrInfo.h - Define TargetInstrInfo for SparcV9 -----*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// // // This class contains information about individual instructions. -// Most information is stored in the SparcMachineInstrDesc array above. +// Most information is stored in the SparcV9MachineInstrDesc array above. // Other information is computed on demand, and most such functions // default to member functions in base class TargetInstrInfo. // @@ -19,12 +19,12 @@ #include "llvm/Target/TargetInstrInfo.h" #include "llvm/CodeGen/MachineInstr.h" -#include "SparcInternals.h" +#include "SparcV9Internals.h" namespace llvm { -struct SparcInstrInfo : public TargetInstrInfo { - SparcInstrInfo(); +struct SparcV9InstrInfo : public TargetInstrInfo { + SparcV9InstrInfo(); // All immediate constants are in position 1 except the // store instructions and SETxx. @@ -53,7 +53,7 @@ /// another instruction, e.g. X86: xchg ax, ax; SparcV9: sethi 0, g0 /// MachineInstr* createNOPinstr() const { - return BuildMI(V9::SETHI, 2).addZImm(0).addReg(SparcIntRegClass::g0); + return BuildMI(V9::SETHI, 2).addZImm(0).addReg(SparcV9IntRegClass::g0); } /// isNOPinstr - not having a special NOP opcode, we need to know if a given @@ -66,7 +66,7 @@ const MachineOperand &op0 = MI.getOperand(0), &op1 = MI.getOperand(1); if (op0.isImmediate() && op0.getImmedValue() == 0 && op1.getType() == MachineOperand::MO_MachineRegister && - op1.getMachineRegNum() == SparcIntRegClass::g0) + op1.getMachineRegNum() == SparcV9IntRegClass::g0) { return true; } Index: llvm/lib/Target/SparcV9/SparcV9InstrSelection.cpp diff -u llvm/lib/Target/SparcV9/SparcV9InstrSelection.cpp:1.133 llvm/lib/Target/SparcV9/SparcV9InstrSelection.cpp:1.134 --- llvm/lib/Target/SparcV9/SparcV9InstrSelection.cpp:1.133 Sun Feb 22 13:23:26 2004 +++ llvm/lib/Target/SparcV9/SparcV9InstrSelection.cpp Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===-- SparcInstrSelection.cpp -------------------------------------------===// +//===-- SparcV9InstrSelection.cpp -------------------------------------------===// // // The LLVM Compiler Infrastructure // @@ -24,10 +24,10 @@ #include "llvm/CodeGen/MachineFunctionInfo.h" #include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/MachineInstrAnnot.h" -#include "SparcInstrSelectionSupport.h" -#include "SparcInternals.h" -#include "SparcRegClassInfo.h" -#include "SparcRegInfo.h" +#include "SparcV9InstrSelectionSupport.h" +#include "SparcV9Internals.h" +#include "SparcV9RegClassInfo.h" +#include "SparcV9RegInfo.h" #include "Support/MathExtras.h" #include #include @@ -1413,7 +1413,7 @@ } case Intrinsic::va_end: - return true; // no-op on Sparc + return true; // no-op on SparcV9 case Intrinsic::va_copy: // Simple copy of current va_list (arg1) to new va_list (result) @@ -1543,13 +1543,13 @@ // -- For non-FP values, create an add-with-0 instruction // if (retVal != NULL) { - const SparcRegInfo& regInfo = - (SparcRegInfo&) target.getRegInfo(); + const SparcV9RegInfo& regInfo = + (SparcV9RegInfo&) target.getRegInfo(); const Type* retType = retVal->getType(); unsigned regClassID = regInfo.getRegClassIDOfType(retType); unsigned retRegNum = (retType->isFloatingPoint() - ? (unsigned) SparcFloatRegClass::f0 - : (unsigned) SparcIntRegClass::i0); + ? (unsigned) SparcV9FloatRegClass::f0 + : (unsigned) SparcV9IntRegClass::i0); retRegNum = regInfo.getUnifiedRegNum(regClassID, retRegNum); // () Insert sign-extension instructions for small signed values. @@ -2450,8 +2450,8 @@ MachineFunction& MF = MachineFunction::get(currentFunc); MachineCodeForInstruction& mcfi = MachineCodeForInstruction::get(callInstr); - const SparcRegInfo& regInfo = - (SparcRegInfo&) target.getRegInfo(); + const SparcV9RegInfo& regInfo = + (SparcV9RegInfo&) target.getRegInfo(); const TargetFrameInfo& frameInfo = target.getFrameInfo(); // Create hidden virtual register for return address with type void* @@ -2701,8 +2701,8 @@ const Type* retType = callInstr->getType(); int regNum = (retType->isFloatingPoint() - ? (unsigned) SparcFloatRegClass::f0 - : (unsigned) SparcIntRegClass::o0); + ? (unsigned) SparcV9FloatRegClass::f0 + : (unsigned) SparcV9IntRegClass::o0); unsigned regClassID = regInfo.getRegClassIDOfType(retType); regNum = regInfo.getUnifiedRegNum(regClassID, regNum); Index: llvm/lib/Target/SparcV9/SparcV9InstrSelectionSupport.h diff -u llvm/lib/Target/SparcV9/SparcV9InstrSelectionSupport.h:1.13 llvm/lib/Target/SparcV9/SparcV9InstrSelectionSupport.h:1.14 --- llvm/lib/Target/SparcV9/SparcV9InstrSelectionSupport.h:1.13 Tue Nov 11 16:41:33 2003 +++ llvm/lib/Target/SparcV9/SparcV9InstrSelectionSupport.h Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===-- llvm/CodeGen/SparcInstrSelectionSupport.h ---------------*- C++ -*-===// +//===-- llvm/CodeGen/SparcV9InstrSelectionSupport.h ---------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -15,7 +15,7 @@ #define SPARC_INSTR_SELECTION_SUPPORT_h #include "llvm/DerivedTypes.h" -#include "SparcInternals.h" +#include "SparcV9Internals.h" namespace llvm { @@ -90,7 +90,7 @@ } -// Because the Sparc instruction selector likes to re-write operands to +// Because the SparcV9 instruction selector likes to re-write operands to // instructions, making them change from a Value* (virtual register) to a // Constant* (making an immediate field), we need to change the opcode from a // register-based instruction to an immediate-based instruction, hence this Index: llvm/lib/Target/SparcV9/SparcV9Internals.h diff -u llvm/lib/Target/SparcV9/SparcV9Internals.h:1.110 llvm/lib/Target/SparcV9/SparcV9Internals.h:1.111 --- llvm/lib/Target/SparcV9/SparcV9Internals.h:1.110 Sat Dec 20 03:17:40 2003 +++ llvm/lib/Target/SparcV9/SparcV9Internals.h Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===-- SparcInternals.h ----------------------------------------*- C++ -*-===// +//===-- SparcV9Internals.h ----------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// // -// This file defines stuff that is to be private to the Sparc backend, but is +// This file defines stuff that is to be private to the SparcV9 backend, but is // shared among different portions of the backend. // //===----------------------------------------------------------------------===// @@ -22,16 +22,16 @@ #include "llvm/Target/TargetCacheInfo.h" #include "llvm/Target/TargetRegInfo.h" #include "llvm/Type.h" -#include "SparcRegClassInfo.h" +#include "SparcV9RegClassInfo.h" #include "Config/sys/types.h" namespace llvm { class LiveRange; -class SparcTargetMachine; +class SparcV9TargetMachine; class Pass; -enum SparcInstrSchedClass { +enum SparcV9InstrSchedClass { SPARC_NONE, /* Instructions with no scheduling restrictions */ SPARC_IEUN, /* Integer class that can use IEU0 or IEU1 */ SPARC_IEU0, /* Integer class IEU0 */ @@ -49,20 +49,20 @@ //--------------------------------------------------------------------------- -// enum SparcMachineOpCode. -// const TargetInstrDescriptor SparcMachineInstrDesc[] +// enum SparcV9MachineOpCode. +// const TargetInstrDescriptor SparcV9MachineInstrDesc[] // // Purpose: -// Description of UltraSparc machine instructions. +// Description of UltraSparcV9 machine instructions. // //--------------------------------------------------------------------------- namespace V9 { - enum SparcMachineOpCode { + enum SparcV9MachineOpCode { #define I(ENUM, OPCODESTRING, NUMOPERANDS, RESULTPOS, MAXIMM, IMMSE, \ NUMDELAYSLOTS, LATENCY, SCHEDCLASS, INSTFLAGS) \ ENUM, -#include "SparcInstr.def" +#include "SparcV9Instr.def" // End-of-array marker INVALID_OPCODE, @@ -72,33 +72,33 @@ } // Array of machine instruction descriptions... -extern const TargetInstrDescriptor SparcMachineInstrDesc[]; +extern const TargetInstrDescriptor SparcV9MachineInstrDesc[]; //--------------------------------------------------------------------------- -// class SparcSchedInfo +// class SparcV9SchedInfo // // Purpose: // Interface to instruction scheduling information for UltraSPARC. // The parameter values above are based on UltraSPARC IIi. //--------------------------------------------------------------------------- -class SparcSchedInfo: public TargetSchedInfo { +class SparcV9SchedInfo: public TargetSchedInfo { public: - SparcSchedInfo(const TargetMachine &tgt); + SparcV9SchedInfo(const TargetMachine &tgt); protected: virtual void initializeResources(); }; //--------------------------------------------------------------------------- -// class SparcCacheInfo +// class SparcV9CacheInfo // // Purpose: // Interface to cache parameters for the UltraSPARC. // Just use defaults for now. //--------------------------------------------------------------------------- -struct SparcCacheInfo: public TargetCacheInfo { - SparcCacheInfo(const TargetMachine &T) : TargetCacheInfo(T) {} +struct SparcV9CacheInfo: public TargetCacheInfo { + SparcV9CacheInfo(const TargetMachine &T) : TargetCacheInfo(T) {} }; @@ -127,7 +127,7 @@ /// Pass* createBytecodeAsmPrinterPass(std::ostream &Out); -FunctionPass *createSparcMachineCodeDestructionPass(); +FunctionPass *createSparcV9MachineCodeDestructionPass(); } // End llvm namespace Index: llvm/lib/Target/SparcV9/SparcV9JITInfo.h diff -u llvm/lib/Target/SparcV9/SparcV9JITInfo.h:1.3 llvm/lib/Target/SparcV9/SparcV9JITInfo.h:1.4 --- llvm/lib/Target/SparcV9/SparcV9JITInfo.h:1.3 Sun Dec 28 15:23:38 2003 +++ llvm/lib/Target/SparcV9/SparcV9JITInfo.h Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===- SparcJITInfo.h - Sparc implementation of the JIT interface -*-C++-*-===// +//===- SparcV9JITInfo.h - SparcV9 implementation of the JIT interface -*-C++-*-===// // // The LLVM Compiler Infrastructure // @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// // -// This file contains the Sparc implementation of the TargetJITInfo class. +// This file contains the SparcV9 implementation of the TargetJITInfo class. // //===----------------------------------------------------------------------===// @@ -19,10 +19,10 @@ namespace llvm { class TargetMachine; - class SparcJITInfo : public TargetJITInfo { + class SparcV9JITInfo : public TargetJITInfo { TargetMachine &TM; public: - SparcJITInfo(TargetMachine &tm) : TM(tm) {} + SparcV9JITInfo(TargetMachine &tm) : TM(tm) {} /// addPassesToJITCompile - Add passes to the specified pass manager to /// implement a fast dynamic compiler for this target. Return true if this Index: llvm/lib/Target/SparcV9/SparcV9PeepholeOpts.cpp diff -u llvm/lib/Target/SparcV9/SparcV9PeepholeOpts.cpp:1.21 llvm/lib/Target/SparcV9/SparcV9PeepholeOpts.cpp:1.22 --- llvm/lib/Target/SparcV9/SparcV9PeepholeOpts.cpp:1.21 Fri Feb 13 19:18:34 2004 +++ llvm/lib/Target/SparcV9/SparcV9PeepholeOpts.cpp Wed Feb 25 12:44:15 2004 @@ -12,7 +12,7 @@ // //===----------------------------------------------------------------------===// -#include "SparcInternals.h" +#include "SparcV9Internals.h" #include "llvm/BasicBlock.h" #include "llvm/Pass.h" #include "llvm/CodeGen/MachineFunction.h" Index: llvm/lib/Target/SparcV9/SparcV9PreSelection.cpp diff -u llvm/lib/Target/SparcV9/SparcV9PreSelection.cpp:1.27 llvm/lib/Target/SparcV9/SparcV9PreSelection.cpp:1.28 --- llvm/lib/Target/SparcV9/SparcV9PreSelection.cpp:1.27 Wed Dec 17 16:06:08 2003 +++ llvm/lib/Target/SparcV9/SparcV9PreSelection.cpp Wed Feb 25 12:44:15 2004 @@ -15,7 +15,7 @@ // //===----------------------------------------------------------------------===// -#include "SparcInternals.h" +#include "SparcV9Internals.h" #include "llvm/Constants.h" #include "llvm/DerivedTypes.h" #include "llvm/iMemory.h" Index: llvm/lib/Target/SparcV9/SparcV9PrologEpilogInserter.cpp diff -u llvm/lib/Target/SparcV9/SparcV9PrologEpilogInserter.cpp:1.35 llvm/lib/Target/SparcV9/SparcV9PrologEpilogInserter.cpp:1.36 --- llvm/lib/Target/SparcV9/SparcV9PrologEpilogInserter.cpp:1.35 Sun Feb 22 13:23:26 2004 +++ llvm/lib/Target/SparcV9/SparcV9PrologEpilogInserter.cpp Wed Feb 25 12:44:15 2004 @@ -16,8 +16,8 @@ // //===----------------------------------------------------------------------===// -#include "SparcInternals.h" -#include "SparcRegClassInfo.h" +#include "SparcV9Internals.h" +#include "SparcV9RegClassInfo.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineFunctionInfo.h" #include "llvm/CodeGen/MachineCodeForInstruction.h" @@ -31,7 +31,7 @@ namespace { struct InsertPrologEpilogCode : public MachineFunctionPass { - const char *getPassName() const { return "Sparc Prolog/Epilog Inserter"; } + const char *getPassName() const { return "SparcV9 Prolog/Epilog Inserter"; } bool runOnMachineFunction(MachineFunction &F) { if (!F.getInfo()->isCompiledAsLeafMethod()) { @@ -83,7 +83,7 @@ // SETSW -(stackSize), %g1 int uregNum = TM.getRegInfo().getUnifiedRegNum( TM.getRegInfo().getRegClassIDOfType(Type::IntTy), - SparcIntRegClass::g1); + SparcV9IntRegClass::g1); MachineInstr* M = BuildMI(V9::SETHI, 2).addSImm(C) .addMReg(uregNum, MachineOperand::Def); @@ -119,7 +119,7 @@ bool ignore; int firstArgReg = TM.getRegInfo().getUnifiedRegNum( TM.getRegInfo().getRegClassIDOfType(Type::IntTy), - SparcIntRegClass::i0); + SparcV9IntRegClass::i0); int fpReg = TM.getFrameInfo().getIncomingArgBaseRegNum(); int argSize = TM.getFrameInfo().getSizeOfEachArgOnStack(); int firstArgOffset=TM.getFrameInfo().getFirstIncomingArgOffset(MF,ignore); Index: llvm/lib/Target/SparcV9/SparcV9RegClassInfo.cpp diff -u llvm/lib/Target/SparcV9/SparcV9RegClassInfo.cpp:1.34 llvm/lib/Target/SparcV9/SparcV9RegClassInfo.cpp:1.35 --- llvm/lib/Target/SparcV9/SparcV9RegClassInfo.cpp:1.34 Fri Jan 9 10:17:09 2004 +++ llvm/lib/Target/SparcV9/SparcV9RegClassInfo.cpp Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===-- SparcRegClassInfo.cpp - Register class def'ns for Sparc -----------===// +//===-- SparcV9RegClassInfo.cpp - Register class def'ns for SparcV9 -----------===// // // The LLVM Compiler Infrastructure // @@ -7,14 +7,14 @@ // //===----------------------------------------------------------------------===// // -// This file defines the register classes used by the Sparc target description. +// This file defines the register classes used by the SparcV9 target description. // //===----------------------------------------------------------------------===// #include "llvm/Type.h" -#include "SparcRegClassInfo.h" -#include "SparcInternals.h" -#include "SparcRegInfo.h" +#include "SparcV9RegClassInfo.h" +#include "SparcV9Internals.h" +#include "SparcV9RegInfo.h" #include "RegAlloc/RegAllocCommon.h" #include "RegAlloc/IGNode.h" @@ -33,7 +33,7 @@ // If both above fail, spill. // //----------------------------------------------------------------------------- -void SparcIntRegClass::colorIGNode(IGNode * Node, +void SparcV9IntRegClass::colorIGNode(IGNode * Node, const std::vector &IsColorUsedArr) const { LiveRange *LR = Node->getParentLR(); @@ -69,16 +69,16 @@ //if this Node is between calls if (! LR->isCallInterference()) { // start with volatiles (we can allocate volatiles safely) - SearchStart = SparcIntRegClass::StartOfAllRegs; + SearchStart = SparcV9IntRegClass::StartOfAllRegs; } else { // start with non volatiles (no non-volatiles) - SearchStart = SparcIntRegClass::StartOfNonVolatileRegs; + SearchStart = SparcV9IntRegClass::StartOfNonVolatileRegs; } unsigned c=0; // color // find first unused color - for (c=SearchStart; c < SparcIntRegClass::NumOfAvailRegs; c++) { + for (c=SearchStart; c < SparcV9IntRegClass::NumOfAvailRegs; c++) { if (!IsColorUsedArr[c]) { ColorFound = true; break; @@ -95,10 +95,10 @@ // else if (LR->isCallInterference()) { // start from 0 - try to find even a volatile this time - SearchStart = SparcIntRegClass::StartOfAllRegs; + SearchStart = SparcV9IntRegClass::StartOfAllRegs; // find first unused volatile color - for(c=SearchStart; c < SparcIntRegClass::StartOfNonVolatileRegs; c++) { + for(c=SearchStart; c < SparcV9IntRegClass::StartOfNonVolatileRegs; c++) { if (! IsColorUsedArr[c]) { ColorFound = true; break; @@ -140,7 +140,7 @@ // Note: The third name (%ccr) is essentially an assembly mnemonic and // depends solely on the opcode, so the name can be chosen in EmitAssembly. //----------------------------------------------------------------------------- -void SparcIntCCRegClass::colorIGNode(IGNode *Node, +void SparcV9IntCCRegClass::colorIGNode(IGNode *Node, const std::vector &IsColorUsedArr) const { if (Node->getNumOfNeighbors() > 0) @@ -173,7 +173,7 @@ } -void SparcFloatCCRegClass::colorIGNode(IGNode *Node, +void SparcV9FloatCCRegClass::colorIGNode(IGNode *Node, const std::vector &IsColorUsedArr) const { for(unsigned c = 0; c != 4; ++c) if (!IsColorUsedArr[c]) { // find unused color @@ -201,7 +201,7 @@ // If a color is still not fond, mark for spilling // //---------------------------------------------------------------------------- -void SparcFloatRegClass::colorIGNode(IGNode * Node, +void SparcV9FloatRegClass::colorIGNode(IGNode * Node, const std::vector &IsColorUsedArr) const { LiveRange *LR = Node->getParentLR(); @@ -211,11 +211,11 @@ // // FIXME: This is old code that is no longer needed. Temporarily converting // it into a big assertion just to check that the replacement logic - // (invoking SparcFloatRegClass::markColorsUsed() directly from + // (invoking SparcV9FloatRegClass::markColorsUsed() directly from // RegClass::colorIGNode) works correctly. // // In fact, this entire function should be identical to - // SparcIntRegClass::colorIGNode(), and perhaps can be + // SparcV9IntRegClass::colorIGNode(), and perhaps can be // made into a general case in CodeGen/RegAlloc/RegClass.cpp. // unsigned NumNeighbors = Node->getNumOfNeighbors(); // total # of neighbors @@ -242,7 +242,7 @@ // **NOTE: We don't check for call interferences in allocating suggested // color in this class since ALL registers are volatile. If this fact // changes, we should change the following part - //- see SparcIntRegClass::colorIGNode() + //- see SparcV9IntRegClass::colorIGNode() // if( LR->hasSuggestedColor() ) { if( ! IsColorUsedArr[ LR->getSuggestedColor() ] ) { @@ -280,10 +280,10 @@ //if this Node is between calls (i.e., no call interferences ) if (! isCallInterf) { // start with volatiles (we can allocate volatiles safely) - SearchStart = SparcFloatRegClass::StartOfAllRegs; + SearchStart = SparcV9FloatRegClass::StartOfAllRegs; } else { // start with non volatiles (no non-volatiles) - SearchStart = SparcFloatRegClass::StartOfNonVolatileRegs; + SearchStart = SparcV9FloatRegClass::StartOfNonVolatileRegs; } ColorFound = findFloatColor(LR, SearchStart, 32, IsColorUsedArr); @@ -296,8 +296,8 @@ // We are here because there is a call interference and no non-volatile // color could be found. // Now try to allocate even a volatile color - ColorFound = findFloatColor(LR, SparcFloatRegClass::StartOfAllRegs, - SparcFloatRegClass::StartOfNonVolatileRegs, + ColorFound = findFloatColor(LR, SparcV9FloatRegClass::StartOfAllRegs, + SparcV9FloatRegClass::StartOfNonVolatileRegs, IsColorUsedArr); } @@ -316,13 +316,13 @@ // for double-precision registers. //----------------------------------------------------------------------------- -void SparcFloatRegClass::markColorsUsed(unsigned RegInClass, +void SparcV9FloatRegClass::markColorsUsed(unsigned RegInClass, int UserRegType, int RegTypeWanted, std::vector &IsColorUsedArr) const { - if (UserRegType == SparcRegInfo::FPDoubleRegType || - RegTypeWanted == SparcRegInfo::FPDoubleRegType) { + if (UserRegType == SparcV9RegInfo::FPDoubleRegType || + RegTypeWanted == SparcV9RegInfo::FPDoubleRegType) { // This register is used as or is needed as a double-precision reg. // We need to mark the [even,odd] pair corresponding to this reg. // Get the even numbered register corresponding to this reg. @@ -346,10 +346,10 @@ // for double-precision registers // It returns -1 if no unused color is found. // -int SparcFloatRegClass::findUnusedColor(int RegTypeWanted, +int SparcV9FloatRegClass::findUnusedColor(int RegTypeWanted, const std::vector &IsColorUsedArr) const { - if (RegTypeWanted == SparcRegInfo::FPDoubleRegType) { + if (RegTypeWanted == SparcV9RegInfo::FPDoubleRegType) { unsigned NC = 2 * this->getNumOfAvailRegs(); assert(IsColorUsedArr.size() == NC && "Invalid colors-used array"); for (unsigned c = 0; c < NC; c+=2) @@ -369,7 +369,7 @@ // type of the Node (i.e., float/double) //----------------------------------------------------------------------------- -int SparcFloatRegClass::findFloatColor(const LiveRange *LR, +int SparcV9FloatRegClass::findFloatColor(const LiveRange *LR, unsigned Start, unsigned End, const std::vector &IsColorUsedArr) const @@ -380,7 +380,7 @@ for (unsigned c=Start; c < End ; c+= 2) if (!IsColorUsedArr[c]) { assert(!IsColorUsedArr[c+1] && - "Incorrect marking of used regs for Sparc FP double!"); + "Incorrect marking of used regs for SparcV9 FP double!"); return c; } } else { Index: llvm/lib/Target/SparcV9/SparcV9RegClassInfo.h diff -u llvm/lib/Target/SparcV9/SparcV9RegClassInfo.h:1.23 llvm/lib/Target/SparcV9/SparcV9RegClassInfo.h:1.24 --- llvm/lib/Target/SparcV9/SparcV9RegClassInfo.h:1.23 Tue Nov 11 16:41:33 2003 +++ llvm/lib/Target/SparcV9/SparcV9RegClassInfo.h Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===-- SparcRegClassInfo.h - Register class def'ns for Sparc ---*- C++ -*-===// +//===-- SparcV9RegClassInfo.h - Register class def'ns for SparcV9 ---*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// // -// This file defines the register classes used by the Sparc target description. +// This file defines the register classes used by the SparcV9 target description. // //===----------------------------------------------------------------------===// @@ -22,8 +22,8 @@ // Integer Register Class //----------------------------------------------------------------------------- -struct SparcIntRegClass : public TargetRegClassInfo { - SparcIntRegClass(unsigned ID) +struct SparcV9IntRegClass : public TargetRegClassInfo { + SparcV9IntRegClass(unsigned ID) : TargetRegClassInfo(ID, NumOfAvailRegs, NumOfAllRegs) { } void colorIGNode(IGNode *Node, @@ -87,12 +87,12 @@ // Float Register Class //----------------------------------------------------------------------------- -class SparcFloatRegClass : public TargetRegClassInfo { +class SparcV9FloatRegClass : public TargetRegClassInfo { int findFloatColor(const LiveRange *LR, unsigned Start, unsigned End, const std::vector &IsColorUsedArr) const; public: - SparcFloatRegClass(unsigned ID) + SparcV9FloatRegClass(unsigned ID) : TargetRegClassInfo(ID, NumOfAvailRegs, NumOfAllRegs) {} // This method marks the registers used for a given register number. @@ -116,7 +116,7 @@ void colorIGNode(IGNode *Node, const std::vector &IsColorUsedArr) const; - // according to Sparc 64 ABI, all %fp regs are volatile + // according to SparcV9 64 ABI, all %fp regs are volatile inline bool isRegVolatile(int Reg) const { return true; } enum { @@ -153,14 +153,14 @@ // allocated for the three names. //----------------------------------------------------------------------------- -struct SparcIntCCRegClass : public TargetRegClassInfo { - SparcIntCCRegClass(unsigned ID) +struct SparcV9IntCCRegClass : public TargetRegClassInfo { + SparcV9IntCCRegClass(unsigned ID) : TargetRegClassInfo(ID, 1, 3) { } void colorIGNode(IGNode *Node, const std::vector &IsColorUsedArr) const; - // according to Sparc 64 ABI, %ccr is volatile + // according to SparcV9 64 ABI, %ccr is volatile // inline bool isRegVolatile(int Reg) const { return true; } @@ -177,14 +177,14 @@ // Only 4 Float CC registers are available for allocation. //----------------------------------------------------------------------------- -struct SparcFloatCCRegClass : public TargetRegClassInfo { - SparcFloatCCRegClass(unsigned ID) +struct SparcV9FloatCCRegClass : public TargetRegClassInfo { + SparcV9FloatCCRegClass(unsigned ID) : TargetRegClassInfo(ID, 4, 5) { } void colorIGNode(IGNode *Node, const std::vector &IsColorUsedArr) const; - // according to Sparc 64 ABI, all %fp CC regs are volatile + // according to SparcV9 64 ABI, all %fp CC regs are volatile // inline bool isRegVolatile(int Reg) const { return true; } @@ -196,17 +196,17 @@ }; //----------------------------------------------------------------------------- -// Sparc special register class. These registers are not used for allocation +// SparcV9 special register class. These registers are not used for allocation // but are used as arguments of some instructions. //----------------------------------------------------------------------------- -struct SparcSpecialRegClass : public TargetRegClassInfo { - SparcSpecialRegClass(unsigned ID) +struct SparcV9SpecialRegClass : public TargetRegClassInfo { + SparcV9SpecialRegClass(unsigned ID) : TargetRegClassInfo(ID, 0, 1) { } void colorIGNode(IGNode *Node, const std::vector &IsColorUsedArr) const { - assert(0 && "SparcSpecialRegClass should never be used for allocation"); + assert(0 && "SparcV9SpecialRegClass should never be used for allocation"); } // all currently included special regs are volatile Index: llvm/lib/Target/SparcV9/SparcV9RegInfo.cpp diff -u llvm/lib/Target/SparcV9/SparcV9RegInfo.cpp:1.119 llvm/lib/Target/SparcV9/SparcV9RegInfo.cpp:1.120 --- llvm/lib/Target/SparcV9/SparcV9RegInfo.cpp:1.119 Sun Feb 22 13:23:26 2004 +++ llvm/lib/Target/SparcV9/SparcV9RegInfo.cpp Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===-- SparcRegInfo.cpp - Sparc Target Register Information --------------===// +//===-- SparcV9RegInfo.cpp - SparcV9 Target Register Information --------------===// // // The LLVM Compiler Infrastructure // @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// // -// This file contains implementation of Sparc specific helper methods +// This file contains implementation of SparcV9 specific helper methods // used for register allocation. // //===----------------------------------------------------------------------===// @@ -24,10 +24,10 @@ #include "llvm/Function.h" #include "llvm/iTerminators.h" #include "llvm/iOther.h" -#include "SparcInternals.h" -#include "SparcRegClassInfo.h" -#include "SparcRegInfo.h" -#include "SparcTargetMachine.h" +#include "SparcV9Internals.h" +#include "SparcV9RegClassInfo.h" +#include "SparcV9RegInfo.h" +#include "SparcV9TargetMachine.h" namespace llvm { @@ -35,16 +35,16 @@ BadRegClass = ~0 }; -SparcRegInfo::SparcRegInfo(const SparcTargetMachine &tgt) +SparcV9RegInfo::SparcV9RegInfo(const SparcV9TargetMachine &tgt) : TargetRegInfo(tgt), NumOfIntArgRegs(6), NumOfFloatArgRegs(32) { - MachineRegClassArr.push_back(new SparcIntRegClass(IntRegClassID)); - MachineRegClassArr.push_back(new SparcFloatRegClass(FloatRegClassID)); - MachineRegClassArr.push_back(new SparcIntCCRegClass(IntCCRegClassID)); - MachineRegClassArr.push_back(new SparcFloatCCRegClass(FloatCCRegClassID)); - MachineRegClassArr.push_back(new SparcSpecialRegClass(SpecialRegClassID)); + MachineRegClassArr.push_back(new SparcV9IntRegClass(IntRegClassID)); + MachineRegClassArr.push_back(new SparcV9FloatRegClass(FloatRegClassID)); + MachineRegClassArr.push_back(new SparcV9IntCCRegClass(IntCCRegClassID)); + MachineRegClassArr.push_back(new SparcV9FloatCCRegClass(FloatCCRegClassID)); + MachineRegClassArr.push_back(new SparcV9SpecialRegClass(SpecialRegClassID)); - assert(SparcFloatRegClass::StartOfNonVolatileRegs == 32 && + assert(SparcV9FloatRegClass::StartOfNonVolatileRegs == 32 && "32 Float regs are used for float arg passing"); } @@ -52,31 +52,31 @@ // getZeroRegNum - returns the register that contains always zero. // this is the unified register number // -unsigned SparcRegInfo::getZeroRegNum() const { - return getUnifiedRegNum(SparcRegInfo::IntRegClassID, - SparcIntRegClass::g0); +unsigned SparcV9RegInfo::getZeroRegNum() const { + return getUnifiedRegNum(SparcV9RegInfo::IntRegClassID, + SparcV9IntRegClass::g0); } // getCallAddressReg - returns the reg used for pushing the address when a // method is called. This can be used for other purposes between calls // -unsigned SparcRegInfo::getCallAddressReg() const { - return getUnifiedRegNum(SparcRegInfo::IntRegClassID, - SparcIntRegClass::o7); +unsigned SparcV9RegInfo::getCallAddressReg() const { + return getUnifiedRegNum(SparcV9RegInfo::IntRegClassID, + SparcV9IntRegClass::o7); } // Returns the register containing the return address. // It should be made sure that this register contains the return // value when a return instruction is reached. // -unsigned SparcRegInfo::getReturnAddressReg() const { - return getUnifiedRegNum(SparcRegInfo::IntRegClassID, - SparcIntRegClass::i7); +unsigned SparcV9RegInfo::getReturnAddressReg() const { + return getUnifiedRegNum(SparcV9RegInfo::IntRegClassID, + SparcV9IntRegClass::i7); } // Register get name implementations... -// Int register names in same order as enum in class SparcIntRegClass +// Int register names in same order as enum in class SparcV9IntRegClass static const char * const IntRegNames[] = { "o0", "o1", "o2", "o3", "o4", "o5", "o7", "l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7", @@ -86,7 +86,7 @@ "o6" }; -const char * const SparcIntRegClass::getRegName(unsigned reg) const { +const char * const SparcV9IntRegClass::getRegName(unsigned reg) const { assert(reg < NumOfAllRegs); return IntRegNames[reg]; } @@ -101,7 +101,7 @@ "f60", "f61", "f62", "f63" }; -const char * const SparcFloatRegClass::getRegName(unsigned reg) const { +const char * const SparcV9FloatRegClass::getRegName(unsigned reg) const { assert (reg < NumOfAllRegs); return FloatRegNames[reg]; } @@ -111,7 +111,7 @@ "xcc", "icc", "ccr" }; -const char * const SparcIntCCRegClass::getRegName(unsigned reg) const { +const char * const SparcV9IntCCRegClass::getRegName(unsigned reg) const { assert(reg < 3); return IntCCRegNames[reg]; } @@ -120,7 +120,7 @@ "fcc0", "fcc1", "fcc2", "fcc3" }; -const char * const SparcFloatCCRegClass::getRegName(unsigned reg) const { +const char * const SparcV9FloatCCRegClass::getRegName(unsigned reg) const { assert (reg < 5); return FloatCCRegNames[reg]; } @@ -129,21 +129,21 @@ "fsr" }; -const char * const SparcSpecialRegClass::getRegName(unsigned reg) const { +const char * const SparcV9SpecialRegClass::getRegName(unsigned reg) const { assert (reg < 1); return SpecialRegNames[reg]; } // Get unified reg number for frame pointer -unsigned SparcRegInfo::getFramePointer() const { - return getUnifiedRegNum(SparcRegInfo::IntRegClassID, - SparcIntRegClass::i6); +unsigned SparcV9RegInfo::getFramePointer() const { + return getUnifiedRegNum(SparcV9RegInfo::IntRegClassID, + SparcV9IntRegClass::i6); } // Get unified reg number for stack pointer -unsigned SparcRegInfo::getStackPointer() const { - return getUnifiedRegNum(SparcRegInfo::IntRegClassID, - SparcIntRegClass::o6); +unsigned SparcV9RegInfo::getStackPointer() const { + return getUnifiedRegNum(SparcV9RegInfo::IntRegClassID, + SparcV9IntRegClass::o6); } @@ -175,14 +175,14 @@ // regClassId is set to the register class ID. // int -SparcRegInfo::regNumForIntArg(bool inCallee, bool isVarArgsCall, +SparcV9RegInfo::regNumForIntArg(bool inCallee, bool isVarArgsCall, unsigned argNo, unsigned& regClassId) const { regClassId = IntRegClassID; if (argNo >= NumOfIntArgRegs) return getInvalidRegNum(); else - return argNo + (inCallee? SparcIntRegClass::i0 : SparcIntRegClass::o0); + return argNo + (inCallee? SparcV9IntRegClass::i0 : SparcV9IntRegClass::o0); } // Get the register number for the specified FP argument #argNo, @@ -194,7 +194,7 @@ // regClassId is set to the register class ID. // int -SparcRegInfo::regNumForFPArg(unsigned regType, +SparcV9RegInfo::regNumForFPArg(unsigned regType, bool inCallee, bool isVarArgsCall, unsigned argNo, unsigned& regClassId) const { @@ -205,10 +205,10 @@ regClassId = FloatRegClassID; if (regType == FPSingleRegType) return (argNo*2+1 >= NumOfFloatArgRegs)? - getInvalidRegNum() : SparcFloatRegClass::f0 + (argNo * 2 + 1); + getInvalidRegNum() : SparcV9FloatRegClass::f0 + (argNo * 2 + 1); else if (regType == FPDoubleRegType) return (argNo*2 >= NumOfFloatArgRegs)? - getInvalidRegNum() : SparcFloatRegClass::f0 + (argNo * 2); + getInvalidRegNum() : SparcV9FloatRegClass::f0 + (argNo * 2); else assert(0 && "Illegal FP register type"); return 0; @@ -220,10 +220,10 @@ // Finds the return address of a call sparc specific call instruction //--------------------------------------------------------------------------- -// The following 4 methods are used to find the RegType (SparcInternals.h) +// The following 4 methods are used to find the RegType (SparcV9Internals.h) // of a LiveRange, a Value, and for a given register unified reg number. // -int SparcRegInfo::getRegTypeForClassAndType(unsigned regClassID, +int SparcV9RegInfo::getRegTypeForClassAndType(unsigned regClassID, const Type* type) const { switch (regClassID) { @@ -239,17 +239,17 @@ } } -int SparcRegInfo::getRegTypeForDataType(const Type* type) const +int SparcV9RegInfo::getRegTypeForDataType(const Type* type) const { return getRegTypeForClassAndType(getRegClassIDOfType(type), type); } -int SparcRegInfo::getRegTypeForLR(const LiveRange *LR) const +int SparcV9RegInfo::getRegTypeForLR(const LiveRange *LR) const { return getRegTypeForClassAndType(LR->getRegClassID(), LR->getType()); } -int SparcRegInfo::getRegType(int unifiedRegNum) const +int SparcV9RegInfo::getRegType(int unifiedRegNum) const { if (unifiedRegNum < 32) return IntRegType; @@ -269,7 +269,7 @@ // To find the register class used for a specified Type // -unsigned SparcRegInfo::getRegClassIDOfType(const Type *type, +unsigned SparcV9RegInfo::getRegClassIDOfType(const Type *type, bool isCCReg) const { Type::PrimitiveID ty = type->getPrimitiveID(); unsigned res; @@ -292,7 +292,7 @@ return res; } -unsigned SparcRegInfo::getRegClassIDOfRegType(int regType) const { +unsigned SparcV9RegInfo::getRegClassIDOfRegType(int regType) const { switch(regType) { case IntRegType: return IntRegClassID; case FPSingleRegType: @@ -309,14 +309,14 @@ // Suggests a register for the ret address in the RET machine instruction. // We always suggest %i7 by convention. //--------------------------------------------------------------------------- -void SparcRegInfo::suggestReg4RetAddr(MachineInstr *RetMI, +void SparcV9RegInfo::suggestReg4RetAddr(MachineInstr *RetMI, LiveRangeInfo& LRI) const { assert(target.getInstrInfo().isReturn(RetMI->getOpcode())); // return address is always mapped to i7 so set it immediately RetMI->SetRegForOperand(0, getUnifiedRegNum(IntRegClassID, - SparcIntRegClass::i7)); + SparcV9IntRegClass::i7)); // Possible Optimization: // Instead of setting the color, we can suggest one. In that case, @@ -329,16 +329,16 @@ // assert( RetAddrVal && "LR for ret address must be created at start"); // LiveRange * RetAddrLR = LRI.getLiveRangeForValue( RetAddrVal); // RetAddrLR->setSuggestedColor(getUnifiedRegNum( IntRegClassID, - // SparcIntRegOrdr::i7) ); + // SparcV9IntRegOrdr::i7) ); } //--------------------------------------------------------------------------- // Suggests a register for the ret address in the JMPL/CALL machine instr. -// Sparc ABI dictates that %o7 be used for this purpose. +// SparcV9 ABI dictates that %o7 be used for this purpose. //--------------------------------------------------------------------------- void -SparcRegInfo::suggestReg4CallAddr(MachineInstr * CallMI, +SparcV9RegInfo::suggestReg4CallAddr(MachineInstr * CallMI, LiveRangeInfo& LRI) const { CallArgsDescriptor* argDesc = CallArgsDescriptor::get(CallMI); @@ -350,19 +350,19 @@ assert(RetAddrLR && "INTERNAL ERROR: No LR for return address of call!"); unsigned RegClassID = RetAddrLR->getRegClassID(); - RetAddrLR->setColor(getUnifiedRegNum(IntRegClassID, SparcIntRegClass::o7)); + RetAddrLR->setColor(getUnifiedRegNum(IntRegClassID, SparcV9IntRegClass::o7)); } //--------------------------------------------------------------------------- // This method will suggest colors to incoming args to a method. -// According to the Sparc ABI, the first 6 incoming args are in +// According to the SparcV9 ABI, the first 6 incoming args are in // %i0 - %i5 (if they are integer) OR in %f0 - %f31 (if they are float). // If the arg is passed on stack due to the lack of regs, NOTHING will be // done - it will be colored (or spilled) as a normal live range. //--------------------------------------------------------------------------- -void SparcRegInfo::suggestRegs4MethodArgs(const Function *Meth, +void SparcV9RegInfo::suggestRegs4MethodArgs(const Function *Meth, LiveRangeInfo& LRI) const { // Check if this is a varArgs function. needed for choosing regs. @@ -395,7 +395,7 @@ // the correct hardware registers if they did not receive the correct // (suggested) color through graph coloring. //--------------------------------------------------------------------------- -void SparcRegInfo::colorMethodArgs(const Function *Meth, +void SparcV9RegInfo::colorMethodArgs(const Function *Meth, LiveRangeInfo &LRI, std::vector& InstrnsBefore, std::vector& InstrnsAfter) const { @@ -568,7 +568,7 @@ // This method is called before graph coloring to suggest colors to the // outgoing call args and the return value of the call. //--------------------------------------------------------------------------- -void SparcRegInfo::suggestRegs4CallArgs(MachineInstr *CallMI, +void SparcV9RegInfo::suggestRegs4CallArgs(MachineInstr *CallMI, LiveRangeInfo& LRI) const { assert ( (target.getInstrInfo()).isCall(CallMI->getOpcode()) ); @@ -588,9 +588,9 @@ // now suggest a register depending on the register class of ret arg if( RegClassID == IntRegClassID ) - RetValLR->setSuggestedColor(SparcIntRegClass::o0); + RetValLR->setSuggestedColor(SparcV9IntRegClass::o0); else if (RegClassID == FloatRegClassID ) - RetValLR->setSuggestedColor(SparcFloatRegClass::f0 ); + RetValLR->setSuggestedColor(SparcV9FloatRegClass::f0 ); else assert( 0 && "Unknown reg class for return value of call\n"); } @@ -636,7 +636,7 @@ // this method is called for an LLVM return instruction to identify which // values will be returned from this method and to suggest colors. //--------------------------------------------------------------------------- -void SparcRegInfo::suggestReg4RetValue(MachineInstr *RetMI, +void SparcV9RegInfo::suggestReg4RetValue(MachineInstr *RetMI, LiveRangeInfo& LRI) const { assert( (target.getInstrInfo()).isReturn( RetMI->getOpcode() ) ); @@ -650,8 +650,8 @@ if (const Value *RetVal = retI->getReturnValue()) if (LiveRange *const LR = LRI.getLiveRangeForValue(RetVal)) LR->setSuggestedColor(LR->getRegClassID() == IntRegClassID - ? (unsigned) SparcIntRegClass::i0 - : (unsigned) SparcFloatRegClass::f0); + ? (unsigned) SparcV9IntRegClass::i0 + : (unsigned) SparcV9FloatRegClass::f0); } //--------------------------------------------------------------------------- @@ -664,7 +664,7 @@ //--------------------------------------------------------------------------- bool -SparcRegInfo::regTypeNeedsScratchReg(int RegType, +SparcV9RegInfo::regTypeNeedsScratchReg(int RegType, int& scratchRegType) const { if (RegType == IntCCRegType) @@ -681,7 +681,7 @@ //--------------------------------------------------------------------------- void -SparcRegInfo::cpReg2RegMI(std::vector& mvec, +SparcV9RegInfo::cpReg2RegMI(std::vector& mvec, unsigned SrcReg, unsigned DestReg, int RegType) const { @@ -697,8 +697,8 @@ if (getRegType(DestReg) == IntRegType) { // copy intCC reg to int reg MI = (BuildMI(V9::RDCCR, 2) - .addMReg(getUnifiedRegNum(SparcRegInfo::IntCCRegClassID, - SparcIntCCRegClass::ccr)) + .addMReg(getUnifiedRegNum(SparcV9RegInfo::IntCCRegClassID, + SparcV9IntCCRegClass::ccr)) .addMReg(DestReg,MachineOperand::Def)); } else { // copy int reg to intCC reg @@ -706,9 +706,9 @@ && "Can only copy CC reg to/from integer reg"); MI = (BuildMI(V9::WRCCRr, 3) .addMReg(SrcReg) - .addMReg(SparcIntRegClass::g0) - .addMReg(getUnifiedRegNum(SparcRegInfo::IntCCRegClassID, - SparcIntCCRegClass::ccr), + .addMReg(SparcV9IntRegClass::g0) + .addMReg(getUnifiedRegNum(SparcV9RegInfo::IntCCRegClassID, + SparcV9IntCCRegClass::ccr), MachineOperand::Def)); } break; @@ -748,7 +748,7 @@ void -SparcRegInfo::cpReg2MemMI(std::vector& mvec, +SparcV9RegInfo::cpReg2MemMI(std::vector& mvec, unsigned SrcReg, unsigned PtrReg, int Offset, int RegType, @@ -768,8 +768,8 @@ OffReg = PRA.getUnusedUniRegAtMI(RC, RegType, MInst, LVSetBef); #else // Default to using register g4 for holding large offsets - OffReg = getUnifiedRegNum(SparcRegInfo::IntRegClassID, - SparcIntRegClass::g4); + OffReg = getUnifiedRegNum(SparcV9RegInfo::IntRegClassID, + SparcV9IntRegClass::g4); #endif assert(OffReg >= 0 && "FIXME: cpReg2MemMI cannot find an unused reg."); mvec.push_back(BuildMI(V9::SETSW, 2).addZImm(Offset).addReg(OffReg)); @@ -801,8 +801,8 @@ assert(scratchReg >= 0 && "Need scratch reg to store %ccr to memory"); assert(getRegType(scratchReg) ==IntRegType && "Invalid scratch reg"); MI = (BuildMI(V9::RDCCR, 2) - .addMReg(getUnifiedRegNum(SparcRegInfo::IntCCRegClassID, - SparcIntCCRegClass::ccr)) + .addMReg(getUnifiedRegNum(SparcV9RegInfo::IntCCRegClassID, + SparcV9IntCCRegClass::ccr)) .addMReg(scratchReg, MachineOperand::Def)); mvec.push_back(MI); @@ -810,8 +810,8 @@ return; case FloatCCRegType: { - unsigned fsrReg = getUnifiedRegNum(SparcRegInfo::SpecialRegClassID, - SparcSpecialRegClass::fsr); + unsigned fsrReg = getUnifiedRegNum(SparcV9RegInfo::SpecialRegClassID, + SparcV9SpecialRegClass::fsr); if (target.getInstrInfo().constantFitsInImmedField(V9::STXFSRi, Offset)) MI=BuildMI(V9::STXFSRi,3).addMReg(fsrReg).addMReg(PtrReg).addSImm(Offset); else @@ -832,7 +832,7 @@ void -SparcRegInfo::cpMem2RegMI(std::vector& mvec, +SparcV9RegInfo::cpMem2RegMI(std::vector& mvec, unsigned PtrReg, int Offset, unsigned DestReg, @@ -853,8 +853,8 @@ OffReg = PRA.getUnusedUniRegAtMI(RC, RegType, MInst, LVSetBef); #else // Default to using register g4 for holding large offsets - OffReg = getUnifiedRegNum(SparcRegInfo::IntRegClassID, - SparcIntRegClass::g4); + OffReg = getUnifiedRegNum(SparcV9RegInfo::IntRegClassID, + SparcV9IntRegClass::g4); #endif assert(OffReg >= 0 && "FIXME: cpReg2MemMI cannot find an unused reg."); mvec.push_back(BuildMI(V9::SETSW, 2).addZImm(Offset).addReg(OffReg)); @@ -894,14 +894,14 @@ cpMem2RegMI(mvec, PtrReg, Offset, scratchReg, IntRegType); MI = (BuildMI(V9::WRCCRr, 3) .addMReg(scratchReg) - .addMReg(SparcIntRegClass::g0) - .addMReg(getUnifiedRegNum(SparcRegInfo::IntCCRegClassID, - SparcIntCCRegClass::ccr), MachineOperand::Def)); + .addMReg(SparcV9IntRegClass::g0) + .addMReg(getUnifiedRegNum(SparcV9RegInfo::IntCCRegClassID, + SparcV9IntCCRegClass::ccr), MachineOperand::Def)); break; case FloatCCRegType: { - unsigned fsrRegNum = getUnifiedRegNum(SparcRegInfo::SpecialRegClassID, - SparcSpecialRegClass::fsr); + unsigned fsrRegNum = getUnifiedRegNum(SparcV9RegInfo::SpecialRegClassID, + SparcV9SpecialRegClass::fsr); if (target.getInstrInfo().constantFitsInImmedField(V9::LDXFSRi, Offset)) MI = BuildMI(V9::LDXFSRi, 3).addMReg(PtrReg).addSImm(Offset) .addMReg(fsrRegNum, MachineOperand::UseAndDef); @@ -924,7 +924,7 @@ void -SparcRegInfo::cpValue2Value(Value *Src, Value *Dest, +SparcV9RegInfo::cpValue2Value(Value *Src, Value *Dest, std::vector& mvec) const { int RegType = getRegTypeForDataType(Src->getType()); MachineInstr * MI = NULL; @@ -953,7 +953,7 @@ // Print the register assigned to a LR //--------------------------------------------------------------------------- -void SparcRegInfo::printReg(const LiveRange *LR) const { +void SparcV9RegInfo::printReg(const LiveRange *LR) const { unsigned RegClassID = LR->getRegClassID(); std::cerr << " Node "; Index: llvm/lib/Target/SparcV9/SparcV9RegInfo.h diff -u llvm/lib/Target/SparcV9/SparcV9RegInfo.h:1.9 llvm/lib/Target/SparcV9/SparcV9RegInfo.h:1.10 --- llvm/lib/Target/SparcV9/SparcV9RegInfo.h:1.9 Fri Feb 13 15:01:20 2004 +++ llvm/lib/Target/SparcV9/SparcV9RegInfo.h Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===-- SparcRegInfo.h - Define TargetRegInfo for Sparc ---------*- C++ -*-===// +//===-- SparcV9RegInfo.h - Define TargetRegInfo for SparcV9 ---------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// // -// This class implements the virtual class TargetRegInfo for Sparc. +// This class implements the virtual class TargetRegInfo for SparcV9. // //---------------------------------------------------------------------------- @@ -18,9 +18,9 @@ namespace llvm { -class SparcTargetMachine; +class SparcV9TargetMachine; -class SparcRegInfo : public TargetRegInfo { +class SparcV9RegInfo : public TargetRegInfo { private: @@ -34,7 +34,7 @@ // The following methods are used to color special live ranges (e.g. // function args and return values etc.) with specific hardware registers - // as required. See SparcRegInfo.cpp for the implementation. + // as required. See SparcV9RegInfo.cpp for the implementation. // void suggestReg4RetAddr(MachineInstr *RetMI, LiveRangeInfo &LRI) const; @@ -45,7 +45,7 @@ int getRegTypeForClassAndType(unsigned regClassID, const Type* type) const; public: - // Type of registers available in Sparc. There can be several reg types + // Type of registers available in SparcV9. There can be several reg types // in the same class. For instace, the float reg class has Single/Double // types // @@ -58,7 +58,7 @@ SpecialRegType }; - // The actual register classes in the Sparc + // The actual register classes in the SparcV9 // // **** WARNING: If this enum order is changed, also modify // getRegisterClassOfValue method below since it assumes this particular @@ -72,7 +72,7 @@ SpecialRegClassID // Special (unallocated) registers }; - SparcRegInfo(const SparcTargetMachine &tgt); + SparcV9RegInfo(const SparcV9TargetMachine &tgt); // To find the register class used for a specified Type // @@ -115,7 +115,7 @@ // The following methods are used to color special live ranges (e.g. // function args and return values etc.) with specific hardware registers - // as required. See SparcRegInfo.cpp for the implementation for Sparc. + // as required. See SparcV9RegInfo.cpp for the implementation for SparcV9. // void suggestRegs4MethodArgs(const Function *Meth, LiveRangeInfo& LRI) const; @@ -135,7 +135,7 @@ void printReg(const LiveRange *LR) const; // returns the # of bytes of stack space allocated for each register - // type. For Sparc, currently we allocate 8 bytes on stack for all + // type. For SparcV9, currently we allocate 8 bytes on stack for all // register types. We can optimize this later if necessary to save stack // space (However, should make sure that stack alignment is correct) // Index: llvm/lib/Target/SparcV9/SparcV9SchedInfo.cpp diff -u llvm/lib/Target/SparcV9/SparcV9SchedInfo.cpp:1.9 llvm/lib/Target/SparcV9/SparcV9SchedInfo.cpp:1.10 --- llvm/lib/Target/SparcV9/SparcV9SchedInfo.cpp:1.9 Wed Dec 17 16:04:00 2003 +++ llvm/lib/Target/SparcV9/SparcV9SchedInfo.cpp Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===-- UltraSparcSchedInfo.cpp -------------------------------------------===// +//===-- UltraSparcV9SchedInfo.cpp -------------------------------------------===// // // The LLVM Compiler Infrastructure // @@ -7,11 +7,11 @@ // //===----------------------------------------------------------------------===// // -// Describe the scheduling characteristics of the UltraSparc +// Describe the scheduling characteristics of the UltraSparcV9 // //===----------------------------------------------------------------------===// -#include "SparcInternals.h" +#include "SparcV9Internals.h" using namespace llvm; @@ -129,7 +129,7 @@ //--------------------------------------------------------------------------- -// const InstrClassRUsage SparcRUsageDesc[] +// const InstrClassRUsage SparcV9RUsageDesc[] // // Purpose: // Resource usage information for instruction in each scheduling class. @@ -396,7 +396,7 @@ }; -static const InstrClassRUsage SparcRUsageDesc[] = { +static const InstrClassRUsage SparcV9RUsageDesc[] = { NoneClassRUsage, IEUNClassRUsage, IEU0ClassRUsage, @@ -412,14 +412,14 @@ //--------------------------------------------------------------------------- -// const InstrIssueDelta SparcInstrIssueDeltas[] +// const InstrIssueDelta SparcV9InstrIssueDeltas[] // // Purpose: // Changes to issue restrictions information in InstrClassRUsage for // instructions that differ from other instructions in their class. //--------------------------------------------------------------------------- -static const InstrIssueDelta SparcInstrIssueDeltas[] = { +static const InstrIssueDelta SparcV9InstrIssueDeltas[] = { // opCode, isSingleIssue, breaksGroup, numBubbles @@ -504,14 +504,14 @@ //--------------------------------------------------------------------------- -// const InstrRUsageDelta SparcInstrUsageDeltas[] +// const InstrRUsageDelta SparcV9InstrUsageDeltas[] // // Purpose: // Changes to resource usage information in InstrClassRUsage for // instructions that differ from other instructions in their class. //--------------------------------------------------------------------------- -static const InstrRUsageDelta SparcInstrUsageDeltas[] = { +static const InstrRUsageDelta SparcV9InstrUsageDeltas[] = { // MachineOpCode, Resource, Start cycle, Num cycles @@ -601,7 +601,7 @@ #ifdef EXPLICIT_BUBBLES_NEEDED // // MULScc inserts one bubble. - // This means it breaks the current group (captured in UltraSparcSchedInfo) + // This means it breaks the current group (captured in UltraSparcV9SchedInfo) // *and occupies all issue slots for the next cycle // //{ V9::MULScc, AllIssueSlots.rid, 2, 2-1 }, @@ -728,7 +728,7 @@ //--------------------------------------------------------------------------- -// class SparcSchedInfo +// class SparcV9SchedInfo // // Purpose: // Scheduling information for the UltraSPARC. @@ -737,14 +737,14 @@ //--------------------------------------------------------------------------- /*ctor*/ -SparcSchedInfo::SparcSchedInfo(const TargetMachine& tgt) +SparcV9SchedInfo::SparcV9SchedInfo(const TargetMachine& tgt) : TargetSchedInfo(tgt, (unsigned int) SPARC_NUM_SCHED_CLASSES, - SparcRUsageDesc, - SparcInstrUsageDeltas, - SparcInstrIssueDeltas, - sizeof(SparcInstrUsageDeltas)/sizeof(InstrRUsageDelta), - sizeof(SparcInstrIssueDeltas)/sizeof(InstrIssueDelta)) + SparcV9RUsageDesc, + SparcV9InstrUsageDeltas, + SparcV9InstrIssueDeltas, + sizeof(SparcV9InstrUsageDeltas)/sizeof(InstrRUsageDelta), + sizeof(SparcV9InstrIssueDeltas)/sizeof(InstrIssueDelta)) { maxNumIssueTotal = 4; longestIssueConflict = 0; // computed from issuesGaps[] @@ -764,7 +764,7 @@ } void -SparcSchedInfo::initializeResources() +SparcV9SchedInfo::initializeResources() { // Compute TargetSchedInfo::instrRUsages and TargetSchedInfo::issueGaps TargetSchedInfo::initializeResources(); Index: llvm/lib/Target/SparcV9/SparcV9TargetMachine.cpp diff -u llvm/lib/Target/SparcV9/SparcV9TargetMachine.cpp:1.99 llvm/lib/Target/SparcV9/SparcV9TargetMachine.cpp:1.100 --- llvm/lib/Target/SparcV9/SparcV9TargetMachine.cpp:1.99 Mon Feb 9 17:18:42 2004 +++ llvm/lib/Target/SparcV9/SparcV9TargetMachine.cpp Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===-- Sparc.cpp - General implementation file for the Sparc Target ------===// +//===-- SparcV9.cpp - General implementation file for the SparcV9 Target ------===// // // The LLVM Compiler Infrastructure // @@ -26,21 +26,21 @@ #include "llvm/Target/TargetMachineImpls.h" #include "llvm/Transforms/Scalar.h" #include "MappingInfo.h" -#include "SparcInternals.h" -#include "SparcTargetMachine.h" +#include "SparcV9Internals.h" +#include "SparcV9TargetMachine.h" #include "Support/CommandLine.h" using namespace llvm; static const unsigned ImplicitRegUseList[] = { 0 }; /* not used yet */ // Build the MachineInstruction Description Array... -const TargetInstrDescriptor llvm::SparcMachineInstrDesc[] = { +const TargetInstrDescriptor llvm::SparcV9MachineInstrDesc[] = { #define I(ENUM, OPCODESTRING, NUMOPERANDS, RESULTPOS, MAXIMM, IMMSE, \ NUMDELAYSLOTS, LATENCY, SCHEDCLASS, INSTFLAGS) \ { OPCODESTRING, NUMOPERANDS, RESULTPOS, MAXIMM, IMMSE, \ NUMDELAYSLOTS, LATENCY, SCHEDCLASS, INSTFLAGS, 0, \ ImplicitRegUseList, ImplicitRegUseList }, -#include "SparcInstr.def" +#include "SparcV9Instr.def" }; //--------------------------------------------------------------------------- @@ -106,13 +106,13 @@ } } -FunctionPass *llvm::createSparcMachineCodeDestructionPass() { +FunctionPass *llvm::createSparcV9MachineCodeDestructionPass() { return new DestroyMachineFunction(); } -SparcTargetMachine::SparcTargetMachine(IntrinsicLowering *il) - : TargetMachine("UltraSparc-Native", il, false), +SparcV9TargetMachine::SparcV9TargetMachine(IntrinsicLowering *il) + : TargetMachine("UltraSparcV9-Native", il, false), schedInfo(*this), regInfo(*this), frameInfo(*this), @@ -124,7 +124,7 @@ /// process for the ultra sparc. /// bool -SparcTargetMachine::addPassesToEmitAssembly(PassManager &PM, std::ostream &Out) +SparcV9TargetMachine::addPassesToEmitAssembly(PassManager &PM, std::ostream &Out) { // The following 3 passes used to be inserted specially by llc. // Replace malloc and free instructions with library calls. @@ -177,7 +177,7 @@ // allowing machine code representations for functions to be free'd after the // function has been emitted. PM.add(createAsmPrinterPass(Out, *this)); - PM.add(createSparcMachineCodeDestructionPass()); // Free mem no longer needed + PM.add(createSparcV9MachineCodeDestructionPass()); // Free mem no longer needed // Emit bytecode to the assembly file into its special section next if (EmitMappingInfo) @@ -187,9 +187,9 @@ } /// addPassesToJITCompile - This method controls the JIT method of code -/// generation for the UltraSparc. +/// generation for the UltraSparcV9. /// -void SparcJITInfo::addPassesToJITCompile(FunctionPassManager &PM) { +void SparcV9JITInfo::addPassesToJITCompile(FunctionPassManager &PM) { const TargetData &TD = TM.getTargetData(); PM.add(new TargetData("lli", TD.isLittleEndian(), TD.getPointerSize(), @@ -229,10 +229,10 @@ PM.add(createPeepholeOptsPass(TM)); } -/// allocateSparcTargetMachine - Allocate and return a subclass of TargetMachine -/// that implements the Sparc backend. (the llvm/CodeGen/Sparc.h interface) +/// allocateSparcV9TargetMachine - Allocate and return a subclass of TargetMachine +/// that implements the SparcV9 backend. (the llvm/CodeGen/SparcV9.h interface) /// -TargetMachine *llvm::allocateSparcTargetMachine(const Module &M, +TargetMachine *llvm::allocateSparcV9TargetMachine(const Module &M, IntrinsicLowering *IL) { - return new SparcTargetMachine(IL); + return new SparcV9TargetMachine(IL); } Index: llvm/lib/Target/SparcV9/SparcV9TargetMachine.h diff -u llvm/lib/Target/SparcV9/SparcV9TargetMachine.h:1.4 llvm/lib/Target/SparcV9/SparcV9TargetMachine.h:1.5 --- llvm/lib/Target/SparcV9/SparcV9TargetMachine.h:1.4 Sun Dec 28 15:23:38 2003 +++ llvm/lib/Target/SparcV9/SparcV9TargetMachine.h Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===-- SparcTargetMachine.h - Define TargetMachine for Sparc ---*- C++ -*-===// +//===-- SparcV9TargetMachine.h - Define TargetMachine for SparcV9 ---*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -16,24 +16,24 @@ #include "llvm/Target/TargetFrameInfo.h" #include "llvm/Target/TargetMachine.h" -#include "SparcInstrInfo.h" -#include "SparcInternals.h" -#include "SparcRegInfo.h" -#include "SparcFrameInfo.h" -#include "SparcJITInfo.h" +#include "SparcV9InstrInfo.h" +#include "SparcV9Internals.h" +#include "SparcV9RegInfo.h" +#include "SparcV9FrameInfo.h" +#include "SparcV9JITInfo.h" namespace llvm { class PassManager; -class SparcTargetMachine : public TargetMachine { - SparcInstrInfo instrInfo; - SparcSchedInfo schedInfo; - SparcRegInfo regInfo; - SparcFrameInfo frameInfo; - SparcCacheInfo cacheInfo; - SparcJITInfo jitInfo; +class SparcV9TargetMachine : public TargetMachine { + SparcV9InstrInfo instrInfo; + SparcV9SchedInfo schedInfo; + SparcV9RegInfo regInfo; + SparcV9FrameInfo frameInfo; + SparcV9CacheInfo cacheInfo; + SparcV9JITInfo jitInfo; public: - SparcTargetMachine(IntrinsicLowering *IL); + SparcV9TargetMachine(IntrinsicLowering *IL); virtual const TargetInstrInfo &getInstrInfo() const { return instrInfo; } virtual const TargetSchedInfo &getSchedInfo() const { return schedInfo; } Index: llvm/lib/Target/SparcV9/SparcV9_F2.td diff -u llvm/lib/Target/SparcV9/SparcV9_F2.td:1.8 llvm/lib/Target/SparcV9/SparcV9_F2.td:1.9 --- llvm/lib/Target/SparcV9/SparcV9_F2.td:1.8 Tue Oct 21 10:17:13 2003 +++ llvm/lib/Target/SparcV9/SparcV9_F2.td Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===- SparcV9_F2.td - Format 2 instructions: Sparc V9 Target -------------===// +//===- SparcV9_F2.td - Format 2 instructions: SparcV9 V9 Target -------------===// // // The LLVM Compiler Infrastructure // @@ -32,7 +32,7 @@ class F2_2 cond, string name> : F2_br { // Format 2.2 instructions bits<22> disp; - bit annul = 0; // currently unused by Sparc backend + bit annul = 0; // currently unused by SparcV9 backend let Name = name; let Inst{29} = annul; @@ -44,7 +44,7 @@ bits<2> cc; bits<19> disp; bit predict = 1; - bit annul = 0; // currently unused by Sparc backend + bit annul = 0; // currently unused by SparcV9 backend let Name = name; let Inst{29} = annul; @@ -58,7 +58,7 @@ bits<5> rs1; bits<16> disp; bit predict = 1; - bit annul = 0; // currently unused by Sparc backend + bit annul = 0; // currently unused by SparcV9 backend let Name = name; let Inst{29} = annul; Index: llvm/lib/Target/SparcV9/SparcV9_F3.td diff -u llvm/lib/Target/SparcV9/SparcV9_F3.td:1.17 llvm/lib/Target/SparcV9/SparcV9_F3.td:1.18 --- llvm/lib/Target/SparcV9/SparcV9_F3.td:1.17 Tue Oct 21 10:17:13 2003 +++ llvm/lib/Target/SparcV9/SparcV9_F3.td Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===- SparcV9_F3.td - Format 3 Instructions: Sparc V9 Target -------------===// +//===- SparcV9_F3.td - Format 3 Instructions: SparcV9 V9 Target -------------===// // // The LLVM Compiler Infrastructure // Index: llvm/lib/Target/SparcV9/SparcV9_F4.td diff -u llvm/lib/Target/SparcV9/SparcV9_F4.td:1.10 llvm/lib/Target/SparcV9/SparcV9_F4.td:1.11 --- llvm/lib/Target/SparcV9/SparcV9_F4.td:1.10 Tue Oct 21 10:17:13 2003 +++ llvm/lib/Target/SparcV9/SparcV9_F4.td Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===- SparcV9_F4.td - Format 4 instructions: Sparc V9 Target -------------===// +//===- SparcV9_F4.td - Format 4 instructions: SparcV9 V9 Target -------------===// // // The LLVM Compiler Infrastructure // Index: llvm/lib/Target/SparcV9/SparcV9_Reg.td diff -u llvm/lib/Target/SparcV9/SparcV9_Reg.td:1.7 llvm/lib/Target/SparcV9/SparcV9_Reg.td:1.8 --- llvm/lib/Target/SparcV9/SparcV9_Reg.td:1.7 Sat Nov 8 12:12:24 2003 +++ llvm/lib/Target/SparcV9/SparcV9_Reg.td Wed Feb 25 12:44:15 2004 @@ -1,4 +1,4 @@ -//===- SparcV9_Reg.td - Sparc V9 Register definitions ---------------------===// +//===- SparcV9_Reg.td - SparcV9 V9 Register definitions ---------------------===// // // The LLVM Compiler Infrastructure // @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===// -// Declarations that describe the Sparc register file +// Declarations that describe the SparcV9 register file //===----------------------------------------------------------------------===// // Ri - One of the 32 64 bit integer registers From gaeke at cs.uiuc.edu Wed Feb 25 12:45:35 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 12:45:35 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp Makefile Message-ID: <200402251844.MAA32248@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/SparcV9/InstrSelection: InstrSelectionSupport.cpp updated: 1.63 -> 1.64 Makefile updated: 1.4 -> 1.5 --- Log message: Great renaming: Sparc --> SparcV9 --- Diffs of the changes: (+2 -2) Index: llvm/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp diff -u llvm/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp:1.63 llvm/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp:1.64 --- llvm/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp:1.63 Fri Feb 13 15:01:19 2004 +++ llvm/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp Wed Feb 25 12:44:15 2004 @@ -23,7 +23,7 @@ #include "llvm/Constants.h" #include "llvm/BasicBlock.h" #include "llvm/DerivedTypes.h" -#include "../SparcInstrSelectionSupport.h" +#include "../SparcV9InstrSelectionSupport.h" namespace llvm { Index: llvm/lib/Target/SparcV9/InstrSelection/Makefile diff -u llvm/lib/Target/SparcV9/InstrSelection/Makefile:1.4 llvm/lib/Target/SparcV9/InstrSelection/Makefile:1.5 --- llvm/lib/Target/SparcV9/InstrSelection/Makefile:1.4 Fri Jan 9 00:22:34 2004 +++ llvm/lib/Target/SparcV9/InstrSelection/Makefile Wed Feb 25 12:44:15 2004 @@ -9,6 +9,6 @@ LEVEL = ../../../.. DIRS = -LIBRARYNAME = select +LIBRARYNAME = sparcv9select include $(LEVEL)/Makefile.common From gaeke at cs.uiuc.edu Wed Feb 25 12:46:08 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 12:46:08 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV9/RegAlloc/Makefile Message-ID: <200402251844.MAA32264@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/SparcV9/RegAlloc: Makefile updated: 1.4 -> 1.5 --- Log message: Great renaming: Sparc --> SparcV9 --- Diffs of the changes: (+1 -1) Index: llvm/lib/Target/SparcV9/RegAlloc/Makefile diff -u llvm/lib/Target/SparcV9/RegAlloc/Makefile:1.4 llvm/lib/Target/SparcV9/RegAlloc/Makefile:1.5 --- llvm/lib/Target/SparcV9/RegAlloc/Makefile:1.4 Fri Jan 9 00:16:12 2004 +++ llvm/lib/Target/SparcV9/RegAlloc/Makefile Wed Feb 25 12:44:15 2004 @@ -10,7 +10,7 @@ DIRS = -LIBRARYNAME = regalloc +LIBRARYNAME = sparcv9regalloc BUILD_ARCHIVE = 1 From gaeke at cs.uiuc.edu Wed Feb 25 12:46:39 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 12:46:39 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV9/LiveVar/BBLiveVar.cpp Makefile Message-ID: <200402251844.MAA32262@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/SparcV9/LiveVar: BBLiveVar.cpp updated: 1.45 -> 1.46 Makefile updated: 1.4 -> 1.5 --- Log message: Great renaming: Sparc --> SparcV9 --- Diffs of the changes: (+2 -2) Index: llvm/lib/Target/SparcV9/LiveVar/BBLiveVar.cpp diff -u llvm/lib/Target/SparcV9/LiveVar/BBLiveVar.cpp:1.45 llvm/lib/Target/SparcV9/LiveVar/BBLiveVar.cpp:1.46 --- llvm/lib/Target/SparcV9/LiveVar/BBLiveVar.cpp:1.45 Tue Feb 24 13:45:45 2004 +++ llvm/lib/Target/SparcV9/LiveVar/BBLiveVar.cpp Wed Feb 25 12:44:15 2004 @@ -17,7 +17,7 @@ #include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/Support/CFG.h" #include "Support/SetOperations.h" -#include "../SparcInternals.h" +#include "../SparcV9Internals.h" namespace llvm { Index: llvm/lib/Target/SparcV9/LiveVar/Makefile diff -u llvm/lib/Target/SparcV9/LiveVar/Makefile:1.4 llvm/lib/Target/SparcV9/LiveVar/Makefile:1.5 --- llvm/lib/Target/SparcV9/LiveVar/Makefile:1.4 Fri Jan 9 12:15:24 2004 +++ llvm/lib/Target/SparcV9/LiveVar/Makefile Wed Feb 25 12:44:15 2004 @@ -8,7 +8,7 @@ ##===----------------------------------------------------------------------===## LEVEL = ../../../.. -LIBRARYNAME = livevar +LIBRARYNAME = sparcv9livevar include $(LEVEL)/Makefile.common From gaeke at cs.uiuc.edu Wed Feb 25 13:09:07 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 13:09:07 2004 Subject: [llvm-commits] CVS: llvm/tools/llc/Makefile llc.cpp Message-ID: <200402251908.NAA23845@zion.cs.uiuc.edu> Changes in directory llvm/tools/llc: Makefile updated: 1.47 -> 1.48 llc.cpp updated: 1.92 -> 1.93 --- Log message: Great renaming part II: Sparc --> SparcV9 (also includes command-line options and Makefiles) --- Diffs of the changes: (+10 -10) Index: llvm/tools/llc/Makefile diff -u llvm/tools/llc/Makefile:1.47 llvm/tools/llc/Makefile:1.48 --- llvm/tools/llc/Makefile:1.47 Fri Feb 13 17:19:09 2004 +++ llvm/tools/llc/Makefile Wed Feb 25 13:08:11 2004 @@ -9,16 +9,16 @@ LEVEL = ../.. TOOLNAME = llc USEDLIBS = cwriter \ - sparc \ + sparcv9 \ x86 \ powerpc \ selectiondag \ - regalloc \ + sparcv9regalloc \ sched \ - select \ + sparcv9select \ codegen \ target.a \ - livevar \ + sparcv9livevar \ ipa.a \ transforms.a \ scalaropts.a \ Index: llvm/tools/llc/llc.cpp diff -u llvm/tools/llc/llc.cpp:1.92 llvm/tools/llc/llc.cpp:1.93 --- llvm/tools/llc/llc.cpp:1.92 Thu Feb 19 14:32:38 2004 +++ llvm/tools/llc/llc.cpp Wed Feb 25 13:08:11 2004 @@ -37,12 +37,12 @@ static cl::opt Force("f", cl::desc("Overwrite output files")); -enum ArchName { noarch, X86, Sparc, PowerPC, CBackend }; +enum ArchName { noarch, X86, SparcV9, PowerPC, CBackend }; static cl::opt Arch("march", cl::desc("Architecture to generate assembly for:"), cl::Prefix, cl::values(clEnumValN(X86, "x86", " IA-32 (Pentium and above)"), - clEnumValN(Sparc, "sparc", " SPARC V9"), + clEnumValN(SparcV9, "sparcv9", " SPARC V9"), clEnumValN(PowerPC, "powerpc", " PowerPC"), clEnumValN(CBackend, "c", " C backend"), 0), @@ -90,8 +90,8 @@ case X86: TargetMachineAllocator = allocateX86TargetMachine; break; - case Sparc: - TargetMachineAllocator = allocateSparcTargetMachine; + case SparcV9: + TargetMachineAllocator = allocateSparcV9TargetMachine; break; case PowerPC: TargetMachineAllocator = allocatePowerPCTargetMachine; @@ -109,14 +109,14 @@ TargetMachineAllocator = allocatePowerPCTargetMachine; } else if (mod.getEndianness() == Module::BigEndian && mod.getPointerSize() == Module::Pointer64) { - TargetMachineAllocator = allocateSparcTargetMachine; + TargetMachineAllocator = allocateSparcV9TargetMachine; } else { // If the module is target independent, favor a target which matches the // current build system. #if defined(i386) || defined(__i386__) || defined(__x86__) TargetMachineAllocator = allocateX86TargetMachine; #elif defined(sparc) || defined(__sparc__) || defined(__sparcv9) - TargetMachineAllocator = allocateSparcTargetMachine; + TargetMachineAllocator = allocateSparcV9TargetMachine; #elif defined(__POWERPC__) || defined(__ppc__) || defined(__APPLE__) TargetMachineAllocator = allocatePowerPCTargetMachine; #else From gaeke at cs.uiuc.edu Wed Feb 25 13:09:42 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 13:09:42 2004 Subject: [llvm-commits] CVS: llvm/tools/llvm-db/Makefile Message-ID: <200402251908.NAA23858@zion.cs.uiuc.edu> Changes in directory llvm/tools/llvm-db: Makefile updated: 1.1 -> 1.2 --- Log message: Great renaming part II: Sparc --> SparcV9 (also includes command-line options and Makefiles) --- Diffs of the changes: (+4 -4) Index: llvm/tools/llvm-db/Makefile diff -u llvm/tools/llvm-db/Makefile:1.1 llvm/tools/llvm-db/Makefile:1.2 --- llvm/tools/llvm-db/Makefile:1.1 Sun Jan 4 23:27:31 2004 +++ llvm/tools/llvm-db/Makefile Wed Feb 25 13:08:12 2004 @@ -41,10 +41,10 @@ # What the Sparc JIT requires ifdef ENABLE_SPARC_JIT CPPFLAGS += -DENABLE_SPARC_JIT - JITLIBS += sparc - ARCHLIBS += sched livevar instrument.a profpaths \ - bcwriter transforms.a ipo.a ipa.a datastructure.a regalloc \ - select + JITLIBS += sparcv9 + ARCHLIBS += sched sparcv9livevar instrument.a profpaths \ + bcwriter transforms.a ipo.a ipa.a datastructure.a \ + sparcv9regalloc sparcv9select endif USEDLIBS = lli-interpreter $(JITLIBS) $(ARCHLIBS) scalaropts analysis.a \ From gaeke at cs.uiuc.edu Wed Feb 25 13:10:15 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 13:10:15 2004 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/TargetMachineImpls.h Message-ID: <200402251908.NAA23784@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: TargetMachineImpls.h updated: 1.10 -> 1.11 --- Log message: Great renaming part II: Sparc --> SparcV9 (also includes command-line options and Makefiles) --- Diffs of the changes: (+2 -2) Index: llvm/include/llvm/Target/TargetMachineImpls.h diff -u llvm/include/llvm/Target/TargetMachineImpls.h:1.10 llvm/include/llvm/Target/TargetMachineImpls.h:1.11 --- llvm/include/llvm/Target/TargetMachineImpls.h:1.10 Fri Feb 13 17:36:03 2004 +++ llvm/include/llvm/Target/TargetMachineImpls.h Wed Feb 25 13:08:11 2004 @@ -29,12 +29,12 @@ TargetMachine *allocateCTargetMachine(const Module &M, IntrinsicLowering *IL = 0); - // allocateSparcTargetMachine - Allocate and return a subclass of + // allocateSparcV9TargetMachine - Allocate and return a subclass of // TargetMachine that implements the Sparc backend. This takes ownership of // the IntrinsicLowering pointer, deleting it when the target machine is // destroyed. // - TargetMachine *allocateSparcTargetMachine(const Module &M, + TargetMachine *allocateSparcV9TargetMachine(const Module &M, IntrinsicLowering *IL = 0); // allocateX86TargetMachine - Allocate and return a subclass of TargetMachine From gaeke at cs.uiuc.edu Wed Feb 25 13:10:50 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 13:10:50 2004 Subject: [llvm-commits] CVS: llvm/lib/ExecutionEngine/JIT/TargetSelect.cpp Message-ID: <200402251908.NAA23808@zion.cs.uiuc.edu> Changes in directory llvm/lib/ExecutionEngine/JIT: TargetSelect.cpp updated: 1.2 -> 1.3 --- Log message: Great renaming part II: Sparc --> SparcV9 (also includes command-line options and Makefiles) --- Diffs of the changes: (+5 -5) Index: llvm/lib/ExecutionEngine/JIT/TargetSelect.cpp diff -u llvm/lib/ExecutionEngine/JIT/TargetSelect.cpp:1.2 llvm/lib/ExecutionEngine/JIT/TargetSelect.cpp:1.3 --- llvm/lib/ExecutionEngine/JIT/TargetSelect.cpp:1.2 Sun Dec 28 03:44:37 2003 +++ llvm/lib/ExecutionEngine/JIT/TargetSelect.cpp Wed Feb 25 13:08:11 2004 @@ -28,7 +28,7 @@ #endif namespace { - enum ArchName { x86, Sparc }; + enum ArchName { x86, SparcV9 }; #ifndef NO_JITS_ENABLED cl::opt @@ -38,13 +38,13 @@ clEnumVal(x86, " IA-32 (Pentium and above)"), #endif #ifdef ENABLE_SPARC_JIT - clEnumValN(Sparc, "sparc", " Sparc-V9"), + clEnumValN(Sparc, "sparcv9", " Sparc-V9"), #endif 0), #if defined(ENABLE_X86_JIT) cl::init(x86) #elif defined(ENABLE_SPARC_JIT) - cl::init(Sparc) + cl::init(SparcV9) #endif ); #endif /* NO_JITS_ENABLED */ @@ -69,8 +69,8 @@ break; #endif #ifdef ENABLE_SPARC_JIT - case Sparc: - TargetMachineAllocator = allocateSparcTargetMachine; + case SparcV9: + TargetMachineAllocator = allocateSparcV9TargetMachine; break; #endif default: From gaeke at cs.uiuc.edu Wed Feb 25 13:11:25 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 13:11:25 2004 Subject: [llvm-commits] CVS: llvm/tools/lli/Makefile Message-ID: <200402251908.NAA23851@zion.cs.uiuc.edu> Changes in directory llvm/tools/lli: Makefile updated: 1.41 -> 1.42 --- Log message: Great renaming part II: Sparc --> SparcV9 (also includes command-line options and Makefiles) --- Diffs of the changes: (+4 -4) Index: llvm/tools/lli/Makefile diff -u llvm/tools/lli/Makefile:1.41 llvm/tools/lli/Makefile:1.42 --- llvm/tools/lli/Makefile:1.41 Mon Oct 20 17:27:26 2003 +++ llvm/tools/lli/Makefile Wed Feb 25 13:08:11 2004 @@ -40,10 +40,10 @@ # What the Sparc JIT requires ifdef ENABLE_SPARC_JIT CPPFLAGS += -DENABLE_SPARC_JIT - JITLIBS += sparc - ARCHLIBS += sched livevar instrument.a profpaths \ - bcwriter transforms.a ipo.a ipa.a datastructure.a regalloc \ - select + JITLIBS += sparcv9 + ARCHLIBS += sched sparcv9livevar instrument.a profpaths \ + bcwriter transforms.a ipo.a ipa.a datastructure.a \ + sparcv9regalloc sparcv9select endif USEDLIBS = lli-interpreter $(JITLIBS) $(ARCHLIBS) scalaropts analysis.a \ From gaeke at cs.uiuc.edu Wed Feb 25 13:12:00 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 13:12:00 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV9/SparcV9StackSlots.cpp Message-ID: <200402251908.NAA23835@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/SparcV9: SparcV9StackSlots.cpp updated: 1.9 -> 1.10 --- Log message: Great renaming part II: Sparc --> SparcV9 (also includes command-line options and Makefiles) --- Diffs of the changes: (+1 -1) Index: llvm/lib/Target/SparcV9/SparcV9StackSlots.cpp diff -u llvm/lib/Target/SparcV9/SparcV9StackSlots.cpp:1.9 llvm/lib/Target/SparcV9/SparcV9StackSlots.cpp:1.10 --- llvm/lib/Target/SparcV9/SparcV9StackSlots.cpp:1.9 Tue Nov 11 16:41:33 2003 +++ llvm/lib/Target/SparcV9/SparcV9StackSlots.cpp Wed Feb 25 13:08:11 2004 @@ -13,7 +13,7 @@ // //===----------------------------------------------------------------------===// -#include "SparcInternals.h" +#include "SparcV9Internals.h" #include "llvm/Constant.h" #include "llvm/DerivedTypes.h" #include "llvm/Function.h" From gaeke at cs.uiuc.edu Wed Feb 25 13:12:34 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 13:12:34 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/Makefile Message-ID: <200402251908.NAA23819@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target: Makefile updated: 1.11 -> 1.12 --- Log message: Great renaming part II: Sparc --> SparcV9 (also includes command-line options and Makefiles) --- Diffs of the changes: (+1 -1) Index: llvm/lib/Target/Makefile diff -u llvm/lib/Target/Makefile:1.11 llvm/lib/Target/Makefile:1.12 --- llvm/lib/Target/Makefile:1.11 Fri Feb 13 17:29:20 2004 +++ llvm/lib/Target/Makefile Wed Feb 25 13:08:11 2004 @@ -7,7 +7,7 @@ # ##===----------------------------------------------------------------------===## LEVEL = ../.. -DIRS = CBackend X86 Sparc PowerPC +DIRS = CBackend X86 SparcV9 PowerPC LIBRARYNAME = target BUILD_ARCHIVE = 1 From brukman at cs.uiuc.edu Wed Feb 25 13:20:01 2004 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Wed Feb 25 13:20:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/Sparc/RegAlloc/AllocInfo.h IGNode.cpp IGNode.h InterferenceGraph.cpp InterferenceGraph.h LiveRange.h LiveRangeInfo.cpp LiveRangeInfo.h Makefile PhyRegAlloc.cpp PhyRegAlloc.h RegAllocCommon.h RegClass.cpp RegClass.h Message-ID: <200402251919.NAA26649@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/Sparc/RegAlloc: AllocInfo.h (r1.6) removed IGNode.cpp (r1.12) removed IGNode.h (r1.20) removed InterferenceGraph.cpp (r1.19) removed InterferenceGraph.h (r1.7) removed LiveRange.h (r1.25) removed LiveRangeInfo.cpp (r1.51) removed LiveRangeInfo.h (r1.23) removed Makefile (r1.4) removed PhyRegAlloc.cpp (r1.138) removed PhyRegAlloc.h (r1.62) removed RegAllocCommon.h (r1.12) removed RegClass.cpp (r1.28) removed RegClass.h (r1.21) removed --- Log message: Great Sparc renaming part III: Sparc --> SparcV9. --- Diffs of the changes: (+0 -0) From brukman at cs.uiuc.edu Wed Feb 25 13:20:33 2004 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Wed Feb 25 13:20:33 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/Sparc/LiveVar/BBLiveVar.cpp BBLiveVar.h FunctionLiveVarInfo.cpp FunctionLiveVarInfo.h Makefile ValueSet.cpp Message-ID: <200402251919.NAA26644@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/Sparc/LiveVar: BBLiveVar.cpp (r1.45) removed BBLiveVar.h (r1.26) removed FunctionLiveVarInfo.cpp (r1.54) removed FunctionLiveVarInfo.h (r1.1) removed Makefile (r1.4) removed ValueSet.cpp (r1.16) removed --- Log message: Great Sparc renaming part III: Sparc --> SparcV9. --- Diffs of the changes: (+0 -0) From brukman at cs.uiuc.edu Wed Feb 25 13:21:05 2004 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Wed Feb 25 13:21:05 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/Sparc/InstrSelection/InstrForest.cpp InstrSelection.cpp InstrSelectionSupport.cpp Makefile Message-ID: <200402251919.NAA26558@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/Sparc/InstrSelection: InstrForest.cpp (r1.50) removed InstrSelection.cpp (r1.69) removed InstrSelectionSupport.cpp (r1.63) removed Makefile (r1.4) removed --- Log message: Great Sparc renaming part III: Sparc --> SparcV9. --- Diffs of the changes: (+0 -0) From brukman at cs.uiuc.edu Wed Feb 25 13:21:38 2004 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Wed Feb 25 13:21:38 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/Sparc/.cvsignore EmitAssembly.cpp EmitBytecodeToAssembly.cpp Makefile MappingInfo.cpp MappingInfo.h PeepholeOpts.cpp PreSelection.cpp PrologEpilogCodeInserter.cpp Sparc.burg.in SparcFrameInfo.cpp SparcFrameInfo.h SparcInstr.def SparcInstrInfo.cpp SparcInstrInfo.h SparcInstrSelection.cpp SparcInstrSelectionSupport.h SparcInternals.h SparcJITInfo.h SparcRegClassInfo.cpp SparcRegClassInfo.h SparcRegInfo.cpp SparcRegInfo.h SparcTargetMachine.cpp SparcTargetMachine.h SparcV9.td SparcV9CodeEmitter.cpp SparcV9CodeEmitter.h SparcV9_F2.td SparcV9_F3.td SparcV9_F4.td SparcV9_Reg.td StackSlots.cpp UltraSparcSchedInfo.cpp Message-ID: <200402251919.NAA26364@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/Sparc: .cvsignore (r1.2) removed EmitAssembly.cpp (r1.107) removed EmitBytecodeToAssembly.cpp (r1.12) removed Makefile (r1.40) removed MappingInfo.cpp (r1.16) removed MappingInfo.h (r1.6) removed PeepholeOpts.cpp (r1.21) removed PreSelection.cpp (r1.27) removed PrologEpilogCodeInserter.cpp (r1.35) removed Sparc.burg.in (r1.11) removed SparcFrameInfo.cpp (r1.1) removed SparcFrameInfo.h (r1.1) removed SparcInstr.def (r1.23) removed SparcInstrInfo.cpp (r1.59) removed SparcInstrInfo.h (r1.2) removed SparcInstrSelection.cpp (r1.133) removed SparcInstrSelectionSupport.h (r1.13) removed SparcInternals.h (r1.110) removed SparcJITInfo.h (r1.3) removed SparcRegClassInfo.cpp (r1.34) removed SparcRegClassInfo.h (r1.23) removed SparcRegInfo.cpp (r1.119) removed SparcRegInfo.h (r1.9) removed SparcTargetMachine.cpp (r1.99) removed SparcTargetMachine.h (r1.4) removed SparcV9.td (r1.29) removed SparcV9CodeEmitter.cpp (r1.57) removed SparcV9CodeEmitter.h (r1.17) removed SparcV9_F2.td (r1.8) removed SparcV9_F3.td (r1.17) removed SparcV9_F4.td (r1.10) removed SparcV9_Reg.td (r1.7) removed StackSlots.cpp (r1.9) removed UltraSparcSchedInfo.cpp (r1.9) removed --- Log message: Great Sparc renaming part III: Sparc --> SparcV9. --- Diffs of the changes: (+0 -0) From brukman at cs.uiuc.edu Wed Feb 25 13:23:00 2004 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Wed Feb 25 13:23:00 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV8/ Message-ID: <200402251920.NAA27219@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/SparcV8: --- Log message: Directory /home/vadve/shared/PublicCVS/llvm/lib/Target/SparcV8 added to the repository --- Diffs of the changes: (+0 -0) From gaeke at cs.uiuc.edu Wed Feb 25 13:29:02 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 13:29:02 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV8/Makefile README.txt SparcV8.h SparcV8.td SparcV8CodeEmitter.cpp SparcV8InstrInfo.cpp SparcV8InstrInfo.h SparcV8Instrs.td SparcV8JITInfo.h SparcV8Reg.td SparcV8RegisterInfo.cpp SparcV8RegisterInfo.h SparcV8TargetMachine.cpp SparcV8TargetMachine.h Message-ID: <200402251928.NAA30661@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/SparcV8: Makefile added (r1.1) README.txt added (r1.1) SparcV8.h added (r1.1) SparcV8.td added (r1.1) SparcV8CodeEmitter.cpp added (r1.1) SparcV8InstrInfo.cpp added (r1.1) SparcV8InstrInfo.h added (r1.1) SparcV8Instrs.td added (r1.1) SparcV8JITInfo.h added (r1.1) SparcV8Reg.td added (r1.1) SparcV8RegisterInfo.cpp added (r1.1) SparcV8RegisterInfo.h added (r1.1) SparcV8TargetMachine.cpp added (r1.1) SparcV8TargetMachine.h added (r1.1) --- Log message: SparcV8 skeleton --- Diffs of the changes: (+736 -0) Index: llvm/lib/Target/SparcV8/Makefile diff -c /dev/null llvm/lib/Target/SparcV8/Makefile:1.1 *** /dev/null Wed Feb 25 13:28:29 2004 --- llvm/lib/Target/SparcV8/Makefile Wed Feb 25 13:28:19 2004 *************** *** 0 **** --- 1,55 ---- + ##===- lib/Target/SparcV8/Makefile -------------------------*- Makefile -*-===## + # + # 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. + # + ##===----------------------------------------------------------------------===## + LEVEL = ../../.. + LIBRARYNAME = sparcv8 + include $(LEVEL)/Makefile.common + + # Make sure that tblgen is run, first thing. + $(SourceDepend): SparcV8GenRegisterInfo.h.inc SparcV8GenRegisterNames.inc \ + SparcV8GenRegisterInfo.inc SparcV8GenInstrNames.inc \ + SparcV8GenInstrInfo.inc SparcV8GenInstrSelector.inc + + SparcV8GenRegisterNames.inc:: $(SourceDir)/SparcV8.td \ + $(SourceDir)/SparcV8Reg.td \ + $(SourceDir)/../Target.td $(TBLGEN) + @echo "Building SparcV8.td register names with tblgen" + $(VERB) $(TBLGEN) -I $(BUILD_SRC_DIR) $< -gen-register-enums -o $@ + + SparcV8GenRegisterInfo.h.inc:: $(SourceDir)/SparcV8.td \ + $(SourceDir)/SparcV8Reg.td \ + $(SourceDir)/../Target.td $(TBLGEN) + @echo "Building SparcV8.td register information header with tblgen" + $(VERB) $(TBLGEN) -I $(BUILD_SRC_DIR) $< -gen-register-desc-header -o $@ + + SparcV8GenRegisterInfo.inc:: $(SourceDir)/SparcV8.td \ + $(SourceDir)/SparcV8Reg.td \ + $(SourceDir)/../Target.td $(TBLGEN) + @echo "Building SparcV8.td register information implementation with tblgen" + $(VERB) $(TBLGEN) -I $(BUILD_SRC_DIR) $< -gen-register-desc -o $@ + + SparcV8GenInstrNames.inc:: $(SourceDir)/SparcV8.td \ + $(SourceDir)/SparcV8Instrs.td \ + $(SourceDir)/../Target.td $(TBLGEN) + @echo "Building SparcV8.td instruction names with tblgen" + $(VERB) $(TBLGEN) -I $(BUILD_SRC_DIR) $< -gen-instr-enums -o $@ + + SparcV8GenInstrInfo.inc:: $(SourceDir)/SparcV8.td \ + $(SourceDir)/SparcV8Instrs.td \ + $(SourceDir)/../Target.td $(TBLGEN) + @echo "Building SparcV8.td instruction information with tblgen" + $(VERB) $(TBLGEN) -I $(BUILD_SRC_DIR) $< -gen-instr-desc -o $@ + + SparcV8GenInstrSelector.inc:: $(SourceDir)/SparcV8.td \ + $(SourceDir)/SparcV8Instrs.td \ + $(SourceDir)/../Target.td $(TBLGEN) + @echo "Building SparcV8.td instruction selector with tblgen" + $(VERB) $(TBLGEN) -I $(BUILD_SRC_DIR) $< -gen-instr-selector -o $@ + + clean:: + $(VERB) rm -f *.inc Index: llvm/lib/Target/SparcV8/README.txt diff -c /dev/null llvm/lib/Target/SparcV8/README.txt:1.1 *** /dev/null Wed Feb 25 13:28:29 2004 --- llvm/lib/Target/SparcV8/README.txt Wed Feb 25 13:28:19 2004 *************** *** 0 **** --- 1,9 ---- + + SparcV8 backend skeleton + ------------------------ + + This directory will house a 32-bit SPARC V8 backend employing a expander-based + instruction selector. Watch this space for more news coming soon! + + $Date: 2004/02/25 19:28:19 $ + Index: llvm/lib/Target/SparcV8/SparcV8.h diff -c /dev/null llvm/lib/Target/SparcV8/SparcV8.h:1.1 *** /dev/null Wed Feb 25 13:28:29 2004 --- llvm/lib/Target/SparcV8/SparcV8.h Wed Feb 25 13:28:19 2004 *************** *** 0 **** --- 1,42 ---- + //===-- SparcV8.h - Top-level interface for SparcV8 representation -*- C++ -*-// + // + // 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 contains the entry points for global functions defined in the LLVM + // SparcV8 back-end. + // + //===----------------------------------------------------------------------===// + + #ifndef TARGET_SPARCV8_H + #define TARGET_SPARCV8_H + + #include + + namespace llvm { + + class FunctionPass; + class TargetMachine; + + // Here is where you would define factory methods for sparcv8-specific + // passes. For example: + // FunctionPass *createSparcV8SimpleInstructionSelector (TargetMachine &TM); + // FunctionPass *createSparcV8CodePrinterPass(std::ostream &OS, + // TargetMachine &TM); + + } // end namespace llvm; + + // Defines symbolic names for SparcV8 registers. This defines a mapping from + // register name to register number. + // + #include "SparcV8GenRegisterNames.inc" + + // Defines symbolic names for the SparcV8 instructions. + // + #include "SparcV8GenInstrNames.inc" + + #endif Index: llvm/lib/Target/SparcV8/SparcV8.td diff -c /dev/null llvm/lib/Target/SparcV8/SparcV8.td:1.1 *** /dev/null Wed Feb 25 13:28:29 2004 --- llvm/lib/Target/SparcV8/SparcV8.td Wed Feb 25 13:28:19 2004 *************** *** 0 **** --- 1,41 ---- + //===- SparcV8.td - Describe the SparcV8 Target Machine ---------*- C++ -*-===// + // + // 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. + // + //===----------------------------------------------------------------------===// + // + // + //===----------------------------------------------------------------------===// + + // Get the target-independent interfaces which we are implementing... + // + include "../Target.td" + + //===----------------------------------------------------------------------===// + // Register File Description + //===----------------------------------------------------------------------===// + + include "SparcV8Reg.td" + include "SparcV8Instrs.td" + + def SparcV8InstrInfo : InstrInfo { + let PHIInst = PHI; + } + + def SparcV8 : Target { + // Pointers are 32-bits in size. + let PointerType = i32; + + // According to the Mach-O Runtime ABI, these regs are nonvolatile across + // calls: + let CalleeSavedRegisters = [R1, R13, R14, R15, R16, R17, R18, R19, + R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31, F14, F15, + F16, F17, F18, F19, F20, F21, F22, F23, F24, F25, F26, F27, F28, F29, + F30, F31, CR2, CR3, CR4]; + + // Pull in Instruction Info: + let InstructionSet = SparcV8InstrInfo; + } Index: llvm/lib/Target/SparcV8/SparcV8CodeEmitter.cpp diff -c /dev/null llvm/lib/Target/SparcV8/SparcV8CodeEmitter.cpp:1.1 *** /dev/null Wed Feb 25 13:28:29 2004 --- llvm/lib/Target/SparcV8/SparcV8CodeEmitter.cpp Wed Feb 25 13:28:19 2004 *************** *** 0 **** --- 1,43 ---- + //===-- SparcV8CodeEmitter.cpp - JIT Code Emitter for SparcV8 -----*- C++ -*-=// + // + // 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. + // + //===----------------------------------------------------------------------===// + // + // + //===----------------------------------------------------------------------===// + + #include "SparcV8TargetMachine.h" + + namespace llvm { + + /// addPassesToEmitMachineCode - Add passes to the specified pass manager to get + /// machine code emitted. This uses a MachineCodeEmitter object to handle + /// actually outputting the machine code and resolving things like the address + /// of functions. This method should returns true if machine code emission is + /// not supported. + /// + bool SparcV8TargetMachine::addPassesToEmitMachineCode(FunctionPassManager &PM, + MachineCodeEmitter &MCE) { + return true; + // It should go something like this: + // PM.add(new Emitter(MCE)); // Machine code emitter pass for SparcV8 + // Delete machine code for this function after emitting it: + // PM.add(createMachineCodeDeleter()); + } + + void *SparcV8JITInfo::getJITStubForFunction(Function *F, + MachineCodeEmitter &MCE) { + assert (0 && "SparcV8JITInfo::getJITStubForFunction not implemented"); + return 0; + } + + void SparcV8JITInfo::replaceMachineCodeForFunction (void *Old, void *New) { + assert (0 && "SparcV8JITInfo::replaceMachineCodeForFunction not implemented"); + } + + } // end llvm namespace + Index: llvm/lib/Target/SparcV8/SparcV8InstrInfo.cpp diff -c /dev/null llvm/lib/Target/SparcV8/SparcV8InstrInfo.cpp:1.1 *** /dev/null Wed Feb 25 13:28:29 2004 --- llvm/lib/Target/SparcV8/SparcV8InstrInfo.cpp Wed Feb 25 13:28:19 2004 *************** *** 0 **** --- 1,42 ---- + //===- SparcV8InstrInfo.cpp - SparcV8 Instruction Information ---*- C++ -*-===// + // + // 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 contains the SparcV8 implementation of the TargetInstrInfo class. + // + //===----------------------------------------------------------------------===// + + #include "SparcV8InstrInfo.h" + #include "llvm/CodeGen/MachineInstrBuilder.h" + #include "SparcV8GenInstrInfo.inc" + + namespace llvm { + + SparcV8InstrInfo::SparcV8InstrInfo() + : TargetInstrInfo(SparcV8Insts, + sizeof(SparcV8Insts)/sizeof(SparcV8Insts[0]), 0) { + } + + // createNOPinstr - returns the target's implementation of NOP, which is + // usually a pseudo-instruction, implemented by a degenerate version of + // another instruction. + // + MachineInstr* SparcV8InstrInfo::createNOPinstr() const { + return 0; + } + + /// isNOPinstr - not having a special NOP opcode, we need to know if a given + /// instruction is interpreted as an `official' NOP instr, i.e., there may be + /// more than one way to `do nothing' but only one canonical way to slack off. + // + bool SparcV8InstrInfo::isNOPinstr(const MachineInstr &MI) const { + return false; + } + + } // end namespace llvm + Index: llvm/lib/Target/SparcV8/SparcV8InstrInfo.h diff -c /dev/null llvm/lib/Target/SparcV8/SparcV8InstrInfo.h:1.1 *** /dev/null Wed Feb 25 13:28:29 2004 --- llvm/lib/Target/SparcV8/SparcV8InstrInfo.h Wed Feb 25 13:28:19 2004 *************** *** 0 **** --- 1,48 ---- + //===- SparcV8InstrInfo.h - SparcV8 Instruction Information -----*- C++ -*-===// + // + // 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 contains the SparcV8 implementation of the TargetInstrInfo class. + // + //===----------------------------------------------------------------------===// + + #ifndef SPARCV8INSTRUCTIONINFO_H + #define SPARCV8INSTRUCTIONINFO_H + + #include "llvm/Target/TargetInstrInfo.h" + #include "SparcV8RegisterInfo.h" + + namespace llvm { + + class SparcV8InstrInfo : public TargetInstrInfo { + const SparcV8RegisterInfo RI; + public: + SparcV8InstrInfo(); + + /// getRegisterInfo - TargetInstrInfo is a superset of MRegister info. As + /// such, whenever a client has an instance of instruction info, it should + /// always be able to get register info as well (through this method). + /// + virtual const MRegisterInfo &getRegisterInfo() const { return RI; } + + /// createNOPinstr - returns the target's implementation of NOP, which is + /// usually a pseudo-instruction, implemented by a degenerate version of + /// another instruction. + /// + MachineInstr* createNOPinstr() const; + + /// isNOPinstr - not having a special NOP opcode, we need to know if a given + /// instruction is interpreted as an `official' NOP instr, i.e., there may be + /// more than one way to `do nothing' but only one canonical way to slack off. + /// + bool isNOPinstr(const MachineInstr &MI) const; + }; + + } + + #endif Index: llvm/lib/Target/SparcV8/SparcV8Instrs.td diff -c /dev/null llvm/lib/Target/SparcV8/SparcV8Instrs.td:1.1 *** /dev/null Wed Feb 25 13:28:29 2004 --- llvm/lib/Target/SparcV8/SparcV8Instrs.td Wed Feb 25 13:28:19 2004 *************** *** 0 **** --- 1,46 ---- + //===- SparcV8InstrInfo.td - Describe the SparcV8 Instruction Set -*- C++ -*-=// + // + // 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. + // + //===----------------------------------------------------------------------===// + // + // + //===----------------------------------------------------------------------===// + + class Format val> { + bits<4> Value = val; + } + + // All of the SparcV8 instruction formats, plus a pseudo-instruction format: + def Pseudo : Format<0>; + def IForm : Format<1>; + def BForm : Format<2>; + def SCForm : Format<3>; + def DForm : Format<4>; + def XForm : Format<5>; + def XLForm : Format<6>; + def XFXForm : Format<7>; + def XFLForm : Format<8>; + def XOForm : Format<9>; + def AForm : Format<10>; + def MForm : Format<11>; + + class PPCInst opcd, Format f> : Instruction { + let Namespace = "SparcV8"; + + let Name = nm; + bits<6> Opcode = opcd; + Format Form = f; + bits<4> FormBits = Form.Value; + } + + // Pseudo-instructions: + def PHI : PPCInst<"PHI", 0, Pseudo>; // PHI node... + def NOP : PPCInst<"NOP", 0, Pseudo>; // No-op + def ADJCALLSTACKDOWN : PPCInst<"ADJCALLSTACKDOWN", 0, Pseudo>; + def ADJCALLSTACKUP : PPCInst<"ADJCALLSTACKUP", 0, Pseudo>; + + Index: llvm/lib/Target/SparcV8/SparcV8JITInfo.h diff -c /dev/null llvm/lib/Target/SparcV8/SparcV8JITInfo.h:1.1 *** /dev/null Wed Feb 25 13:28:29 2004 --- llvm/lib/Target/SparcV8/SparcV8JITInfo.h Wed Feb 25 13:28:19 2004 *************** *** 0 **** --- 1,49 ---- + //===- SparcV8JITInfo.h - SparcV8 impl. of the JIT interface ----*- C++ -*-===// + // + // 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 contains the SparcV8 implementation of the TargetJITInfo class. + // + //===----------------------------------------------------------------------===// + + #ifndef SPARCV8JITINFO_H + #define SPARCV8JITINFO_H + + #include "llvm/Target/TargetJITInfo.h" + + namespace llvm { + class TargetMachine; + class IntrinsicLowering; + + class SparcV8JITInfo : public TargetJITInfo { + TargetMachine &TM; + public: + SparcV8JITInfo(TargetMachine &tm) : TM(tm) {} + + /// addPassesToJITCompile - Add passes to the specified pass manager to + /// implement a fast dynamic compiler for this target. Return true if this + /// is not supported for this target. + /// + virtual void addPassesToJITCompile(FunctionPassManager &PM); + + /// replaceMachineCodeForFunction - Make it so that calling the function + /// whose machine code is at OLD turns into a call to NEW, perhaps by + /// overwriting OLD with a branch to NEW. This is used for self-modifying + /// code. + /// + virtual void replaceMachineCodeForFunction(void *Old, void *New); + + /// getJITStubForFunction - Create or return a stub for the specified + /// function. This stub acts just like the specified function, except that + /// it allows the "address" of the function to be taken without having to + /// generate code for it. + virtual void *getJITStubForFunction(Function *F, MachineCodeEmitter &MCE); + }; + } + + #endif Index: llvm/lib/Target/SparcV8/SparcV8Reg.td diff -c /dev/null llvm/lib/Target/SparcV8/SparcV8Reg.td:1.1 *** /dev/null Wed Feb 25 13:28:29 2004 --- llvm/lib/Target/SparcV8/SparcV8Reg.td Wed Feb 25 13:28:19 2004 *************** *** 0 **** --- 1,82 ---- + //===- SparcV8Reg.td - Describe the SparcV8 Register File -------*- C++ -*-===// + // + // 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. + // + //===----------------------------------------------------------------------===// + // + // + //===----------------------------------------------------------------------===// + + class PPCReg : Register { + let Namespace = "SparcV8"; + } + + // We identify all our registers with a 5-bit ID, for consistency's sake. + + // GPR - One of the 32 32-bit general-purpose registers + class GPR num> : PPCReg { + field bits<5> Num = num; + } + + // SPR - One of the 32-bit special-purpose registers + class SPR num> : PPCReg { + field bits<5> Num = num; + } + + // FPR - One of the 32 64-bit floating-point registers + class FPR num> : PPCReg { + field bits<5> Num = num; + } + + // CR - One of the 8 4-bit condition registers + class CR num> : PPCReg { + field bits<5> Num = num; + } + + // General-purpose registers + def R0 : GPR< 0>; def R1 : GPR< 1>; def R2 : GPR< 2>; def R3 : GPR< 3>; + def R4 : GPR< 4>; def R5 : GPR< 5>; def R6 : GPR< 6>; def R7 : GPR< 7>; + def R8 : GPR< 8>; def R9 : GPR< 9>; def R10 : GPR<10>; def R11 : GPR<11>; + def R12 : GPR<12>; def R13 : GPR<13>; def R14 : GPR<14>; def R15 : GPR<15>; + def R16 : GPR<16>; def R17 : GPR<17>; def R18 : GPR<18>; def R19 : GPR<19>; + def R20 : GPR<20>; def R21 : GPR<21>; def R22 : GPR<22>; def R23 : GPR<23>; + def R24 : GPR<24>; def R25 : GPR<25>; def R26 : GPR<26>; def R27 : GPR<27>; + def R28 : GPR<28>; def R29 : GPR<29>; def R30 : GPR<30>; def R31 : GPR<31>; + + // Floating-point registers + def F0 : FPR< 0>; def F1 : FPR< 1>; def F2 : FPR< 2>; def F3 : FPR< 3>; + def F4 : FPR< 4>; def F5 : FPR< 5>; def F6 : FPR< 6>; def F7 : FPR< 7>; + def F8 : FPR< 8>; def F9 : FPR< 9>; def F10 : FPR<10>; def F11 : FPR<11>; + def F12 : FPR<12>; def F13 : FPR<13>; def F14 : FPR<14>; def F15 : FPR<15>; + def F16 : FPR<16>; def F17 : FPR<17>; def F18 : FPR<18>; def F19 : FPR<19>; + def F20 : FPR<20>; def F21 : FPR<21>; def F22 : FPR<22>; def F23 : FPR<23>; + def F24 : FPR<24>; def F25 : FPR<25>; def F26 : FPR<26>; def F27 : FPR<27>; + def F28 : FPR<28>; def F29 : FPR<29>; def F30 : FPR<30>; def F31 : FPR<31>; + + // Condition registers + def CR0 : CR<0>; def CR1 : CR<1>; def CR2 : CR<2>; def CR3 : CR<3>; + def CR4 : CR<4>; def CR5 : CR<5>; def CR6 : CR<6>; def CR7 : CR<7>; + + // Floating-point status and control register + def FPSCR : SPR<0>; + // fiXed-point Exception Register? :-) + def XER : SPR<1>; + // Link register + def LR : SPR<2>; + // Count register + def CTR : SPR<3>; + // These are the "time base" registers which are read-only in user mode. + def TBL : SPR<4>; + def TBU : SPR<5>; + + /// Register classes: one for floats and another for non-floats. + def GPRC : RegisterClass; + def FPRC : RegisterClass; + Index: llvm/lib/Target/SparcV8/SparcV8RegisterInfo.cpp diff -c /dev/null llvm/lib/Target/SparcV8/SparcV8RegisterInfo.cpp:1.1 *** /dev/null Wed Feb 25 13:28:29 2004 --- llvm/lib/Target/SparcV8/SparcV8RegisterInfo.cpp Wed Feb 25 13:28:19 2004 *************** *** 0 **** --- 1,99 ---- + //===- SparcV8RegisterInfo.cpp - SparcV8 Register Information ---*- C++ -*-===// + // + // 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 contains the SparcV8 implementation of the MRegisterInfo class. + // + //===----------------------------------------------------------------------===// + + #include "SparcV8.h" + #include "SparcV8RegisterInfo.h" + #include "llvm/Type.h" + using namespace llvm; + + SparcV8RegisterInfo::SparcV8RegisterInfo() + : SparcV8GenRegisterInfo(SparcV8::ADJCALLSTACKDOWN, + SparcV8::ADJCALLSTACKUP) {} + + int SparcV8RegisterInfo::storeRegToStackSlot( + MachineBasicBlock &MBB, + MachineBasicBlock::iterator MBBI, + unsigned SrcReg, int FrameIdx, + const TargetRegisterClass *RC) const + { + abort(); + return -1; + } + + int SparcV8RegisterInfo::loadRegFromStackSlot( + MachineBasicBlock &MBB, + MachineBasicBlock::iterator MBBI, + unsigned DestReg, int FrameIdx, + const TargetRegisterClass *RC) const + { + abort(); + return -1; + } + + int SparcV8RegisterInfo::copyRegToReg(MachineBasicBlock &MBB, + MachineBasicBlock::iterator MBBI, + unsigned DestReg, unsigned SrcReg, + const TargetRegisterClass *RC) const { + abort(); + return -1; + } + + void SparcV8RegisterInfo:: + eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB, + MachineBasicBlock::iterator I) const { + abort(); + } + + void + SparcV8RegisterInfo::eliminateFrameIndex(MachineFunction &MF, + MachineBasicBlock::iterator II) const { + abort(); + } + + void SparcV8RegisterInfo::processFunctionBeforeFrameFinalized( + MachineFunction &MF) const { + abort(); + } + + void SparcV8RegisterInfo::emitPrologue(MachineFunction &MF) const { + abort(); + } + + void SparcV8RegisterInfo::emitEpilogue(MachineFunction &MF, + MachineBasicBlock &MBB) const { + abort(); + } + + + #include "SparcV8GenRegisterInfo.inc" + + const TargetRegisterClass* + SparcV8RegisterInfo::getRegClassForType(const Type* Ty) const { + switch (Ty->getPrimitiveID()) { + case Type::LongTyID: + case Type::ULongTyID: assert(0 && "Long values can't fit in registers!"); + default: assert(0 && "Invalid type to getClass!"); + case Type::BoolTyID: + case Type::SByteTyID: + case Type::UByteTyID: + case Type::ShortTyID: + case Type::UShortTyID: + case Type::IntTyID: + case Type::UIntTyID: + case Type::PointerTyID: return &GPRCInstance; + + case Type::FloatTyID: + case Type::DoubleTyID: return &FPRCInstance; + } + } + Index: llvm/lib/Target/SparcV8/SparcV8RegisterInfo.h diff -c /dev/null llvm/lib/Target/SparcV8/SparcV8RegisterInfo.h:1.1 *** /dev/null Wed Feb 25 13:28:29 2004 --- llvm/lib/Target/SparcV8/SparcV8RegisterInfo.h Wed Feb 25 13:28:19 2004 *************** *** 0 **** --- 1,58 ---- + //===- SparcV8RegisterInfo.h - SparcV8 Register Information Impl -*- C++ -*-==// + // + // 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 contains the SparcV8 implementation of the MRegisterInfo class. + // + //===----------------------------------------------------------------------===// + + #ifndef SPARCV8REGISTERINFO_H + #define SPARCV8REGISTERINFO_H + + #include "llvm/Target/MRegisterInfo.h" + #include "SparcV8GenRegisterInfo.h.inc" + + namespace llvm { + + class Type; + + struct SparcV8RegisterInfo : public SparcV8GenRegisterInfo { + SparcV8RegisterInfo(); + const TargetRegisterClass* getRegClassForType(const Type* Ty) const; + + /// Code Generation virtual methods... + int storeRegToStackSlot(MachineBasicBlock &MBB, + MachineBasicBlock::iterator MBBI, + unsigned SrcReg, int FrameIndex, + const TargetRegisterClass *RC) const; + + int loadRegFromStackSlot(MachineBasicBlock &MBB, + MachineBasicBlock::iterator MBBI, + unsigned DestReg, int FrameIndex, + const TargetRegisterClass *RC) const; + + int copyRegToReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, + unsigned DestReg, unsigned SrcReg, + const TargetRegisterClass *RC) const; + + void eliminateCallFramePseudoInstr(MachineFunction &MF, + MachineBasicBlock &MBB, + MachineBasicBlock::iterator I) const; + + void eliminateFrameIndex(MachineFunction &MF, + MachineBasicBlock::iterator II) const; + + void processFunctionBeforeFrameFinalized(MachineFunction &MF) const; + + void emitPrologue(MachineFunction &MF) const; + void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const; + }; + + } // end namespace llvm + + #endif Index: llvm/lib/Target/SparcV8/SparcV8TargetMachine.cpp diff -c /dev/null llvm/lib/Target/SparcV8/SparcV8TargetMachine.cpp:1.1 *** /dev/null Wed Feb 25 13:28:29 2004 --- llvm/lib/Target/SparcV8/SparcV8TargetMachine.cpp Wed Feb 25 13:28:19 2004 *************** *** 0 **** --- 1,61 ---- + //===-- SparcV8TargetMachine.cpp - Define TargetMachine for SparcV8 -------===// + // + // 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. + // + //===----------------------------------------------------------------------===// + // + // + //===----------------------------------------------------------------------===// + + #include "SparcV8TargetMachine.h" + #include "SparcV8.h" + #include "llvm/Module.h" + #include "llvm/PassManager.h" + #include "llvm/Target/TargetMachineImpls.h" + #include "llvm/CodeGen/MachineFunction.h" + #include "llvm/CodeGen/Passes.h" + + namespace llvm { + + // allocateSparcV8TargetMachine - Allocate and return a subclass of + // TargetMachine that implements the SparcV8 backend. + // + TargetMachine *allocateSparcV8TargetMachine(const Module &M, + IntrinsicLowering *IL) { + return new SparcV8TargetMachine(M, IL); + } + + /// SparcV8TargetMachine ctor - Create an ILP32 architecture model + /// + SparcV8TargetMachine::SparcV8TargetMachine(const Module &M, + IntrinsicLowering *IL) + : TargetMachine("SparcV8", IL, true, 4, 4, 4, 4, 4), + FrameInfo(TargetFrameInfo::StackGrowsDown, 8, 4), JITInfo(*this) { + } + + /// addPassesToEmitAssembly - Add passes to the specified pass manager + /// to implement a static compiler for this target. + /// + bool SparcV8TargetMachine::addPassesToEmitAssembly(PassManager &PM, + std::ostream &Out) { + // + PM.add(createRegisterAllocator()); + PM.add(createPrologEpilogCodeInserter()); + // + PM.add(createMachineCodeDeleter()); + return true; // change to `return false' when this actually works. + } + + /// addPassesToJITCompile - Add passes to the specified pass manager to + /// implement a fast dynamic compiler for this target. + /// + void SparcV8JITInfo::addPassesToJITCompile(FunctionPassManager &PM) { + // + PM.add(createRegisterAllocator()); + PM.add(createPrologEpilogCodeInserter()); + } + + } // end namespace llvm Index: llvm/lib/Target/SparcV8/SparcV8TargetMachine.h diff -c /dev/null llvm/lib/Target/SparcV8/SparcV8TargetMachine.h:1.1 *** /dev/null Wed Feb 25 13:28:29 2004 --- llvm/lib/Target/SparcV8/SparcV8TargetMachine.h Wed Feb 25 13:28:19 2004 *************** *** 0 **** --- 1,61 ---- + //===-- SparcV8TargetMachine.h - Define TargetMachine for SparcV8 -*- C++ -*-=// + // + // 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 declares the SparcV8 specific subclass of TargetMachine. + // + //===----------------------------------------------------------------------===// + + #ifndef SPARCV8TARGETMACHINE_H + #define SPARCV8TARGETMACHINE_H + + #include "llvm/Target/TargetMachine.h" + #include "llvm/Target/TargetFrameInfo.h" + #include "llvm/PassManager.h" + #include "SparcV8InstrInfo.h" + #include "SparcV8JITInfo.h" + + namespace llvm { + + class IntrinsicLowering; + + class SparcV8TargetMachine : public TargetMachine { + SparcV8InstrInfo InstrInfo; + TargetFrameInfo FrameInfo; + SparcV8JITInfo JITInfo; + public: + SparcV8TargetMachine(const Module &M, IntrinsicLowering *IL); + + virtual const SparcV8InstrInfo &getInstrInfo() const { return InstrInfo; } + virtual const TargetFrameInfo &getFrameInfo() const { return FrameInfo; } + virtual const MRegisterInfo *getRegisterInfo() const { + return &InstrInfo.getRegisterInfo(); + } + virtual TargetJITInfo *getJITInfo() { + return &JITInfo; + } + + virtual const TargetSchedInfo &getSchedInfo() const { abort(); } + virtual const TargetRegInfo &getRegInfo() const { abort(); } + virtual const TargetCacheInfo &getCacheInfo() const { abort(); } + + /// addPassesToEmitMachineCode - Add passes to the specified pass manager to + /// get machine code emitted. This uses a MachineCodeEmitter object to handle + /// actually outputting the machine code and resolving things like the address + /// of functions. This method should returns true if machine code emission is + /// not supported. + /// + virtual bool addPassesToEmitMachineCode(FunctionPassManager &PM, + MachineCodeEmitter &MCE); + + virtual bool addPassesToEmitAssembly(PassManager &PM, std::ostream &Out); + }; + + } // end namespace llvm + + #endif From lattner at cs.uiuc.edu Wed Feb 25 13:31:02 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 13:31:02 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86TargetMachine.cpp Message-ID: <200402251930.NAA30720@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86TargetMachine.cpp updated: 1.48 -> 1.49 --- Log message: Fix failures in 099.go due to the cfgsimplify pass creating switch instructions where there did not used to be any before --- Diffs of the changes: (+6 -5) Index: llvm/lib/Target/X86/X86TargetMachine.cpp diff -u llvm/lib/Target/X86/X86TargetMachine.cpp:1.48 llvm/lib/Target/X86/X86TargetMachine.cpp:1.49 --- llvm/lib/Target/X86/X86TargetMachine.cpp:1.48 Sat Feb 14 18:03:15 2004 +++ llvm/lib/Target/X86/X86TargetMachine.cpp Wed Feb 25 13:30:19 2004 @@ -59,9 +59,6 @@ // does to emit statically compiled machine code. bool X86TargetMachine::addPassesToEmitAssembly(PassManager &PM, std::ostream &Out) { - // FIXME: Implement the switch instruction in the instruction selector! - PM.add(createLowerSwitchPass()); - // FIXME: Implement the invoke/unwind instructions! PM.add(createLowerInvokePass()); @@ -69,6 +66,9 @@ // unreachable basic blocks. PM.add(createCFGSimplificationPass()); + // FIXME: Implement the switch instruction in the instruction selector! + PM.add(createLowerSwitchPass()); + if (NoPatternISel) PM.add(createX86SimpleInstructionSelector(*this)); else @@ -115,8 +115,6 @@ /// not supported for this target. /// void X86JITInfo::addPassesToJITCompile(FunctionPassManager &PM) { - // FIXME: Implement the switch instruction in the instruction selector! - PM.add(createLowerSwitchPass()); // FIXME: Implement the invoke/unwind instructions! PM.add(createLowerInvokePass()); @@ -124,6 +122,9 @@ // FIXME: The code generator does not properly handle functions with // unreachable basic blocks. PM.add(createCFGSimplificationPass()); + + // FIXME: Implement the switch instruction in the instruction selector! + PM.add(createLowerSwitchPass()); if (NoPatternISel) PM.add(createX86SimpleInstructionSelector(TM)); From lattner at cs.uiuc.edu Wed Feb 25 13:38:00 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 13:38:00 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/RegAllocLinearScan.cpp Message-ID: <200402251937.NAA12594@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: RegAllocLinearScan.cpp updated: 1.64 -> 1.65 --- Log message: Add an assertion --- Diffs of the changes: (+1 -0) Index: llvm/lib/CodeGen/RegAllocLinearScan.cpp diff -u llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.64 llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.65 --- llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.64 Tue Feb 24 02:58:30 2004 +++ llvm/lib/CodeGen/RegAllocLinearScan.cpp Wed Feb 25 13:37:44 2004 @@ -378,6 +378,7 @@ } DEBUG(std::cerr << "\t\tregister with min weight: " << mri_->getName(minReg) << " (" << minWeight << ")\n"); + assert(minReg != 0 && "Didn't find a register to spill?"); // if the current has the minimum weight, we need to modify it, // push it back in unhandled and let the linear scan algorithm run From gaeke at gally.cs.uiuc.edu Wed Feb 25 14:35:01 2004 From: gaeke at gally.cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 14:35:01 2004 Subject: [llvm-commits] CVS: llvm/test/Regression/Assembler/2002-05-02-ParseError.ll Message-ID: <200402252034.i1PKYCW18306@gally.cs.uiuc.edu> Changes in directory llvm/test/Regression/Assembler: 2002-05-02-ParseError.ll updated: 1.3 -> 1.4 --- Log message: Note that this test is currently expected to fail. --- Diffs of the changes: (+1 -0) Index: llvm/test/Regression/Assembler/2002-05-02-ParseError.ll diff -u llvm/test/Regression/Assembler/2002-05-02-ParseError.ll:1.3 llvm/test/Regression/Assembler/2002-05-02-ParseError.ll:1.4 --- llvm/test/Regression/Assembler/2002-05-02-ParseError.ll:1.3 Thu Mar 6 13:59:08 2003 +++ llvm/test/Regression/Assembler/2002-05-02-ParseError.ll Wed Feb 25 14:34:02 2004 @@ -1,5 +1,6 @@ ; This should parse correctly without an 'implementation', but our current YACC ; based parser doesn't have the required 2 token lookahead... +; XFAIL %T = type int * From brukman at cs.uiuc.edu Wed Feb 25 14:53:02 2004 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Wed Feb 25 14:53:02 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV8/SparcV8Instrs_F2.td SparcV8Instrs_F3.td Message-ID: <200402252052.OAA32696@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/SparcV8: SparcV8Instrs_F2.td added (r1.1) SparcV8Instrs_F3.td added (r1.1) --- Log message: SparcV8 has different types of instructions, but F1 is only used for CALL. --- Diffs of the changes: (+105 -0) Index: llvm/lib/Target/SparcV8/SparcV8Instrs_F2.td diff -c /dev/null llvm/lib/Target/SparcV8/SparcV8Instrs_F2.td:1.1 *** /dev/null Wed Feb 25 14:52:30 2004 --- llvm/lib/Target/SparcV8/SparcV8Instrs_F2.td Wed Feb 25 14:52:20 2004 *************** *** 0 **** --- 1,44 ---- + //===- SparcV8Instrs_F2.td - Format 2 instructions: SparcV8 Target --------===// + // + // 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. + // + //===----------------------------------------------------------------------===// + // + // Format #2 instruction classes in the SparcV8 + // + //===----------------------------------------------------------------------===// + + class F2 : InstV8 { // Format 2 instructions + bits<3> op2; + bits<22> imm22; + let op = 0; // op = 0 + let Inst{24-22} = op2; + let Inst{21-0} = imm22; + } + + // Specific F2 classes: SparcV8 manual, page 44 + // + class F2_1 op2Val, string name> : F2 { + bits<5> rd; + bits<22> imm; + + let op2 = op2Val; + let Name = name; + + let Inst{29-25} = rd; + } + + class F2_2 cond, bits<3> op2Val, string name> : F2 { + bits<4> cond; + bit annul = 0; // currently unused + + let cond = condVal; + let op2 = op2Val; + let Name = name; + + let Inst{29} = annul; + let Inst{28-25} = cond; + } Index: llvm/lib/Target/SparcV8/SparcV8Instrs_F3.td diff -c /dev/null llvm/lib/Target/SparcV8/SparcV8Instrs_F3.td:1.1 *** /dev/null Wed Feb 25 14:52:30 2004 --- llvm/lib/Target/SparcV8/SparcV8Instrs_F3.td Wed Feb 25 14:52:20 2004 *************** *** 0 **** --- 1,61 ---- + //===- SparcV8Instrs_F3.td - Format 3 Instructions: SparcV8 Target --------===// + // + // 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. + // + //===----------------------------------------------------------------------===// + // + // Format #3 instruction classes in the SparcV8 + // + //===----------------------------------------------------------------------===// + + class F3 : InstV8 { + bits<5> rd; + bits<6> op3; + bits<5> rs1; + let op{1} = 1; // Op = 2 or 3 + let Inst{29-25} = rd; + let Inst{24-19} = op3; + let Inst{18-14} = rs1; + } + + // Specific F3 classes: SparcV8 manual, page 44 + // + class F3_1 opVal, bits<6> op3val, string name> : F3 { + bits<8> asi; + bits<5> rs2; + + let op = opVal; + let op3 = op3val; + let Name = name; + + let Inst{13} = 0; // i field = 0 + let Inst{12-5} = asi; // address space identifier + let Inst{4-0} = rs2; + } + + class F3_2 opVal, bits<6> op3val, string name> : F3 { + bits<13> simm13; + + let op = opVal; + let op3 = op3val; + let Name = name; + + let Inst{13} = 1; // i field = 1 + let Inst{12-0} = simm13; + } + + class F3_3 opVal, bits<6> op3val, bits<9> opfVal, string name> + : F3_rs1rs2 { + bits<5> rs2; + + let op = opVal; + let op3 = op3val; + let Name = name; + + let Inst{13-5} = opfVal; + let Inst{4-0} = rs2; + } + From brukman at cs.uiuc.edu Wed Feb 25 15:01:01 2004 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Wed Feb 25 15:01:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV8/SparcV8Reg.td Message-ID: <200402252100.PAA09664@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/SparcV8: SparcV8Reg.td updated: 1.1 -> 1.2 --- Log message: Fix the SparcV8 register definitions that were imported from PPC template. --- Diffs of the changes: (+24 -64) Index: llvm/lib/Target/SparcV8/SparcV8Reg.td diff -u llvm/lib/Target/SparcV8/SparcV8Reg.td:1.1 llvm/lib/Target/SparcV8/SparcV8Reg.td:1.2 --- llvm/lib/Target/SparcV8/SparcV8Reg.td:1.1 Wed Feb 25 13:28:19 2004 +++ llvm/lib/Target/SparcV8/SparcV8Reg.td Wed Feb 25 15:00:05 2004 @@ -7,76 +7,36 @@ // //===----------------------------------------------------------------------===// // +// Declarations that describe the SparcV8 register file // //===----------------------------------------------------------------------===// -class PPCReg : Register { - let Namespace = "SparcV8"; +// Ri - 32-bit integer registers +class Ri num> : Register { + field bits<5> Num = num; // Numbers are identified with a 5 bit ID } -// We identify all our registers with a 5-bit ID, for consistency's sake. +let Namespace = "SparcV8" in { + def G0 : Ri< 0>; def G1 : Ri< 1>; def G2 : Ri< 2>; def G3 : Ri< 3>; + def G4 : Ri< 4>; def G5 : Ri< 5>; def G6 : Ri< 6>; def G7 : Ri< 7>; + def O0 : Ri< 8>; def O1 : Ri< 9>; def O2 : Ri<10>; def O3 : Ri<11>; + def O4 : Ri<12>; def O5 : Ri<13>; def O6 : Ri<14>; def O7 : Ri<15>; + def L0 : Ri<16>; def L1 : Ri<17>; def L2 : Ri<18>; def L3 : Ri<19>; + def L4 : Ri<20>; def L5 : Ri<21>; def L6 : Ri<22>; def L7 : Ri<23>; + def I0 : Ri<24>; def I1 : Ri<25>; def I2 : Ri<26>; def I3 : Ri<27>; + def I4 : Ri<28>; def I5 : Ri<29>; def I6 : Ri<30>; def I7 : Ri<31>; -// GPR - One of the 32 32-bit general-purpose registers -class GPR num> : PPCReg { - field bits<5> Num = num; + // Floating-point registers? + // ... } -// SPR - One of the 32-bit special-purpose registers -class SPR num> : PPCReg { - field bits<5> Num = num; -} - -// FPR - One of the 32 64-bit floating-point registers -class FPR num> : PPCReg { - field bits<5> Num = num; -} - -// CR - One of the 8 4-bit condition registers -class CR num> : PPCReg { - field bits<5> Num = num; -} - -// General-purpose registers -def R0 : GPR< 0>; def R1 : GPR< 1>; def R2 : GPR< 2>; def R3 : GPR< 3>; -def R4 : GPR< 4>; def R5 : GPR< 5>; def R6 : GPR< 6>; def R7 : GPR< 7>; -def R8 : GPR< 8>; def R9 : GPR< 9>; def R10 : GPR<10>; def R11 : GPR<11>; -def R12 : GPR<12>; def R13 : GPR<13>; def R14 : GPR<14>; def R15 : GPR<15>; -def R16 : GPR<16>; def R17 : GPR<17>; def R18 : GPR<18>; def R19 : GPR<19>; -def R20 : GPR<20>; def R21 : GPR<21>; def R22 : GPR<22>; def R23 : GPR<23>; -def R24 : GPR<24>; def R25 : GPR<25>; def R26 : GPR<26>; def R27 : GPR<27>; -def R28 : GPR<28>; def R29 : GPR<29>; def R30 : GPR<30>; def R31 : GPR<31>; - -// Floating-point registers -def F0 : FPR< 0>; def F1 : FPR< 1>; def F2 : FPR< 2>; def F3 : FPR< 3>; -def F4 : FPR< 4>; def F5 : FPR< 5>; def F6 : FPR< 6>; def F7 : FPR< 7>; -def F8 : FPR< 8>; def F9 : FPR< 9>; def F10 : FPR<10>; def F11 : FPR<11>; -def F12 : FPR<12>; def F13 : FPR<13>; def F14 : FPR<14>; def F15 : FPR<15>; -def F16 : FPR<16>; def F17 : FPR<17>; def F18 : FPR<18>; def F19 : FPR<19>; -def F20 : FPR<20>; def F21 : FPR<21>; def F22 : FPR<22>; def F23 : FPR<23>; -def F24 : FPR<24>; def F25 : FPR<25>; def F26 : FPR<26>; def F27 : FPR<27>; -def F28 : FPR<28>; def F29 : FPR<29>; def F30 : FPR<30>; def F31 : FPR<31>; - -// Condition registers -def CR0 : CR<0>; def CR1 : CR<1>; def CR2 : CR<2>; def CR3 : CR<3>; -def CR4 : CR<4>; def CR5 : CR<5>; def CR6 : CR<6>; def CR7 : CR<7>; - -// Floating-point status and control register -def FPSCR : SPR<0>; -// fiXed-point Exception Register? :-) -def XER : SPR<1>; -// Link register -def LR : SPR<2>; -// Count register -def CTR : SPR<3>; -// These are the "time base" registers which are read-only in user mode. -def TBL : SPR<4>; -def TBU : SPR<5>; - -/// Register classes: one for floats and another for non-floats. -def GPRC : RegisterClass; -def FPRC : RegisterClass; +// For fun, specify a register class. +// +// FIXME: the register order should be defined in terms of the preferred +// allocation order... +// +def IntRegs : RegisterClass; From brukman at cs.uiuc.edu Wed Feb 25 15:03:02 2004 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Wed Feb 25 15:03:02 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV8/SparcV8Instrs.td SparcV8.td Message-ID: <200402252102.PAA15892@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/SparcV8: SparcV8Instrs.td updated: 1.1 -> 1.2 SparcV8.td updated: 1.1 -> 1.2 --- Log message: Clean up the tablegen descriptions for SparcV8. --- Diffs of the changes: (+22 -35) Index: llvm/lib/Target/SparcV8/SparcV8Instrs.td diff -u llvm/lib/Target/SparcV8/SparcV8Instrs.td:1.1 llvm/lib/Target/SparcV8/SparcV8Instrs.td:1.2 --- llvm/lib/Target/SparcV8/SparcV8Instrs.td:1.1 Wed Feb 25 13:28:19 2004 +++ llvm/lib/Target/SparcV8/SparcV8Instrs.td Wed Feb 25 15:02:21 2004 @@ -1,4 +1,4 @@ -//===- SparcV8InstrInfo.td - Describe the SparcV8 Instruction Set -*- C++ -*-=// +//===- SparcV8Instrs.td - Target Description for SparcV8 Target -----------===// // // The LLVM Compiler Infrastructure // @@ -7,40 +7,30 @@ // //===----------------------------------------------------------------------===// // +// This file describes the SparcV8 instructions in TableGen format. // //===----------------------------------------------------------------------===// -class Format val> { - bits<4> Value = val; -} +include "../Target.td" +include "SparcV8Reg.td" -// All of the SparcV8 instruction formats, plus a pseudo-instruction format: -def Pseudo : Format<0>; -def IForm : Format<1>; -def BForm : Format<2>; -def SCForm : Format<3>; -def DForm : Format<4>; -def XForm : Format<5>; -def XLForm : Format<6>; -def XFXForm : Format<7>; -def XFLForm : Format<8>; -def XOForm : Format<9>; -def AForm : Format<10>; -def MForm : Format<11>; - -class PPCInst opcd, Format f> : Instruction { - let Namespace = "SparcV8"; - - let Name = nm; - bits<6> Opcode = opcd; - Format Form = f; - bits<4> FormBits = Form.Value; -} +//===----------------------------------------------------------------------===// +// Instructions +//===----------------------------------------------------------------------===// -// Pseudo-instructions: -def PHI : PPCInst<"PHI", 0, Pseudo>; // PHI node... -def NOP : PPCInst<"NOP", 0, Pseudo>; // No-op -def ADJCALLSTACKDOWN : PPCInst<"ADJCALLSTACKDOWN", 0, Pseudo>; -def ADJCALLSTACKUP : PPCInst<"ADJCALLSTACKUP", 0, Pseudo>; +class InstV8 : Instruction { // SparcV8 instruction baseline + field bits<32> Inst; + + let Namespace = "V8"; + + bits<2> op; + let Inst{31-30} = op; // Top two bits are the 'op' field + + // Bit attributes specific to SparcV8 instructions + bit isPasi = 0; // Does this instruction affect an alternate addr space? + bit isPrivileged = 0; // Is this a privileged instruction? +} +include "SparcV8Instrs_F2.td" +include "SparcV8Instrs_F3.td" Index: llvm/lib/Target/SparcV8/SparcV8.td diff -u llvm/lib/Target/SparcV8/SparcV8.td:1.1 llvm/lib/Target/SparcV8/SparcV8.td:1.2 --- llvm/lib/Target/SparcV8/SparcV8.td:1.1 Wed Feb 25 13:28:19 2004 +++ llvm/lib/Target/SparcV8/SparcV8.td Wed Feb 25 15:02:21 2004 @@ -31,10 +31,7 @@ // According to the Mach-O Runtime ABI, these regs are nonvolatile across // calls: - let CalleeSavedRegisters = [R1, R13, R14, R15, R16, R17, R18, R19, - R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31, F14, F15, - F16, F17, F18, F19, F20, F21, F22, F23, F24, F25, F26, F27, F28, F29, - F30, F31, CR2, CR3, CR4]; + let CalleeSavedRegisters = []; // Pull in Instruction Info: let InstructionSet = SparcV8InstrInfo; From brukman at cs.uiuc.edu Wed Feb 25 15:04:01 2004 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Wed Feb 25 15:04:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/SparcV8/SparcV8Reg.td Message-ID: <200402252103.PAA18598@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/SparcV8: SparcV8Reg.td updated: 1.2 -> 1.3 --- Log message: SparcV8 regs are really 32-bit, not 64! Thanks, Chris. --- Diffs of the changes: (+1 -1) Index: llvm/lib/Target/SparcV8/SparcV8Reg.td diff -u llvm/lib/Target/SparcV8/SparcV8Reg.td:1.2 llvm/lib/Target/SparcV8/SparcV8Reg.td:1.3 --- llvm/lib/Target/SparcV8/SparcV8Reg.td:1.2 Wed Feb 25 15:00:05 2004 +++ llvm/lib/Target/SparcV8/SparcV8Reg.td Wed Feb 25 15:03:02 2004 @@ -36,7 +36,7 @@ // FIXME: the register order should be defined in terms of the preferred // allocation order... // -def IntRegs : RegisterClass; From lattner at cs.uiuc.edu Wed Feb 25 15:35:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 15:35:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Transforms/IPO/GlobalConstifier.cpp Message-ID: <200402252134.PAA25170@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/IPO: GlobalConstifier.cpp added (r1.1) --- Log message: My faith in programmers has been found to be totally misplaced. One would assume that if they don't intend to write to a global variable, that they would mark it as constant. However, there are people that don't understand that the compiler can do nice things for them if they give it the information it needs. This pass looks for blatently obvious globals that are only ever read from. Though it uses a trivially simple "alias analysis" of sorts, it is still able to do amazing things to important benchmarks. 253.perlbmk, for example, contains several ***GIANT*** function pointer tables that are not marked constant and should be. Marking them constant allows the optimizer to turn a whole bunch of indirect calls into direct calls. Note that only a link-time optimizer can do this transformation, but perlbmk does have several strings and other minor globals that can be marked constant by this pass when run from GCCAS. 176.gcc has a ton of strings and large tables that are marked constant, both at compile time (38 of them) and at link time (48 more). Other benchmarks give similar results, though it seems like big ones have disproportionally more than small ones. This pass is extremely quick and does good things. I'm going to enable it in gccas & gccld. Not bad for 50 SLOC. --- Diffs of the changes: (+82 -0) Index: llvm/lib/Transforms/IPO/GlobalConstifier.cpp diff -c /dev/null llvm/lib/Transforms/IPO/GlobalConstifier.cpp:1.1 *** /dev/null Wed Feb 25 15:34:46 2004 --- llvm/lib/Transforms/IPO/GlobalConstifier.cpp Wed Feb 25 15:34:36 2004 *************** *** 0 **** --- 1,82 ---- + //===- GlobalConstifier.cpp - Mark read-only globals constant -------------===// + // + // 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 pass loops over the non-constant internal global variables in the + // program. If it can prove that they are never written to, it marks them + // constant. + // + // NOTE: this should eventually use the alias analysis interfaces to do the + // transformation, but for now we just stick with a simple solution. DSA in + // particular could give a much more accurate answer to the mod/ref query, but + // it's not quite ready for this. + // + //===----------------------------------------------------------------------===// + + #include "llvm/Transforms/IPO.h" + #include "llvm/Constants.h" + #include "llvm/iMemory.h" + #include "llvm/Module.h" + #include "llvm/Pass.h" + #include "Support/Debug.h" + #include "Support/Statistic.h" + using namespace llvm; + + namespace { + Statistic<> NumMarked("constify", "Number of globals marked constant"); + + struct Constifier : public Pass { + bool run(Module &M); + }; + + RegisterOpt X("constify", "Global Constifier"); + } + + Pass *llvm::createGlobalConstifierPass() { return new Constifier(); } + + /// isStoredThrough - Return false if the specified pointer is provably never + /// stored through. If we can't tell, we must conservatively assume it might. + /// + static bool isStoredThrough(Value *V) { + for (Value::use_iterator UI = V->use_begin(), E = V->use_end(); UI != E; ++UI) + if (Constant *C = dyn_cast(*UI)) { + if (ConstantExpr *CE = dyn_cast(C)) { + if (isStoredThrough(CE)) + return true; + } else if (ConstantPointerRef *CPR = dyn_cast(C)) { + if (isStoredThrough(CPR)) return true; + } else { + // Must be an element of a constant array or something. + return true; + } + } else if (Instruction *I = dyn_cast(*UI)) { + if (I->getOpcode() == Instruction::GetElementPtr) { + if (isStoredThrough(I)) return true; + } else if (!isa(*UI)) + return true; // Any other non-load instruction might store! + } else { + // Otherwise must be a global or some other user. + return true; + } + + return false; + } + + bool Constifier::run(Module &M) { + bool Changed = false; + for (Module::giterator GV = M.gbegin(), E = M.gend(); GV != E; ++GV) + if (!GV->isConstant() && GV->hasInternalLinkage() && GV->hasInitializer()) { + if (!isStoredThrough(GV)) { + DEBUG(std::cerr << "MARKING CONSTANT: " << *GV << "\n"); + GV->setConstant(true); + ++NumMarked; + Changed = true; + } + } + return Changed; + } From lattner at cs.uiuc.edu Wed Feb 25 15:36:00 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 15:36:00 2004 Subject: [llvm-commits] CVS: llvm/tools/gccld/GenerateCode.cpp Message-ID: <200402252135.PAA25231@zion.cs.uiuc.edu> Changes in directory llvm/tools/gccld: GenerateCode.cpp updated: 1.18 -> 1.19 --- Log message: Add a new pass, run internalize first --- Diffs of the changes: (+11 -7) Index: llvm/tools/gccld/GenerateCode.cpp diff -u llvm/tools/gccld/GenerateCode.cpp:1.18 llvm/tools/gccld/GenerateCode.cpp:1.19 --- llvm/tools/gccld/GenerateCode.cpp:1.18 Mon Jan 26 17:51:10 2004 +++ llvm/tools/gccld/GenerateCode.cpp Wed Feb 25 15:35:13 2004 @@ -81,6 +81,17 @@ addPass(Passes, createFunctionResolvingPass()); if (!DisableOptimizations) { + if (Internalize) { + // Now that composite has been compiled, scan through the module, looking + // for a main function. If main is defined, mark all other functions + // internal. + addPass(Passes, createInternalizePass()); + } + + // Now that we internalized some globals, see if we can mark any globals as + // being constant! + addPass(Passes, createGlobalConstifierPass()); + // Linking modules together can lead to duplicated global constants, only // keep one copy of each constant... addPass(Passes, createConstantMergePass()); @@ -90,13 +101,6 @@ // supporting. if (Strip) addPass(Passes, createSymbolStrippingPass()); - - if (Internalize) { - // Now that composite has been compiled, scan through the module, looking - // for a main function. If main is defined, mark all other functions - // internal. - addPass(Passes, createInternalizePass()); - } // Propagate constants at call sites into the functions they call. addPass(Passes, createIPConstantPropagationPass()); From lattner at cs.uiuc.edu Wed Feb 25 15:36:33 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 15:36:33 2004 Subject: [llvm-commits] CVS: llvm/tools/gccas/gccas.cpp Message-ID: <200402252135.PAA25222@zion.cs.uiuc.edu> Changes in directory llvm/tools/gccas: gccas.cpp updated: 1.93 -> 1.94 --- Log message: Add a new pass --- Diffs of the changes: (+1 -0) Index: llvm/tools/gccas/gccas.cpp diff -u llvm/tools/gccas/gccas.cpp:1.93 llvm/tools/gccas/gccas.cpp:1.94 --- llvm/tools/gccas/gccas.cpp:1.93 Thu Feb 19 14:32:39 2004 +++ llvm/tools/gccas/gccas.cpp Wed Feb 25 15:35:02 2004 @@ -68,6 +68,7 @@ addPass(PM, createRaiseAllocationsPass()); // call %malloc -> malloc inst addPass(PM, createCFGSimplificationPass()); // Clean up disgusting code addPass(PM, createPromoteMemoryToRegister()); // Kill useless allocas + addPass(PM, createGlobalConstifierPass()); // Mark read-only globals const addPass(PM, createGlobalDCEPass()); // Remove unused globals addPass(PM, createIPConstantPropagationPass());// IP Constant Propagation addPass(PM, createDeadArgEliminationPass()); // Dead argument elimination From lattner at cs.uiuc.edu Wed Feb 25 15:37:05 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 15:37:05 2004 Subject: [llvm-commits] CVS: llvm/include/llvm/Transforms/IPO.h Message-ID: <200402252135.PAA25210@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Transforms: IPO.h updated: 1.26 -> 1.27 --- Log message: Add prototype --- Diffs of the changes: (+7 -0) Index: llvm/include/llvm/Transforms/IPO.h diff -u llvm/include/llvm/Transforms/IPO.h:1.26 llvm/include/llvm/Transforms/IPO.h:1.27 --- llvm/include/llvm/Transforms/IPO.h:1.26 Tue Dec 16 15:55:45 2003 +++ llvm/include/llvm/Transforms/IPO.h Wed Feb 25 15:34:51 2004 @@ -38,6 +38,13 @@ //===----------------------------------------------------------------------===// +// createGlobalConstifierPass - This function returns a new pass that marks +// internal globals "constant" if they are provably never written to. +// +Pass *createGlobalConstifierPass(); + + +//===----------------------------------------------------------------------===// // createRaiseAllocationsPass - Return a new pass that transforms malloc and // free function calls into malloc and free instructions. // From alkis at niobe.cs.uiuc.edu Wed Feb 25 15:56:01 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 15:56:01 2004 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/MRegisterInfo.h Message-ID: <200402252155.i1PLtu624306@niobe.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: MRegisterInfo.h updated: 1.34 -> 1.35 --- Log message: Add DenseMap template and actually use it for for mapping virtual regs to objects. --- Diffs of the changes: (+9 -1) Index: llvm/include/llvm/Target/MRegisterInfo.h diff -u llvm/include/llvm/Target/MRegisterInfo.h:1.34 llvm/include/llvm/Target/MRegisterInfo.h:1.35 --- llvm/include/llvm/Target/MRegisterInfo.h:1.34 Wed Feb 18 19:10:55 2004 +++ llvm/include/llvm/Target/MRegisterInfo.h Wed Feb 25 15:55:45 2004 @@ -16,8 +16,9 @@ #ifndef LLVM_TARGET_MREGISTERINFO_H #define LLVM_TARGET_MREGISTERINFO_H -#include #include "llvm/CodeGen/MachineBasicBlock.h" +#include +#include namespace llvm { @@ -317,6 +318,13 @@ virtual void emitPrologue(MachineFunction &MF) const = 0; virtual void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const = 0; +}; + +// This is useful when building DenseMap's keyed on virtual registers +struct VirtReg2IndexFunctor : std::unary_function { + unsigned operator()(unsigned Reg) const { + return Reg - MRegisterInfo::FirstVirtualRegister; + } }; } // End llvm namespace From alkis at niobe.cs.uiuc.edu Wed Feb 25 15:56:34 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 15:56:34 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/VirtRegMap.h VirtRegMap.cpp RegAllocLocal.cpp Message-ID: <200402252155.i1PLtur24326@niobe.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: VirtRegMap.h updated: 1.5 -> 1.6 VirtRegMap.cpp updated: 1.2 -> 1.3 RegAllocLocal.cpp updated: 1.57 -> 1.58 --- Log message: Add DenseMap template and actually use it for for mapping virtual regs to objects. --- Diffs of the changes: (+29 -36) Index: llvm/lib/CodeGen/VirtRegMap.h diff -u llvm/lib/CodeGen/VirtRegMap.h:1.5 llvm/lib/CodeGen/VirtRegMap.h:1.6 --- llvm/lib/CodeGen/VirtRegMap.h:1.5 Tue Feb 24 02:58:29 2004 +++ llvm/lib/CodeGen/VirtRegMap.h Wed Feb 25 15:55:44 2004 @@ -20,14 +20,15 @@ #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/SSARegMap.h" +#include "Support/DenseMap.h" #include namespace llvm { class VirtRegMap { public: - typedef std::vector Virt2PhysMap; - typedef std::vector Virt2StackSlotMap; + typedef DenseMap Virt2PhysMap; + typedef DenseMap Virt2StackSlotMap; private: MachineFunction* mf_; @@ -38,13 +39,6 @@ VirtRegMap(const VirtRegMap& rhs); const VirtRegMap& operator=(const VirtRegMap& rhs); - static unsigned toIndex(unsigned virtReg) { - return virtReg - MRegisterInfo::FirstVirtualRegister; - } - static unsigned fromIndex(unsigned index) { - return index + MRegisterInfo::FirstVirtualRegister; - } - enum { NO_PHYS_REG = 0, NO_STACK_SLOT = INT_MAX @@ -53,8 +47,10 @@ public: VirtRegMap(MachineFunction& mf) : mf_(&mf), - v2pMap_(mf.getSSARegMap()->getNumVirtualRegs(), NO_PHYS_REG), - v2ssMap_(mf.getSSARegMap()->getNumVirtualRegs(), NO_STACK_SLOT) { + v2pMap_(NO_PHYS_REG), + v2ssMap_(NO_STACK_SLOT) { + v2pMap_.grow(mf.getSSARegMap()->getLastVirtReg()); + v2ssMap_.grow(mf.getSSARegMap()->getLastVirtReg()); } bool hasPhys(unsigned virtReg) const { @@ -63,23 +59,23 @@ unsigned getPhys(unsigned virtReg) const { assert(MRegisterInfo::isVirtualRegister(virtReg)); - return v2pMap_[toIndex(virtReg)]; + return v2pMap_[virtReg]; } void assignVirt2Phys(unsigned virtReg, unsigned physReg) { assert(MRegisterInfo::isVirtualRegister(virtReg) && MRegisterInfo::isPhysicalRegister(physReg)); - assert(v2pMap_[toIndex(virtReg)] == NO_PHYS_REG && + assert(v2pMap_[virtReg] == NO_PHYS_REG && "attempt to assign physical register to already mapped " "virtual register"); - v2pMap_[toIndex(virtReg)] = physReg; + v2pMap_[virtReg] = physReg; } void clearVirtReg(unsigned virtReg) { assert(MRegisterInfo::isVirtualRegister(virtReg)); - assert(v2pMap_[toIndex(virtReg)] != NO_PHYS_REG && + assert(v2pMap_[virtReg] != NO_PHYS_REG && "attempt to clear a not assigned virtual register"); - v2pMap_[toIndex(virtReg)] = NO_PHYS_REG; + v2pMap_[virtReg] = NO_PHYS_REG; } bool hasStackSlot(unsigned virtReg) const { @@ -88,7 +84,7 @@ int getStackSlot(unsigned virtReg) const { assert(MRegisterInfo::isVirtualRegister(virtReg)); - return v2ssMap_[toIndex(virtReg)]; + return v2ssMap_[virtReg]; } int assignVirt2StackSlot(unsigned virtReg); Index: llvm/lib/CodeGen/VirtRegMap.cpp diff -u llvm/lib/CodeGen/VirtRegMap.cpp:1.2 llvm/lib/CodeGen/VirtRegMap.cpp:1.3 --- llvm/lib/CodeGen/VirtRegMap.cpp:1.2 Tue Feb 24 02:58:29 2004 +++ llvm/lib/CodeGen/VirtRegMap.cpp Wed Feb 25 15:55:44 2004 @@ -38,12 +38,12 @@ int VirtRegMap::assignVirt2StackSlot(unsigned virtReg) { assert(MRegisterInfo::isVirtualRegister(virtReg)); - assert(v2ssMap_[toIndex(virtReg)] == NO_STACK_SLOT && + assert(v2ssMap_[virtReg] == NO_STACK_SLOT && "attempt to assign stack slot to already spilled register"); const TargetRegisterClass* rc = mf_->getSSARegMap()->getRegClass(virtReg); int frameIndex = mf_->getFrameInfo()->CreateStackObject(rc); - v2ssMap_[toIndex(virtReg)] = frameIndex; + v2ssMap_[virtReg] = frameIndex; ++numSpills; return frameIndex; } @@ -53,14 +53,16 @@ const MRegisterInfo* mri = vrm.mf_->getTarget().getRegisterInfo(); std::cerr << "********** REGISTER MAP **********\n"; - for (unsigned i = 0, e = vrm.v2pMap_.size(); i != e; ++i) { + for (unsigned i = MRegisterInfo::FirstVirtualRegister, + e = vrm.mf_->getSSARegMap()->getLastVirtReg(); i <= e; ++i) { if (vrm.v2pMap_[i] != VirtRegMap::NO_PHYS_REG) - std::cerr << "[reg" << VirtRegMap::fromIndex(i) << " -> " + std::cerr << "[reg" << i << " -> " << mri->getName(vrm.v2pMap_[i]) << "]\n"; } - for (unsigned i = 0, e = vrm.v2ssMap_.size(); i != e; ++i) { + for (unsigned i = MRegisterInfo::FirstVirtualRegister, + e = vrm.mf_->getSSARegMap()->getLastVirtReg(); i <= e; ++i) { if (vrm.v2ssMap_[i] != VirtRegMap::NO_STACK_SLOT) - std::cerr << "[reg" << VirtRegMap::fromIndex(i) << " -> fi#" + std::cerr << "[reg" << i << " -> fi#" << vrm.v2ssMap_[i] << "]\n"; } return std::cerr << '\n'; Index: llvm/lib/CodeGen/RegAllocLocal.cpp diff -u llvm/lib/CodeGen/RegAllocLocal.cpp:1.57 llvm/lib/CodeGen/RegAllocLocal.cpp:1.58 --- llvm/lib/CodeGen/RegAllocLocal.cpp:1.57 Mon Feb 23 12:14:48 2004 +++ llvm/lib/CodeGen/RegAllocLocal.cpp Wed Feb 25 15:55:44 2004 @@ -23,6 +23,7 @@ #include "llvm/Target/TargetMachine.h" #include "Support/CommandLine.h" #include "Support/Debug.h" +#include "Support/DenseMap.h" #include "Support/Statistic.h" #include using namespace llvm; @@ -43,19 +44,11 @@ std::map StackSlotForVirtReg; // Virt2PhysRegMap - This map contains entries for each virtual register - // that is currently available in a physical register. This is "logically" - // a map from virtual register numbers to physical register numbers. - // Instead of using a map, however, which is slow, we use a vector. The - // index is the VREG number - FirstVirtualRegister. If the entry is zero, - // then it is logically "not in the map". - // - std::vector Virt2PhysRegMap; + // that is currently available in a physical register. + DenseMap Virt2PhysRegMap; unsigned &getVirt2PhysRegMapSlot(unsigned VirtReg) { - assert(MRegisterInfo::isVirtualRegister(VirtReg) &&"Illegal VREG #"); - assert(VirtReg-MRegisterInfo::FirstVirtualRegister getSSARegMap()->getLastVirtReg(); i <= e; ++i) if (unsigned PR = Virt2PhysRegMap[i]) { std::cerr << "Register still mapped: " << i << " -> " << PR << "\n"; AllOk = false; @@ -689,7 +683,8 @@ // initialize the virtual->physical register map to have a 'null' // mapping for all virtual registers - Virt2PhysRegMap.assign(MF->getSSARegMap()->getNumVirtualRegs(), 0); + Virt2PhysRegMap.clear(); + Virt2PhysRegMap.grow(MF->getSSARegMap()->getLastVirtReg()); // Loop over all of the basic blocks, eliminating virtual register references for (MachineFunction::iterator MBB = Fn.begin(), MBBe = Fn.end(); From alkis at niobe.cs.uiuc.edu Wed Feb 25 15:57:07 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 15:57:07 2004 Subject: [llvm-commits] CVS: llvm/include/Support/DenseMap.h Message-ID: <200402252155.i1PLtu224314@niobe.cs.uiuc.edu> Changes in directory llvm/include/Support: DenseMap.h added (r1.1) --- Log message: Add DenseMap template and actually use it for for mapping virtual regs to objects. --- Diffs of the changes: (+61 -0) Index: llvm/include/Support/DenseMap.h diff -c /dev/null llvm/include/Support/DenseMap.h:1.1 *** /dev/null Wed Feb 25 15:55:56 2004 --- llvm/include/Support/DenseMap.h Wed Feb 25 15:55:45 2004 *************** *** 0 **** --- 1,61 ---- + //===- DenseMap.h - A dense map implmentation -------------------*- C++ -*-===// + // + // 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 implements a dense map. A dense map template takes two + // types. The first is the mapped type and the second is a functor + // that maps its argument to a size_t. On instanciation a "null" value + // can be provided to be used as a "does not exist" indicator in the + // map. A member function grow() is provided that given the value of + // the maximally indexed key (the argument of the functor) makes sure + // the map has enough space for it. + // + //===----------------------------------------------------------------------===// + + #ifndef SUPPORT_DENSEMAP_H + #define SUPPORT_DENSEMAP_H + + #include + + namespace llvm { + + template + class DenseMap { + typedef typename ToIndexT::argument_type IndexT; + typedef std::vector StorageT; + StorageT storage_; + T nullVal_; + ToIndexT toIndex_; + + public: + DenseMap() { } + + explicit DenseMap(const T& val) : nullVal_(val) { } + + typename StorageT::reference operator[](IndexT n) { + assert(toIndex_(n) < storage_.size() && "index out of bounds!"); + return storage_[toIndex_(n)]; + } + + typename StorageT::const_reference operator[](IndexT n) const { + assert(toIndex_(n) < storage_.size() && "index out of bounds!"); + return storage_[toIndex_(n)]; + } + + void clear() { + storage_.assign(storage_.size(), nullVal_); + } + + void grow(IndexT n) { + storage_.resize(toIndex_(n) + 1, nullVal_); + } + }; + + } // End llvm namespace + + #endif From alkis at niobe.cs.uiuc.edu Wed Feb 25 15:57:43 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 15:57:43 2004 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/SSARegMap.h Message-ID: <200402252155.i1PLtuG24309@niobe.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: SSARegMap.h updated: 1.9 -> 1.10 --- Log message: Add DenseMap template and actually use it for for mapping virtual regs to objects. --- Diffs of the changes: (+11 -12) Index: llvm/include/llvm/CodeGen/SSARegMap.h diff -u llvm/include/llvm/CodeGen/SSARegMap.h:1.9 llvm/include/llvm/CodeGen/SSARegMap.h:1.10 --- llvm/include/llvm/CodeGen/SSARegMap.h:1.9 Fri Feb 13 12:07:06 2004 +++ llvm/include/llvm/CodeGen/SSARegMap.h Wed Feb 25 15:55:45 2004 @@ -18,35 +18,34 @@ #define LLVM_CODEGEN_SSAREGMAP_H #include "llvm/Target/MRegisterInfo.h" +#include "Support/DenseMap.h" namespace llvm { class TargetRegisterClass; class SSARegMap { - std::vector RegClassMap; - - unsigned rescale(unsigned Reg) { - return Reg - MRegisterInfo::FirstVirtualRegister; - } + DenseMap RegClassMap; + unsigned NextRegNum; public: + SSARegMap() : NextRegNum(MRegisterInfo::FirstVirtualRegister) { } + const TargetRegisterClass* getRegClass(unsigned Reg) { - unsigned actualReg = rescale(Reg); - assert(actualReg < RegClassMap.size() && "Register out of bounds"); - return RegClassMap[actualReg]; + return RegClassMap[Reg]; } /// createVirtualRegister - Create and return a new virtual register in the /// function with the specified register class. /// unsigned createVirtualRegister(const TargetRegisterClass *RegClass) { - RegClassMap.push_back(RegClass); - return RegClassMap.size()+MRegisterInfo::FirstVirtualRegister-1; + RegClassMap.grow(NextRegNum); + RegClassMap[NextRegNum] = RegClass; + return NextRegNum++; } - unsigned getNumVirtualRegs() const { - return RegClassMap.size(); + unsigned getLastVirtReg() const { + return NextRegNum - 1; } }; From alkis at niobe.cs.uiuc.edu Wed Feb 25 16:02:01 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 16:02:01 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/RegAllocLinearScan.cpp Message-ID: <200402252201.i1PM1HZ24384@niobe.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: RegAllocLinearScan.cpp updated: 1.65 -> 1.66 --- Log message: Remove asssert since it is breaking cases that it shouldn't. --- Diffs of the changes: (+0 -1) Index: llvm/lib/CodeGen/RegAllocLinearScan.cpp diff -u llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.65 llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.66 --- llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.65 Wed Feb 25 13:37:44 2004 +++ llvm/lib/CodeGen/RegAllocLinearScan.cpp Wed Feb 25 16:01:06 2004 @@ -378,7 +378,6 @@ } DEBUG(std::cerr << "\t\tregister with min weight: " << mri_->getName(minReg) << " (" << minWeight << ")\n"); - assert(minReg != 0 && "Didn't find a register to spill?"); // if the current has the minimum weight, we need to modify it, // push it back in unhandled and let the linear scan algorithm run From alkis at niobe.cs.uiuc.edu Wed Feb 25 16:05:01 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 16:05:01 2004 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/MRegisterInfo.h Message-ID: <200402252204.i1PM4cm24791@niobe.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: MRegisterInfo.h updated: 1.35 -> 1.36 --- Log message: Add assert to isPhysicalRegister and isVirtualRegister to fail when passed the special 'register' 0. --- Diffs of the changes: (+2 -0) Index: llvm/include/llvm/Target/MRegisterInfo.h diff -u llvm/include/llvm/Target/MRegisterInfo.h:1.35 llvm/include/llvm/Target/MRegisterInfo.h:1.36 --- llvm/include/llvm/Target/MRegisterInfo.h:1.35 Wed Feb 25 15:55:45 2004 +++ llvm/include/llvm/Target/MRegisterInfo.h Wed Feb 25 16:04:28 2004 @@ -141,12 +141,14 @@ /// isPhysicalRegister - Return true if the specified register number is in /// the physical register namespace. static bool isPhysicalRegister(unsigned Reg) { + assert(Reg && "this is not a register!"; return Reg < FirstVirtualRegister; } /// isVirtualRegister - Return true if the specified register number is in /// the virtual register namespace. static bool isVirtualRegister(unsigned Reg) { + assert(Reg && "this is not a register!"; return Reg >= FirstVirtualRegister; } From alkis at niobe.cs.uiuc.edu Wed Feb 25 16:08:01 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 16:08:01 2004 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/MRegisterInfo.h Message-ID: <200402252207.i1PM7Q825528@niobe.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: MRegisterInfo.h updated: 1.36 -> 1.37 --- Log message: Duh, forgot to close the parenthesis. --- Diffs of the changes: (+2 -2) Index: llvm/include/llvm/Target/MRegisterInfo.h diff -u llvm/include/llvm/Target/MRegisterInfo.h:1.36 llvm/include/llvm/Target/MRegisterInfo.h:1.37 --- llvm/include/llvm/Target/MRegisterInfo.h:1.36 Wed Feb 25 16:04:28 2004 +++ llvm/include/llvm/Target/MRegisterInfo.h Wed Feb 25 16:07:14 2004 @@ -141,14 +141,14 @@ /// isPhysicalRegister - Return true if the specified register number is in /// the physical register namespace. static bool isPhysicalRegister(unsigned Reg) { - assert(Reg && "this is not a register!"; + assert(Reg && "this is not a register!"); return Reg < FirstVirtualRegister; } /// isVirtualRegister - Return true if the specified register number is in /// the virtual register namespace. static bool isVirtualRegister(unsigned Reg) { - assert(Reg && "this is not a register!"; + assert(Reg && "this is not a register!"); return Reg >= FirstVirtualRegister; } From gaeke at cs.uiuc.edu Wed Feb 25 16:10:02 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 16:10:02 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/InstrSched/InstrScheduling.cpp SchedPriorities.cpp Message-ID: <200402252209.QAA03738@seraph.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/InstrSched: InstrScheduling.cpp updated: 1.67 -> 1.68 SchedPriorities.cpp updated: 1.31 -> 1.32 --- Log message: Great sparc renaming fallout IV: Sparc --> SparcV9. --- Diffs of the changes: (+2 -2) Index: llvm/lib/CodeGen/InstrSched/InstrScheduling.cpp diff -u llvm/lib/CodeGen/InstrSched/InstrScheduling.cpp:1.67 llvm/lib/CodeGen/InstrSched/InstrScheduling.cpp:1.68 --- llvm/lib/CodeGen/InstrSched/InstrScheduling.cpp:1.67 Tue Feb 24 13:45:44 2004 +++ llvm/lib/CodeGen/InstrSched/InstrScheduling.cpp Wed Feb 25 16:09:35 2004 @@ -16,7 +16,7 @@ #include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineCodeForInstruction.h" #include "llvm/CodeGen/MachineFunction.h" -#include "../../Target/Sparc/LiveVar/FunctionLiveVarInfo.h" +#include "../../Target/SparcV9/LiveVar/FunctionLiveVarInfo.h" #include "llvm/Target/TargetMachine.h" #include "llvm/BasicBlock.h" #include "Support/CommandLine.h" Index: llvm/lib/CodeGen/InstrSched/SchedPriorities.cpp diff -u llvm/lib/CodeGen/InstrSched/SchedPriorities.cpp:1.31 llvm/lib/CodeGen/InstrSched/SchedPriorities.cpp:1.32 --- llvm/lib/CodeGen/InstrSched/SchedPriorities.cpp:1.31 Tue Feb 24 13:45:44 2004 +++ llvm/lib/CodeGen/InstrSched/SchedPriorities.cpp Wed Feb 25 16:09:35 2004 @@ -18,7 +18,7 @@ //===----------------------------------------------------------------------===// #include "SchedPriorities.h" -#include "../../Target/Sparc/LiveVar/FunctionLiveVarInfo.h" +#include "../../Target/SparcV9/LiveVar/FunctionLiveVarInfo.h" #include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/Support/CFG.h" #include "Support/PostOrderIterator.h" From gaeke at cs.uiuc.edu Wed Feb 25 16:10:42 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 16:10:42 2004 Subject: [llvm-commits] CVS: llvm/lib/ExecutionEngine/JIT/TargetSelect.cpp Message-ID: <200402252209.QAA03729@seraph.cs.uiuc.edu> Changes in directory llvm/lib/ExecutionEngine/JIT: TargetSelect.cpp updated: 1.3 -> 1.4 --- Log message: Great sparc renaming fallout IV: Sparc --> SparcV9. --- Diffs of the changes: (+1 -1) Index: llvm/lib/ExecutionEngine/JIT/TargetSelect.cpp diff -u llvm/lib/ExecutionEngine/JIT/TargetSelect.cpp:1.3 llvm/lib/ExecutionEngine/JIT/TargetSelect.cpp:1.4 --- llvm/lib/ExecutionEngine/JIT/TargetSelect.cpp:1.3 Wed Feb 25 13:08:11 2004 +++ llvm/lib/ExecutionEngine/JIT/TargetSelect.cpp Wed Feb 25 16:09:36 2004 @@ -38,7 +38,7 @@ clEnumVal(x86, " IA-32 (Pentium and above)"), #endif #ifdef ENABLE_SPARC_JIT - clEnumValN(Sparc, "sparcv9", " Sparc-V9"), + clEnumValN(SparcV9, "sparcv9", " Sparc-V9"), #endif 0), #if defined(ENABLE_X86_JIT) From gaeke at cs.uiuc.edu Wed Feb 25 17:02:00 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 17:02:00 2004 Subject: [llvm-commits] CVS: llvm/include/llvm/ExecutionEngine/GenericValue.h Message-ID: <200402252301.RAA13200@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/ExecutionEngine: GenericValue.h updated: 1.4 -> 1.5 --- Log message: Represent va_list in interpreter as a (ec-stack-depth . var-arg-index) pair, and look up varargs in the execution stack every time, instead of just pushing iterators (which can be invalidated during callFunction()) around. (union GenericValue now has a "pair of uints" member, to support this mechanism.) Fixes Bug 234. --- Diffs of the changes: (+1 -0) Index: llvm/include/llvm/ExecutionEngine/GenericValue.h diff -u llvm/include/llvm/ExecutionEngine/GenericValue.h:1.4 llvm/include/llvm/ExecutionEngine/GenericValue.h:1.5 --- llvm/include/llvm/ExecutionEngine/GenericValue.h:1.4 Thu Dec 11 23:06:09 2003 +++ llvm/include/llvm/ExecutionEngine/GenericValue.h Wed Feb 25 17:01:46 2004 @@ -33,6 +33,7 @@ int64_t LongVal; double DoubleVal; float FloatVal; + struct { unsigned int first; unsigned int second; } UIntPairVal; PointerTy PointerVal; unsigned char Untyped[8]; From gaeke at cs.uiuc.edu Wed Feb 25 17:02:34 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 17:02:34 2004 Subject: [llvm-commits] CVS: llvm/lib/ExecutionEngine/Interpreter/Execution.cpp Message-ID: <200402252301.RAA13203@zion.cs.uiuc.edu> Changes in directory llvm/lib/ExecutionEngine/Interpreter: Execution.cpp updated: 1.123 -> 1.124 --- Log message: Represent va_list in interpreter as a (ec-stack-depth . var-arg-index) pair, and look up varargs in the execution stack every time, instead of just pushing iterators (which can be invalidated during callFunction()) around. (union GenericValue now has a "pair of uints" member, to support this mechanism.) Fixes Bug 234. --- Diffs of the changes: (+14 -11) Index: llvm/lib/ExecutionEngine/Interpreter/Execution.cpp diff -u llvm/lib/ExecutionEngine/Interpreter/Execution.cpp:1.123 llvm/lib/ExecutionEngine/Interpreter/Execution.cpp:1.124 --- llvm/lib/ExecutionEngine/Interpreter/Execution.cpp:1.123 Thu Feb 12 23:48:00 2004 +++ llvm/lib/ExecutionEngine/Interpreter/Execution.cpp Wed Feb 25 17:01:48 2004 @@ -774,9 +774,13 @@ switch (F->getIntrinsicID()) { case Intrinsic::not_intrinsic: break; - case Intrinsic::va_start: // va_start: implemented by getFirstVarArg() - SetValue(CS.getInstruction(), getFirstVarArg(), SF); + case Intrinsic::va_start: { // va_start + GenericValue ArgIndex; + ArgIndex.UIntPairVal.first = ECStack.size() - 1; + ArgIndex.UIntPairVal.second = 0; + SetValue(CS.getInstruction(), ArgIndex, SF); return; + } case Intrinsic::va_end: // va_end is a noop for the interpreter return; case Intrinsic::va_copy: // va_copy: dest = src @@ -960,14 +964,12 @@ void Interpreter::visitVANextInst(VANextInst &I) { ExecutionContext &SF = ECStack.back(); - // Get the incoming valist parameter. LLI treats the valist as a pointer - // to the next argument. + // Get the incoming valist parameter. LLI treats the valist as a + // (ec-stack-depth var-arg-index) pair. GenericValue VAList = getOperandValue(I.getOperand(0), SF); // Move the pointer to the next vararg. - GenericValue *ArgPtr = (GenericValue *) GVTOP (VAList); - ++ArgPtr; - VAList = PTOGV (ArgPtr); + ++VAList.UIntPairVal.second; SetValue(&I, VAList, SF); } @@ -977,11 +979,12 @@ void Interpreter::visitVAArgInst(VAArgInst &I) { ExecutionContext &SF = ECStack.back(); - // Get the incoming valist parameter. LLI treats the valist as a pointer - // to the next argument. + // Get the incoming valist parameter. LLI treats the valist as a + // (ec-stack-depth var-arg-index) pair. GenericValue VAList = getOperandValue(I.getOperand(0), SF); - assert (GVTOP (VAList) != 0 && "VAList was null in vaarg instruction"); - GenericValue Dest, Src = *(GenericValue *) GVTOP (VAList); + GenericValue Dest; + GenericValue Src = ECStack[VAList.UIntPairVal.first] + .VarArgs[VAList.UIntPairVal.second]; const Type *Ty = I.getType(); switch (Ty->getPrimitiveID()) { IMPLEMENT_VAARG(UByte); From lattner at cs.uiuc.edu Wed Feb 25 17:07:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 17:07:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Analysis/DataStructure/Local.cpp Message-ID: <200402252306.RAA13549@zion.cs.uiuc.edu> Changes in directory llvm/lib/Analysis/DataStructure: Local.cpp updated: 1.89 -> 1.90 --- Log message: Add a bunch more functions --- Diffs of the changes: (+55 -8) Index: llvm/lib/Analysis/DataStructure/Local.cpp diff -u llvm/lib/Analysis/DataStructure/Local.cpp:1.89 llvm/lib/Analysis/DataStructure/Local.cpp:1.90 --- llvm/lib/Analysis/DataStructure/Local.cpp:1.89 Wed Feb 25 11:43:20 2004 +++ llvm/lib/Analysis/DataStructure/Local.cpp Wed Feb 25 17:06:40 2004 @@ -490,7 +490,11 @@ F->getName() == "strcmp" || F->getName() == "strncmp" || F->getName() == "execl" || F->getName() == "execlp" || F->getName() == "execle" || F->getName() == "execv" || - F->getName() == "execvp" || F->getName() == "chmod") { + F->getName() == "execvp" || F->getName() == "chmod" || + F->getName() == "puts" || F->getName() == "write" || + F->getName() == "open" || F->getName() == "create" || + F->getName() == "truncate" || F->getName() == "chdir" || + F->getName() == "mkdir" || F->getName() == "rmdir") { // These functions read all of their pointer operands. for (CallSite::arg_iterator AI = CS.arg_begin(), E = CS.arg_end(); AI != E; ++AI) { @@ -499,6 +503,16 @@ N->setReadMarker(); } return; + } else if (F->getName() == "read" || F->getName() == "pipe" || + F->getName() == "wait") { + // These functions write all of their pointer operands. + for (CallSite::arg_iterator AI = CS.arg_begin(), E = CS.arg_end(); + AI != E; ++AI) { + if (isPointerType((*AI)->getType())) + if (DSNode *N = getValueDest(**AI).getNode()) + N->setModifiedMarker(); + } + return; } else if (F->getName() == "stat" || F->getName() == "fstat" || F->getName() == "lstat") { // These functions read their first operand if its a pointer. @@ -516,8 +530,6 @@ if (const PointerType *PTy = dyn_cast(StatTy)) N->mergeTypeInfo(PTy->getElementType(), StatBuf.getOffset()); } - - return; } else if (F->getName() == "fopen" || F->getName() == "fdopen") { // fopen reads the mode argument strings. @@ -554,7 +566,8 @@ } else if (CS.arg_end()-CS.arg_begin() == 1 && (F->getName() == "fflush" || F->getName() == "feof" || F->getName() == "fileno" || F->getName() == "clearerr" || - F->getName() == "rewind" || F->getName() == "ftell")) { + F->getName() == "rewind" || F->getName() == "ftell" || + F->getName() == "ferror")) { // fflush reads and writes the memory for the file descriptor. It // merges the FILE type into the descriptor. DSNodeHandle H = getValueDest(**CS.arg_begin()); @@ -605,15 +618,42 @@ N->mergeTypeInfo(PTy->getElementType(), H.getOffset()); } return; - } else if (F->getName() == "ungetc" &&CS.arg_end()-CS.arg_begin() == 2){ - // ungetc reads and writes the memory for the file descriptor. + } else if (F->getName() == "ungetc" || F->getName() == "fputc" || + F->getName() == "fputs" || F->getName() == "putc" || + F->getName() == "ftell" || F->getName() == "rewind") { + // These functions read and write the memory for the file descriptor. DSNodeHandle H = getValueDest(**--CS.arg_end()); if (DSNode *N = H.getNode()) { N->setReadMarker()->setModifiedMarker(); - const Type *ArgTy = F->getFunctionType()->getParamType(1); + const Type *ArgTy = *--F->getFunctionType()->param_end(); if (const PointerType *PTy = dyn_cast(ArgTy)) N->mergeTypeInfo(PTy->getElementType(), H.getOffset()); } + + // Any pointer arguments are read. + for (CallSite::arg_iterator AI = CS.arg_begin(), E = CS.arg_end(); + AI != E; ++AI) + if (isPointerType((*AI)->getType())) + if (DSNode *N = getValueDest(**AI).getNode()) + N->setReadMarker(); + return; + } else if (F->getName() == "fseek" || F->getName() == "fgetpos" || + F->getName() == "fsetpos") { + // These functions read and write the memory for the file descriptor, + // and read/write all other arguments. + DSNodeHandle H = getValueDest(**CS.arg_begin()); + if (DSNode *N = H.getNode()) { + const Type *ArgTy = *--F->getFunctionType()->param_end(); + if (const PointerType *PTy = dyn_cast(ArgTy)) + N->mergeTypeInfo(PTy->getElementType(), H.getOffset()); + } + + // Any pointer arguments are read. + for (CallSite::arg_iterator AI = CS.arg_begin(), E = CS.arg_end(); + AI != E; ++AI) + if (isPointerType((*AI)->getType())) + if (DSNode *N = getValueDest(**AI).getNode()) + N->setReadMarker()->setModifiedMarker(); return; } else if (F->getName() == "printf" || F->getName() == "fprintf" || F->getName() == "sprintf") { @@ -708,7 +748,14 @@ N->setReadMarker(); H.mergeWith(getValueDest(*CS.getInstruction())); // Returns buffer return; - + } else if (F->getName() == "modf" && CS.arg_end()-CS.arg_begin() == 2) { + // This writes its second argument, and forces it to double. + DSNodeHandle H = getValueDest(**--CS.arg_end()); + if (DSNode *N = H.getNode()) { + N->setModifiedMarker(); + N->mergeTypeInfo(Type::DoubleTy, H.getOffset()); + } + return; } else { // Unknown function, warn if it returns a pointer type or takes a // pointer argument. From lattner at cs.uiuc.edu Wed Feb 25 17:07:37 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 17:07:37 2004 Subject: [llvm-commits] CVS: llvm/lib/Analysis/DataStructure/Printer.cpp Message-ID: <200402252306.RAA13540@zion.cs.uiuc.edu> Changes in directory llvm/lib/Analysis/DataStructure: Printer.cpp updated: 1.65 -> 1.66 --- Log message: Try harder to get symbol info --- Diffs of the changes: (+3 -0) Index: llvm/lib/Analysis/DataStructure/Printer.cpp diff -u llvm/lib/Analysis/DataStructure/Printer.cpp:1.65 llvm/lib/Analysis/DataStructure/Printer.cpp:1.66 --- llvm/lib/Analysis/DataStructure/Printer.cpp:1.65 Sat Feb 21 16:27:31 2004 +++ llvm/lib/Analysis/DataStructure/Printer.cpp Wed Feb 25 17:06:30 2004 @@ -39,6 +39,9 @@ static std::string getCaption(const DSNode *N, const DSGraph *G) { std::stringstream OS; Module *M = 0; + + if (G) G = N->getParentGraph(); + // Get the module from ONE of the functions in the graph it is available. if (G && !G->getReturnNodes().empty()) M = G->getReturnNodes().begin()->first->getParent(); From lattner at cs.uiuc.edu Wed Feb 25 17:09:00 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 17:09:00 2004 Subject: [llvm-commits] CVS: llvm/lib/Analysis/DataStructure/DataStructure.cpp Message-ID: <200402252308.RAA13568@zion.cs.uiuc.edu> Changes in directory llvm/lib/Analysis/DataStructure: DataStructure.cpp updated: 1.158 -> 1.159 --- Log message: Simplify the dead node elimination stuff Make the incompleteness marker faster by looping directly over the globals instead of over the scalars to find the globals Fix a bug where we didn't mark a global incomplete if it didn't have any outgoing edges. This wouldn't break any current clients but is still wrong. --- Diffs of the changes: (+12 -10) Index: llvm/lib/Analysis/DataStructure/DataStructure.cpp diff -u llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.158 llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.159 --- llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.158 Sat Feb 21 18:53:54 2004 +++ llvm/lib/Analysis/DataStructure/DataStructure.cpp Wed Feb 25 17:08:00 2004 @@ -1351,9 +1351,9 @@ // Mark all global nodes as incomplete... if ((Flags & DSGraph::IgnoreGlobals) == 0) - for (node_iterator NI = node_begin(), E = node_end(); NI != E; ++NI) - if ((*NI)->isGlobalNode() && (*NI)->getNumLinks()) - markIncompleteNode(*NI); + for (DSScalarMap::global_iterator I = ScalarMap.global_begin(), + E = ScalarMap.global_end(); I != E; ++I) + markIncompleteNode(ScalarMap[*I].getNode()); } static inline void killIfUselessEdge(DSNodeHandle &Edge) { @@ -1773,16 +1773,18 @@ // std::vector DeadNodes; DeadNodes.reserve(Nodes.size()); - for (NodeListTy::iterator NI = Nodes.begin(), E = Nodes.end(); NI != E;) - if (!Alive.count(NI)) { - ++NumDNE; - DSNode *N = Nodes.remove(NI++); + for (NodeListTy::iterator NI = Nodes.begin(), E = Nodes.end(); NI != E;) { + DSNode *N = NI++; + assert(!N->isForwarding() && "Forwarded node in nodes list?"); + + if (!Alive.count(N)) { + Nodes.remove(N); + assert(!N->isForwarding() && "Cannot remove a forwarding node!"); DeadNodes.push_back(N); N->dropAllReferences(); - } else { - assert(NI->getForwardNode() == 0 && "Alive forwarded node?"); - ++NI; + ++NumDNE; } + } // Remove all unreachable globals from the ScalarMap. // If flag RemoveUnreachableGlobals is set, GlobalNodes has only dead nodes. From alkis at niobe.cs.uiuc.edu Wed Feb 25 17:21:01 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 17:21:01 2004 Subject: [llvm-commits] CVS: llvm/autoconf/configure.ac Message-ID: <200402252320.i1PNKmn25271@niobe.cs.uiuc.edu> Changes in directory llvm/autoconf: configure.ac updated: 1.79 -> 1.80 --- Log message: Fix bugs found with recent addition of assertions in MRegisterInfo::is{Physical,Virtual}Register. --- Diffs of the changes: (+7 -7) Index: llvm/autoconf/configure.ac diff -u llvm/autoconf/configure.ac:1.79 llvm/autoconf/configure.ac:1.80 --- llvm/autoconf/configure.ac:1.79 Tue Feb 24 15:43:38 2004 +++ llvm/autoconf/configure.ac Wed Feb 25 17:20:27 2004 @@ -304,20 +304,20 @@ then if test -d /home/vadve/shared/benchmarks/speccpu2000/benchspec then - AC_SUBST(SPEC_ROOT,[/home/vadve/shared/benchmarks/speccpu2000/benchspec]) - AC_SUBST(USE_SPEC,[[USE_SPEC=1]]) + AC_SUBST(SPEC2000_ROOT,[/home/vadve/shared/benchmarks/speccpu2000/benchspec]) + AC_SUBST(USE_SPEC2000,[[USE_SPEC2000=1]]) else - AC_SUBST(USE_SPEC,[[]]) - AC_SUBST(SPEC_ROOT,[]) + AC_SUBST(USE_SPEC2000,[[]]) + AC_SUBST(SPEC2000_ROOT,[]) fi else if test ${enableval} = "" then - AC_SUBST(SPEC_ROOT,[/home/vadve/shared/benchmarks/speccpu2000/benchspec]) + AC_SUBST(SPEC2000_ROOT,[/home/vadve/shared/benchmarks/speccpu2000/benchspec]) else - AC_SUBST(SPEC_ROOT,[${enableval}]) + AC_SUBST(SPEC2000_ROOT,[${enableval}]) fi - AC_SUBST(USE_SPEC,[[USE_SPEC=1]]) + AC_SUBST(USE_SPEC2000,[[USE_SPEC2000=1]]) fi dnl Spec 95 Benchmarks From alkis at niobe.cs.uiuc.edu Wed Feb 25 17:23:00 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 17:23:00 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/VirtRegMap.cpp Message-ID: <200402252322.i1PNM4U25497@niobe.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: VirtRegMap.cpp updated: 1.3 -> 1.4 --- Log message: Fix bugs found with recent addition of assertions in MRegisterInfo::is{Physical,Virtual}Register. --- Diffs of the changes: (+2 -2) Index: llvm/lib/CodeGen/VirtRegMap.cpp diff -u llvm/lib/CodeGen/VirtRegMap.cpp:1.3 llvm/lib/CodeGen/VirtRegMap.cpp:1.4 --- llvm/lib/CodeGen/VirtRegMap.cpp:1.3 Wed Feb 25 15:55:44 2004 +++ llvm/lib/CodeGen/VirtRegMap.cpp Wed Feb 25 17:21:52 2004 @@ -168,7 +168,7 @@ // rewrite all used operands for (unsigned i = 0, e = mii->getNumOperands(); i != e; ++i) { MachineOperand& op = mii->getOperand(i); - if (op.isRegister() && op.isUse() && + if (op.isRegister() && op.getReg() && op.isUse() && MRegisterInfo::isVirtualRegister(op.getReg())) { unsigned physReg = vrm_.getPhys(op.getReg()); handleUse(mbb, mii, op.getReg(), physReg); @@ -187,7 +187,7 @@ // uses so don't check for those here) for (unsigned i = 0, e = mii->getNumOperands(); i != e; ++i) { MachineOperand& op = mii->getOperand(i); - if (op.isRegister() && !op.isUse()) + if (op.isRegister() && op.getReg() && !op.isUse()) if (MRegisterInfo::isPhysicalRegister(op.getReg())) vacatePhysReg(mbb, mii, op.getReg()); else { From lattner at cs.uiuc.edu Wed Feb 25 17:32:00 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 17:32:00 2004 Subject: [llvm-commits] CVS: llvm/lib/Analysis/DataStructure/Local.cpp Message-ID: <200402252331.RAA14742@zion.cs.uiuc.edu> Changes in directory llvm/lib/Analysis/DataStructure: Local.cpp updated: 1.90 -> 1.91 --- Log message: When building local graphs, clone the initializer for constant globals into each local graph that uses the global. --- Diffs of the changes: (+21 -7) Index: llvm/lib/Analysis/DataStructure/Local.cpp diff -u llvm/lib/Analysis/DataStructure/Local.cpp:1.90 llvm/lib/Analysis/DataStructure/Local.cpp:1.91 --- llvm/lib/Analysis/DataStructure/Local.cpp:1.90 Wed Feb 25 17:06:40 2004 +++ llvm/lib/Analysis/DataStructure/Local.cpp Wed Feb 25 17:31:02 2004 @@ -177,6 +177,18 @@ else ++I; + // If there are any constant globals referenced in this function, merge their + // initializers into the local graph from the globals graph. + if (ScalarMap.global_begin() != ScalarMap.global_end()) { + ReachabilityCloner RC(*this, *GG, 0); + + for (DSScalarMap::global_iterator I = ScalarMap.global_begin(); + I != ScalarMap.global_end(); ++I) + if (GlobalVariable *GV = dyn_cast(*I)) + if (GV->isConstant()) + RC.merge(ScalarMap[GV], GG->ScalarMap[GV]); + } + markIncompleteNodes(DSGraph::MarkFormalArgs); // Remove any nodes made dead due to merging... @@ -894,17 +906,19 @@ const TargetData &TD = getAnalysis(); + { + GraphBuilder GGB(*GlobalsGraph); + + // Add initializers for all of the globals to the globals graph... + for (Module::giterator I = M.gbegin(), E = M.gend(); I != E; ++I) + if (!I->isExternal()) + GGB.mergeInGlobalInitializer(I); + } + // Calculate all of the graphs... for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) if (!I->isExternal()) DSInfo.insert(std::make_pair(I, new DSGraph(TD, *I, GlobalsGraph))); - - GraphBuilder GGB(*GlobalsGraph); - - // Add initializers for all of the globals to the globals graph... - for (Module::giterator I = M.gbegin(), E = M.gend(); I != E; ++I) - if (!I->isExternal()) - GGB.mergeInGlobalInitializer(I); GlobalsGraph->removeTriviallyDeadNodes(); GlobalsGraph->markIncompleteNodes(DSGraph::MarkFormalArgs); From lattner at cs.uiuc.edu Wed Feb 25 17:35:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 17:35:01 2004 Subject: [llvm-commits] CVS: llvm/test/Regression/Analysis/DSGraph/constant_globals.ll Message-ID: <200402252334.RAA15256@zion.cs.uiuc.edu> Changes in directory llvm/test/Regression/Analysis/DSGraph: constant_globals.ll added (r1.1) --- Log message: New testcase --- Diffs of the changes: (+22 -0) Index: llvm/test/Regression/Analysis/DSGraph/constant_globals.ll diff -c /dev/null llvm/test/Regression/Analysis/DSGraph/constant_globals.ll:1.1 *** /dev/null Wed Feb 25 17:34:14 2004 --- llvm/test/Regression/Analysis/DSGraph/constant_globals.ll Wed Feb 25 17:34:04 2004 *************** *** 0 **** --- 1,22 ---- + ; RUN: analyze %s -datastructure-gc -dsgc-dspass=bu -dsgc-check-flags=A:SM + ; Constant globals should not mark stuff incomplete. This should allow the + ; bu pass to resolve the indirect call immediately in "test", allowing %A to + ; be marked complete and the store to happen. + + ; This is the common case for handling vtables aggressively. + + %G = constant void (int*)* %foo + + implementation + + void %foo(int *%X) { + store int 0, int* %X + ret void + } + + void %test() { + %Fp = load void (int*)** %G + %A = alloca int + call void %Fp(int* %A) + ret void + } From lattner at cs.uiuc.edu Wed Feb 25 17:37:02 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 17:37:02 2004 Subject: [llvm-commits] CVS: llvm/lib/Analysis/DataStructure/DataStructure.cpp Message-ID: <200402252336.RAA15273@zion.cs.uiuc.edu> Changes in directory llvm/lib/Analysis/DataStructure: DataStructure.cpp updated: 1.159 -> 1.160 --- Log message: Two changes: 1. Functions do not make things incomplete, only variables 2. Constant global variables no longer need to be marked incomplete, because we are guaranteed that the initializer for the global will be in the graph we are hacking on now. This makes resolution of indirect calls happen a lot more in the bu pass, supports things like vtables and the C counterparts (giant constant arrays of function pointers), etc... Testcase here: test/Regression/Analysis/DSGraph/constant_globals.ll --- Diffs of the changes: (+4 -1) Index: llvm/lib/Analysis/DataStructure/DataStructure.cpp diff -u llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.159 llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.160 --- llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.159 Wed Feb 25 17:08:00 2004 +++ llvm/lib/Analysis/DataStructure/DataStructure.cpp Wed Feb 25 17:36:08 2004 @@ -13,6 +13,7 @@ #include "llvm/Analysis/DSGraph.h" #include "llvm/Function.h" +#include "llvm/GlobalVariable.h" #include "llvm/iOther.h" #include "llvm/DerivedTypes.h" #include "llvm/Target/TargetData.h" @@ -1353,7 +1354,9 @@ if ((Flags & DSGraph::IgnoreGlobals) == 0) for (DSScalarMap::global_iterator I = ScalarMap.global_begin(), E = ScalarMap.global_end(); I != E; ++I) - markIncompleteNode(ScalarMap[*I].getNode()); + if (GlobalVariable *GV = dyn_cast(*I)) + if (!GV->isConstant()) + markIncompleteNode(ScalarMap[GV].getNode()); } static inline void killIfUselessEdge(DSNodeHandle &Edge) { From alkis at niobe.cs.uiuc.edu Wed Feb 25 17:42:01 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 17:42:01 2004 Subject: [llvm-commits] CVS: llvm/configure Makefile.config.in Message-ID: <200402252341.i1PNfhC00936@niobe.cs.uiuc.edu> Changes in directory llvm: configure updated: 1.81 -> 1.82 Makefile.config.in updated: 1.22 -> 1.23 --- Log message: Complete the SPEC_ROOT and USE_SPEC to SPEC2000_ROOT and USE_SPEC200 rename. --- Diffs of the changes: (+13 -15) Index: llvm/configure diff -u llvm/configure:1.81 llvm/configure:1.82 --- llvm/configure:1.81 Tue Feb 24 15:43:36 2004 +++ llvm/configure Wed Feb 25 17:41:30 2004 @@ -465,7 +465,7 @@ #endif" ac_unique_file=""Makefile.config.in"" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS subdirs INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os OS LLVMGCCDIR ARCH CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT CC CFLAGS ac_ct_CC CPP ifGNUmake LEX LEXLIB LEX_OUTPUT_ROOT YACC BISON EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL DOT ETAGS ETAGSFLAGS PYTHON QMTEST HAVE_PTHREAD_MUTEX_LOCK INCLUDE_SYS_TYPES_H INCLUDE_INTTYPES_H ENDIAN HAVE_STD_EXT_HASH_MAP HAVE_GNU_EXT_HASH_MAP HAVE_GLOBAL_HASH_MAP HAVE_STD_EXT_HASH_SET HAVE_GNU_EXT_HASH_SET HAVE_GLOBAL_HASH_S! ET HAVE_STD_ITERATOR HAVE_BI_ITERATOR HAVE_FWD_ITERATOR ALLOCA MMAP_FILE ENABLE_OPTIMIZED SPEC_ROOT USE_SPEC SPEC95_ROOT USE_SPEC95 POVRAY_ROOT USE_POVRAY UPB DISABLE_LLC_DIFFS JIT LLVMCC1 LLVMCC1PLUS BCR PAPIDIR SHLIBEXT LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS subdirs INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os OS LLVMGCCDIR ARCH CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT CC CFLAGS ac_ct_CC CPP ifGNUmake LEX LEXLIB LEX_OUTPUT_ROOT YACC BISON EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL DOT ETAGS ETAGSFLAGS PYTHON QMTEST HAVE_PTHREAD_MUTEX_LOCK INCLUDE_SYS_TYPES_H INCLUDE_INTTYPES_H ENDIAN HAVE_STD_EXT_HASH_MAP HAVE_GNU_EXT_HASH_MAP HAVE_GLOBAL_HASH_MAP HAVE_STD_EXT_HASH_SET HAVE_GNU_EXT_HASH_SET HAVE_GLOBAL_HASH_S! ET HAVE_STD_ITERATOR HAVE_BI_ITERATOR HAVE_FWD_ITERATOR ALLOCA MMAP_FILE ENABLE_OPTIMIZED SPEC2000_ROOT USE_SPEC2000 SPEC95_ROOT USE_SPEC95 POVRAY_ROOT USE_POVRAY UPB DISABLE_LLC_DIFFS JIT LLVMCC1 LLVMCC1PLUS BCR PAPIDIR SHLIBEXT LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -21841,25 +21841,25 @@ then if test -d /home/vadve/shared/benchmarks/speccpu2000/benchspec then - SPEC_ROOT=/home/vadve/shared/benchmarks/speccpu2000/benchspec + SPEC2000_ROOT=/home/vadve/shared/benchmarks/speccpu2000/benchspec - USE_SPEC=USE_SPEC=1 + USE_SPEC2000=USE_SPEC2000=1 else - USE_SPEC= + USE_SPEC2000= fi else if test ${enableval} = "" then - SPEC_ROOT=/home/vadve/shared/benchmarks/speccpu2000/benchspec + SPEC2000_ROOT=/home/vadve/shared/benchmarks/speccpu2000/benchspec else - SPEC_ROOT=${enableval} + SPEC2000_ROOT=${enableval} fi - USE_SPEC=USE_SPEC=1 + USE_SPEC2000=USE_SPEC2000=1 fi @@ -22870,8 +22870,8 @@ s, at ALLOCA@,$ALLOCA,;t t s, at MMAP_FILE@,$MMAP_FILE,;t t s, at ENABLE_OPTIMIZED@,$ENABLE_OPTIMIZED,;t t -s, at SPEC_ROOT@,$SPEC_ROOT,;t t -s, at USE_SPEC@,$USE_SPEC,;t t +s, at SPEC2000_ROOT@,$SPEC2000_ROOT,;t t +s, at USE_SPEC2000@,$USE_SPEC2000,;t t s, at SPEC95_ROOT@,$SPEC95_ROOT,;t t s, at USE_SPEC95@,$USE_SPEC95,;t t s, at POVRAY_ROOT@,$POVRAY_ROOT,;t t Index: llvm/Makefile.config.in diff -u llvm/Makefile.config.in:1.22 llvm/Makefile.config.in:1.23 --- llvm/Makefile.config.in:1.22 Fri Feb 20 16:30:46 2004 +++ llvm/Makefile.config.in Wed Feb 25 17:41:32 2004 @@ -84,15 +84,13 @@ BYTECODE_REPOSITORY := @BCR@ # SPEC benchmarks: -# Set the USE_SPEC variable to enable the use of the SPEC benchmarks. +# If these are set then run the SPEC benchmarks. # You must provide the SPEC benchmarks on your own. - at USE_SPEC@ + at USE_SPEC2000@ @USE_SPEC95@ -# Path to the SPEC benchmarks. If you have the SPEC benchmarks, place the -# path here. -#SPEC_ROOT := /home/vadve/shared/benchmarks/speccpu2000/benchspec -SPEC_ROOT := @SPEC_ROOT@ +# Path to the SPEC benchmarks. +SPEC_ROOT := @SPEC2000_ROOT@ SPEC95_ROOT := @SPEC95_ROOT@ # Path to the Povray source code. From alkis at niobe.cs.uiuc.edu Wed Feb 25 17:48:01 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 17:48:01 2004 Subject: [llvm-commits] CVS: llvm/Makefile.config.in Message-ID: <200402252347.i1PNlTw08337@niobe.cs.uiuc.edu> Changes in directory llvm: Makefile.config.in updated: 1.23 -> 1.24 --- Log message: Fix typo. I wonder how this actually worked. --- Diffs of the changes: (+1 -1) Index: llvm/Makefile.config.in diff -u llvm/Makefile.config.in:1.23 llvm/Makefile.config.in:1.24 --- llvm/Makefile.config.in:1.23 Wed Feb 25 17:41:32 2004 +++ llvm/Makefile.config.in Wed Feb 25 17:47:17 2004 @@ -90,7 +90,7 @@ @USE_SPEC95@ # Path to the SPEC benchmarks. -SPEC_ROOT := @SPEC2000_ROOT@ +SPEC2000_ROOT := @SPEC2000_ROOT@ SPEC95_ROOT := @SPEC95_ROOT@ # Path to the Povray source code. From alkis at niobe.cs.uiuc.edu Wed Feb 25 18:02:01 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 18:02:01 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/CFP2000/183.equake/Makefile Message-ID: <200402260001.i1Q01VW16718@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC/CFP2000/183.equake: Makefile updated: 1.1 -> 1.2 --- Log message: Make SPEC tests share a common Makefile. --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/External/SPEC/CFP2000/183.equake/Makefile diff -u llvm/test/Programs/External/SPEC/CFP2000/183.equake/Makefile:1.1 llvm/test/Programs/External/SPEC/CFP2000/183.equake/Makefile:1.2 --- llvm/test/Programs/External/SPEC/CFP2000/183.equake/Makefile:1.1 Mon Jun 23 12:19:45 2003 +++ llvm/test/Programs/External/SPEC/CFP2000/183.equake/Makefile Wed Feb 25 18:01:21 2004 @@ -3,4 +3,4 @@ STDIN_FILENAME = inp.in STDOUT_FILENAME = inp.out CPPFLAGS = -include ../../Makefile.spec +include ../../Makefile.spec2000 From alkis at niobe.cs.uiuc.edu Wed Feb 25 18:02:34 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 18:02:34 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/Makefile.spec2000 Makefile.spec95 Makefile.spec Message-ID: <200402260001.i1Q01VR16751@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC: Makefile.spec2000 added (r1.1) Makefile.spec95 updated: 1.4 -> 1.5 Makefile.spec updated: 1.25 -> 1.26 --- Log message: Make SPEC tests share a common Makefile. --- Diffs of the changes: (+21 -195) Index: llvm/test/Programs/External/SPEC/Makefile.spec2000 diff -c /dev/null llvm/test/Programs/External/SPEC/Makefile.spec2000:1.1 *** /dev/null Wed Feb 25 18:01:31 2004 --- llvm/test/Programs/External/SPEC/Makefile.spec2000 Wed Feb 25 18:01:21 2004 *************** *** 0 **** --- 1,12 ---- + ##===- Makefile.spec2000 -----------------------------------*- Makefile -*-===## + # + # This makefile contains information for building SPEC2000 as an external test. + # + ##===----------------------------------------------------------------------===## + + include $(LEVEL)/Makefile.config + + SPEC_ROOT := $(SPEC2000_ROOT) + CPPFLAGS += -DSPEC_CPU2000 + + include $(LEVEL)/test/Programs/External/SPEC/Makefile.spec Index: llvm/test/Programs/External/SPEC/Makefile.spec95 diff -u llvm/test/Programs/External/SPEC/Makefile.spec95:1.4 llvm/test/Programs/External/SPEC/Makefile.spec95:1.5 --- llvm/test/Programs/External/SPEC/Makefile.spec95:1.4 Tue Feb 24 15:16:06 2004 +++ llvm/test/Programs/External/SPEC/Makefile.spec95 Wed Feb 25 18:01:21 2004 @@ -1,198 +1,12 @@ -##===- Makefile.spec ---------------------------------------*- Makefile -*-===## +##===- Makefile.spec95 -------------------------------------*- Makefile -*-===## # -# This makefile contains information for building SPEC as an external test. +# This makefile contains information for building SPEC95 as an external test. # ##===----------------------------------------------------------------------===## include $(LEVEL)/Makefile.config -# RUN_TYPE - Either ref, test, or train. May be specified on the command line. -ifdef LARGE_PROBLEM_SIZE -RUN_TYPE := train -else -RUN_TYPE := test -endif - -## Information the test should have provided... -ifndef STDOUT_FILENAME -STDOUT_FILENAME := standard.out -endif -ifndef LDFLAGS -LDFLAGS = -lm -endif - -# Get the current directory, the name of the benchmark, and the current -# subdirectory of the SPEC directory we are in (ie, CINT2000/164.gzip) -# -CURRENT_DIR := $(shell cd .; pwd) -BENCH_NAME := $(subst $(shell cd .. ; pwd),,$(CURRENT_DIR)) -SPEC_SUBDIR := $(subst $(shell cd ../..; pwd),,$(CURRENT_DIR)) - -# Remove any leading /'s from the paths -BENCH_NAME := $(patsubst /%,%,$(BENCH_NAME)) -SPEC_SUBDIR := $(patsubst /%,%,$(SPEC_SUBDIR)) - -SPEC_BENCH_DIR := $(SPEC95_ROOT)/$(SPEC_SUBDIR) - -PROG := $(BENCH_NAME) -ifndef Source -Source := $(wildcard $(SPEC_BENCH_DIR)/src/*.c $(SPEC_BENCH_DIR)/src/*.cc) -endif - -# Disable the default Output/%.out-* targets... -PROGRAMS_HAVE_CUSTOM_RUN_RULES := 1 -SourceDir := $(SPEC_BENCH_DIR)/src/ - -include $(LEVEL)/test/Programs/MultiSource/Makefile.multisrc - -# Do not pass -Wall to compile commands... -LCCFLAGS := -O2 -LCXXFLAGS := -O2 - -CPPFLAGS += -DSPEC_CPU2000 -I $(SPEC_BENCH_DIR)/src/ -SPEC_SANDBOX := $(LLVM_SRC_ROOT)/test/Programs/External/SPEC/Sandbox.sh - -# Information about testing the program... -REF_IN_DIR := $(SPEC_BENCH_DIR)/data/$(RUN_TYPE)/input/ -REF_OUT_DIR := $(SPEC_BENCH_DIR)/data/$(RUN_TYPE)/output/ -LOCAL_OUTPUTS := $(notdir $(wildcard $(REF_OUT_DIR)/*)) - - -# Specify how to generate output from the SPEC programs. Basically we just run -# the program in a sandbox (a special directory we create), then we cat all of -# the outputs together. - -$(PROGRAMS_TO_TEST:%=Output/%.out-nat): \ -Output/%.out-nat: Output/%.native - $(SPEC_SANDBOX) nat-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - $(RUNSAFELY) $(STDIN_FILENAME) $(STDOUT_FILENAME) \ - ../../$< $(RUN_OPTIONS) - -(cd Output/nat-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > $@ - -cp Output/nat-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time - -$(PROGRAMS_TO_TEST:%=Output/%.out-lli): \ -Output/%.out-lli: Output/%.llvm.bc $(LLI) - $(SPEC_SANDBOX) lli-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - $(RUNSAFELY) $(STDIN_FILENAME) $(STDOUT_FILENAME) \ - $(LLI) $(LLI_OPTS) ../../$< $(RUN_OPTIONS) - -(cd Output/lli-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > $@ - -cp Output/lli-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time - -$(PROGRAMS_TO_TEST:%=Output/%.out-jit): \ -Output/%.out-jit: Output/%.llvm.bc $(LLI) - $(SPEC_SANDBOX) jit-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - $(RUNSAFELY) $(STDIN_FILENAME) $(STDOUT_FILENAME) \ - $(LLI) $(JIT_OPTS) ../../$< $(RUN_OPTIONS) - -(cd Output/jit-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > $@ - -cp Output/jit-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time - -$(PROGRAMS_TO_TEST:%=Output/%.out-jit-ls): \ -Output/%.out-jit-ls: Output/%.llvm.bc $(LLI) - $(SPEC_SANDBOX) jit-ls-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - $(RUNSAFELY) $(STDIN_FILENAME) $(STDOUT_FILENAME) \ - $(LLI) -regalloc=linearscan $(JIT_OPTS) ../../$< $(RUN_OPTIONS) - -(cd Output/jit-ls-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > $@ - -cp Output/jit-ls-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time - -$(PROGRAMS_TO_TEST:%=Output/%.out-llc): \ -Output/%.out-llc: Output/%.llc - $(SPEC_SANDBOX) llc-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - $(RUNSAFELY) $(STDIN_FILENAME) $(STDOUT_FILENAME) \ - ../../$< $(RUN_OPTIONS) - -(cd Output/llc-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > $@ - -cp Output/llc-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time - -$(PROGRAMS_TO_TEST:%=Output/%.out-llc-ls): \ -Output/%.out-llc-ls: Output/%.llc-ls - $(SPEC_SANDBOX) llc-ls-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - $(RUNSAFELY) $(STDIN_FILENAME) $(STDOUT_FILENAME) \ - ../../$< $(RUN_OPTIONS) - -(cd Output/llc-ls-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > $@ - -cp Output/llc-ls-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time - -$(PROGRAMS_TO_TEST:%=Output/%.out-cbe): \ -Output/%.out-cbe: Output/%.cbe - $(SPEC_SANDBOX) cbe-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - $(RUNSAFELY) $(STDIN_FILENAME) $(STDOUT_FILENAME) \ - ../../$< $(RUN_OPTIONS) - -(cd Output/cbe-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > $@ - -cp Output/cbe-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time - -$(PROGRAMS_TO_TEST:%=Output/%.trace-out-llc): \ -Output/%.trace-out-llc: Output/%.trace.llc - $(SPEC_SANDBOX) llc-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - $(RUNSAFELY) $(STDIN_FILENAME) $(STDOUT_FILENAME) \ - ../../$< $(RUN_OPTIONS) - -(cd Output/llc-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > $@ - -cp Output/llc-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time - -$(PROGRAMS_TO_TEST:%=Output/%.trace-out-cbe): \ -Output/%.trace-out-cbe: Output/%.trace.cbe - $(SPEC_SANDBOX) cbe-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - $(RUNSAFELY) $(STDIN_FILENAME) $(STDOUT_FILENAME) \ - ../../$< $(RUN_OPTIONS) - -(cd Output/cbe-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > $@ - -cp Output/cbe-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time - - -# Specify stdin, reference output, and command line options for the program... -BUGPOINT_OPTIONS += -input=$(STDIN_FILENAME) -output=../$*.out-nat -BUGPOINT_OPTIONS += --args -- $(RUN_OPTIONS) - -# Rules to bugpoint the GCCAS, GCCLD, LLC, or LLI commands... -$(PROGRAMS_TO_TEST:%=Output/%.bugpoint-gccas): \ -Output/%.bugpoint-gccas: Output/%.noopt-llvm.bc $(LBUGPOINT) \ - Output/gccas-pass-args Output/%.out-nat - $(SPEC_SANDBOX) bugpoint-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - $(LBUGPOINT) ../../$< `cat Output/gccas-pass-args` $(BUGPOINT_OPTIONS) - @echo "===> Leaving Output/bugpoint-$(RUN_TYPE)" - -$(PROGRAMS_TO_TEST:%=Output/%.bugpoint-gccld): \ -Output/%.bugpoint-gccld: Output/%.noopt-llvm.bc $(LBUGPOINT) \ - Output/gccld-pass-args Output/%.out-nat - $(SPEC_SANDBOX) bugpoint-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - $(LBUGPOINT) ../../$< `cat Output/gccld-pass-args` $(BUGPOINT_OPTIONS) - @echo "===> Leaving Output/bugpoint-$(RUN_TYPE)" - -$(PROGRAMS_TO_TEST:%=Output/%.bugpoint-llc): \ -Output/%.bugpoint-llc: Output/%.llvm.bc $(LBUGPOINT) Output/%.out-nat - $(SPEC_SANDBOX) bugpoint-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - $(LBUGPOINT) ../../$< -run-llc $(BUGPOINT_OPTIONS) - @echo "===> Leaving Output/bugpoint-$(RUN_TYPE)" - -$(PROGRAMS_TO_TEST:%=Output/%.bugpoint-jit): \ -Output/%.bugpoint-jit: Output/%.llvm.bc $(LBUGPOINT) Output/%.out-nat - $(SPEC_SANDBOX) bugpoint-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - $(LBUGPOINT) ../../$< -run-jit $(BUGPOINT_OPTIONS) - @echo "===> Leaving Output/bugpoint-$(RUN_TYPE)" - - -LIBPROFILESO = $(LEVEL)/lib/Debug/libprofile_rt.so - -$(PROGRAMS_TO_TEST:%=Output/%.prof): \ -Output/%.prof: Output/%.llvm-prof.bc Output/%.out-nat $(LIBPROFILESO) - @rm -f $@ - $(SPEC_SANDBOX) profile-$(RUN_TYPE) Output/$*.out-prof $(REF_IN_DIR) \ - $(RUNSAFELY) $(STDIN_FILENAME) $(STDOUT_FILENAME) $(LLI) $(JIT_OPTS)\ - -fake-argv0 '../$*.llvm.bc' -load ../../$(LIBPROFILESO) ../../$< -llvmprof-output ../../$@ $(RUN_OPTIONS) - -(cd Output/profile-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > Output/$*.out-prof - -cp Output/profile-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time - @cmp -s Output/$*.out-prof Output/$*.out-nat || \ - printf "***\n***\n*** WARNING: Output of profiled program (Output/$*.out-prof)\n*** doesn't match the output of the native program (Output/$*.out-nat)!\n***\n***\n"; - - - - - -$(PROGRAMS_TO_TEST:%=Output/%.out-tracing): \ -Output/%.out-tracing: Output/%.trace - $(SPEC_SANDBOX) trace-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - $(RUNSAFELY) $(STDIN_FILENAME) $(STDOUT_FILENAME) \ - ../../$< $(RUN_OPTIONS) - -(cd Output/trace-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > $@ - -cp Output/trace-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time - -$(PROGRAMS_TO_TEST:%=Output/%.performance): \ -Output/%.performance: Output/%.out-llc Output/%.out-tracing - -$(TIMESCRIPT) $* Output/$*.out-llc.time Output/$*.out-tracing.time $@ +SPEC_ROOT := $(SPEC95_ROOT) +CPPFLAGS += -DSPEC_CPU95 +include $(LEVEL)/test/Programs/External/SPEC/Makefile.spec Index: llvm/test/Programs/External/SPEC/Makefile.spec diff -u llvm/test/Programs/External/SPEC/Makefile.spec:1.25 llvm/test/Programs/External/SPEC/Makefile.spec:1.26 --- llvm/test/Programs/External/SPEC/Makefile.spec:1.25 Wed Feb 25 17:19:24 2004 +++ llvm/test/Programs/External/SPEC/Makefile.spec Wed Feb 25 18:01:21 2004 @@ -1,6 +1,7 @@ ##===- Makefile.spec ---------------------------------------*- Makefile -*-===## # -# This makefile contains information for building SPEC as an external test. +# This makefile is a template for building SPEC as an external +# test. It is included by Makefile.spec2000 and Makefile.spec95. # ##===----------------------------------------------------------------------===## @@ -32,7 +33,7 @@ BENCH_NAME := $(patsubst /%,%,$(BENCH_NAME)) SPEC_SUBDIR := $(patsubst /%,%,$(SPEC_SUBDIR)) -SPEC_BENCH_DIR := $(SPEC2000_ROOT)/$(SPEC_SUBDIR) +SPEC_BENCH_DIR := $(SPEC_ROOT)/$(SPEC_SUBDIR) PROG := $(BENCH_NAME) ifndef Source @@ -49,7 +50,7 @@ LCCFLAGS := -O3 LCXXFLAGS := -O3 -CPPFLAGS += -DSPEC_CPU2000 -I $(SPEC_BENCH_DIR)/src/ +CPPFLAGS += -I $(SPEC_BENCH_DIR)/src/ SPEC_SANDBOX := $(LLVM_SRC_ROOT)/test/Programs/External/SPEC/Sandbox.sh # Information about testing the program... @@ -195,4 +196,3 @@ $(PROGRAMS_TO_TEST:%=Output/%.performance): \ Output/%.performance: Output/%.out-llc Output/%.out-tracing -$(TIMESCRIPT) $* Output/$*.out-llc.time Output/$*.out-tracing.time $@ - From alkis at niobe.cs.uiuc.edu Wed Feb 25 18:03:08 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 18:03:08 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/CFP2000/177.mesa/Makefile Message-ID: <200402260001.i1Q01Vm16734@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC/CFP2000/177.mesa: Makefile updated: 1.2 -> 1.3 --- Log message: Make SPEC tests share a common Makefile. --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/External/SPEC/CFP2000/177.mesa/Makefile diff -u llvm/test/Programs/External/SPEC/CFP2000/177.mesa/Makefile:1.2 llvm/test/Programs/External/SPEC/CFP2000/177.mesa/Makefile:1.3 --- llvm/test/Programs/External/SPEC/CFP2000/177.mesa/Makefile:1.2 Tue Sep 30 12:29:18 2003 +++ llvm/test/Programs/External/SPEC/CFP2000/177.mesa/Makefile Wed Feb 25 18:01:21 2004 @@ -20,4 +20,4 @@ texstate.c texture.c triangle.c varray.c vb.c vbfill.c vbrender.c \ vbxform.c winpos.c xform.c mesa4.c) -include ../../Makefile.spec +include ../../Makefile.spec2000 From alkis at niobe.cs.uiuc.edu Wed Feb 25 18:03:41 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 18:03:41 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/CINT2000/175.vpr/Makefile Message-ID: <200402260001.i1Q01Vp16697@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC/CINT2000/175.vpr: Makefile updated: 1.2 -> 1.3 --- Log message: Make SPEC tests share a common Makefile. --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/External/SPEC/CINT2000/175.vpr/Makefile diff -u llvm/test/Programs/External/SPEC/CINT2000/175.vpr/Makefile:1.2 llvm/test/Programs/External/SPEC/CINT2000/175.vpr/Makefile:1.3 --- llvm/test/Programs/External/SPEC/CINT2000/175.vpr/Makefile:1.2 Fri Jun 20 18:02:13 2003 +++ llvm/test/Programs/External/SPEC/CINT2000/175.vpr/Makefile Wed Feb 25 18:01:20 2004 @@ -3,4 +3,4 @@ RUN_OPTIONS = net.in arch.in place.out dum.out -nodisp -place_only -init_t 5 -exit_t 0.005 -alpha_t 0.9412 -inner_num 2 STDOUT_FILENAME := place_log.out CPPFLAGS := -DNO_GRAPHICS -include ../../Makefile.spec +include ../../Makefile.spec2000 From alkis at niobe.cs.uiuc.edu Wed Feb 25 18:04:14 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 18:04:14 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/CFP2000/188.ammp/Makefile Message-ID: <200402260001.i1Q01VZ16717@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC/CFP2000/188.ammp: Makefile updated: 1.1 -> 1.2 --- Log message: Make SPEC tests share a common Makefile. --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/External/SPEC/CFP2000/188.ammp/Makefile diff -u llvm/test/Programs/External/SPEC/CFP2000/188.ammp/Makefile:1.1 llvm/test/Programs/External/SPEC/CFP2000/188.ammp/Makefile:1.2 --- llvm/test/Programs/External/SPEC/CFP2000/188.ammp/Makefile:1.1 Mon Jun 23 13:17:18 2003 +++ llvm/test/Programs/External/SPEC/CFP2000/188.ammp/Makefile Wed Feb 25 18:01:21 2004 @@ -3,4 +3,4 @@ STDIN_FILENAME = ammp.in STDOUT_FILENAME = ammp.out CPPFLAGS = -include ../../Makefile.spec +include ../../Makefile.spec2000 From alkis at niobe.cs.uiuc.edu Wed Feb 25 18:04:48 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 18:04:48 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/CFP2000/179.art/Makefile Message-ID: <200402260001.i1Q01Vj16730@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC/CFP2000/179.art: Makefile updated: 1.1 -> 1.2 --- Log message: Make SPEC tests share a common Makefile. --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/External/SPEC/CFP2000/179.art/Makefile diff -u llvm/test/Programs/External/SPEC/CFP2000/179.art/Makefile:1.1 llvm/test/Programs/External/SPEC/CFP2000/179.art/Makefile:1.2 --- llvm/test/Programs/External/SPEC/CFP2000/179.art/Makefile:1.1 Mon Jun 23 12:15:18 2003 +++ llvm/test/Programs/External/SPEC/CFP2000/179.art/Makefile Wed Feb 25 18:01:21 2004 @@ -8,4 +8,4 @@ STDOUT_FILENAME = $(RUN_TYPE).out CPPFLAGS = -include ../../Makefile.spec +include ../../Makefile.spec2000 From alkis at niobe.cs.uiuc.edu Wed Feb 25 18:05:22 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 18:05:22 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/CINT2000/181.mcf/Makefile Message-ID: <200402260001.i1Q01V416683@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC/CINT2000/181.mcf: Makefile updated: 1.1 -> 1.2 --- Log message: Make SPEC tests share a common Makefile. --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/External/SPEC/CINT2000/181.mcf/Makefile diff -u llvm/test/Programs/External/SPEC/CINT2000/181.mcf/Makefile:1.1 llvm/test/Programs/External/SPEC/CINT2000/181.mcf/Makefile:1.2 --- llvm/test/Programs/External/SPEC/CINT2000/181.mcf/Makefile:1.1 Wed May 14 18:20:17 2003 +++ llvm/test/Programs/External/SPEC/CINT2000/181.mcf/Makefile Wed Feb 25 18:01:20 2004 @@ -1,4 +1,4 @@ LEVEL = ../../../../../.. RUN_OPTIONS := inp.in STDOUT_FILENAME := inp.out -include ../../Makefile.spec +include ../../Makefile.spec2000 From alkis at niobe.cs.uiuc.edu Wed Feb 25 18:05:56 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 18:05:56 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/CINT2000/164.gzip/Makefile Message-ID: <200402260001.i1Q01VB16701@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC/CINT2000/164.gzip: Makefile updated: 1.1 -> 1.2 --- Log message: Make SPEC tests share a common Makefile. --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/External/SPEC/CINT2000/164.gzip/Makefile diff -u llvm/test/Programs/External/SPEC/CINT2000/164.gzip/Makefile:1.1 llvm/test/Programs/External/SPEC/CINT2000/164.gzip/Makefile:1.2 --- llvm/test/Programs/External/SPEC/CINT2000/164.gzip/Makefile:1.1 Wed May 14 18:27:46 2003 +++ llvm/test/Programs/External/SPEC/CINT2000/164.gzip/Makefile Wed Feb 25 18:01:20 2004 @@ -1,4 +1,4 @@ LEVEL = ../../../../../.. RUN_OPTIONS = `cat $(REF_IN_DIR)control` STDOUT_FILENAME := input.compressed.out -include ../../Makefile.spec +include ../../Makefile.spec2000 From alkis at niobe.cs.uiuc.edu Wed Feb 25 18:06:30 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 18:06:30 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/CINT2000/252.eon/Makefile Message-ID: <200402260001.i1Q01U016660@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC/CINT2000/252.eon: Makefile updated: 1.6 -> 1.7 --- Log message: Make SPEC tests share a common Makefile. --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/External/SPEC/CINT2000/252.eon/Makefile diff -u llvm/test/Programs/External/SPEC/CINT2000/252.eon/Makefile:1.6 llvm/test/Programs/External/SPEC/CINT2000/252.eon/Makefile:1.7 --- llvm/test/Programs/External/SPEC/CINT2000/252.eon/Makefile:1.6 Tue Jan 27 16:07:21 2004 +++ llvm/test/Programs/External/SPEC/CINT2000/252.eon/Makefile Wed Feb 25 18:01:20 2004 @@ -49,7 +49,7 @@ mrInstance.cc mrMaterial.cc mrPhongAreaTriangleLuminaire.cc \ mrSolidTexture.cc mrSphere.cc mrSurface.cc mrSurfaceTexture.cc \ mrXYRectangle.cc mrXZRectangle.cc mrYZRectangle.cc myrand.cc) -include ../../Makefile.spec +include ../../Makefile.spec2000 LDFLAGS = -lstdc++ -lm LIBS = -lstdc++ -lm From alkis at niobe.cs.uiuc.edu Wed Feb 25 18:07:04 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 18:07:04 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/CINT2000/197.parser/Makefile Message-ID: <200402260001.i1Q01Um16667@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC/CINT2000/197.parser: Makefile updated: 1.2 -> 1.3 --- Log message: Make SPEC tests share a common Makefile. --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/External/SPEC/CINT2000/197.parser/Makefile diff -u llvm/test/Programs/External/SPEC/CINT2000/197.parser/Makefile:1.2 llvm/test/Programs/External/SPEC/CINT2000/197.parser/Makefile:1.3 --- llvm/test/Programs/External/SPEC/CINT2000/197.parser/Makefile:1.2 Sat May 31 18:17:26 2003 +++ llvm/test/Programs/External/SPEC/CINT2000/197.parser/Makefile Wed Feb 25 18:01:20 2004 @@ -3,4 +3,4 @@ STDIN_FILENAME = $(RUN_TYPE).in STDOUT_FILENAME = $(RUN_TYPE).out CPPFLAGS = -include ../../Makefile.spec +include ../../Makefile.spec2000 From alkis at niobe.cs.uiuc.edu Wed Feb 25 18:07:39 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 18:07:39 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/CINT2000/176.gcc/Makefile Message-ID: <200402260001.i1Q01Vp16691@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC/CINT2000/176.gcc: Makefile updated: 1.3 -> 1.4 --- Log message: Make SPEC tests share a common Makefile. --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/External/SPEC/CINT2000/176.gcc/Makefile diff -u llvm/test/Programs/External/SPEC/CINT2000/176.gcc/Makefile:1.3 llvm/test/Programs/External/SPEC/CINT2000/176.gcc/Makefile:1.4 --- llvm/test/Programs/External/SPEC/CINT2000/176.gcc/Makefile:1.3 Fri Jul 4 06:20:19 2003 +++ llvm/test/Programs/External/SPEC/CINT2000/176.gcc/Makefile Wed Feb 25 18:01:20 2004 @@ -1,7 +1,7 @@ LEVEL = ../../../../../.. RUN_OPTIONS = cccp.i -o cccp.s STDOUT_FILENAME = cccp.out -include ../../Makefile.spec +include ../../Makefile.spec2000 ifeq ($(ARCH),Sparc) ## SPEC portability note for GCC says to use these flags and cross fingers: CPPFLAGS += -DHOST_WORDS_BIG_ENDIAN -DSPEC_CPU2000_LP64 From alkis at niobe.cs.uiuc.edu Wed Feb 25 18:08:14 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 18:08:14 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/CINT2000/186.crafty/Makefile Message-ID: <200402260001.i1Q01Uh16672@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC/CINT2000/186.crafty: Makefile updated: 1.4 -> 1.5 --- Log message: Make SPEC tests share a common Makefile. --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/External/SPEC/CINT2000/186.crafty/Makefile diff -u llvm/test/Programs/External/SPEC/CINT2000/186.crafty/Makefile:1.4 llvm/test/Programs/External/SPEC/CINT2000/186.crafty/Makefile:1.5 --- llvm/test/Programs/External/SPEC/CINT2000/186.crafty/Makefile:1.4 Fri Jun 20 14:00:11 2003 +++ llvm/test/Programs/External/SPEC/CINT2000/186.crafty/Makefile Wed Feb 25 18:01:20 2004 @@ -5,4 +5,4 @@ CPPFLAGS = -DSPEC_CPU2000 -DLINUX_i386 Source = $(addprefix $(SPEC_BENCH_DIR)/src/, attacks.c draw.c enprise.c init.c iterate.c make.c nexte.c output.c preeval.c resign.c searchr.c swap.c utility.c boolean.c drawn.c evaluate.c input.c lookup.c movgen.c nextr.c phase.c quiesce.c root.c setboard.c time.c validate.c edit.c history.c interupt.c main.c next.c option.c ponder.c repeat.c search.c store.c unmake.c valid.c) -include ../../Makefile.spec +include ../../Makefile.spec2000 From alkis at niobe.cs.uiuc.edu Wed Feb 25 18:08:50 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 18:08:50 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/CINT2000/254.gap/Makefile Message-ID: <200402260001.i1Q01UB16641@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC/CINT2000/254.gap: Makefile updated: 1.3 -> 1.4 --- Log message: Make SPEC tests share a common Makefile. --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/External/SPEC/CINT2000/254.gap/Makefile diff -u llvm/test/Programs/External/SPEC/CINT2000/254.gap/Makefile:1.3 llvm/test/Programs/External/SPEC/CINT2000/254.gap/Makefile:1.4 --- llvm/test/Programs/External/SPEC/CINT2000/254.gap/Makefile:1.3 Tue Jul 29 17:40:03 2003 +++ llvm/test/Programs/External/SPEC/CINT2000/254.gap/Makefile Wed Feb 25 18:01:20 2004 @@ -3,7 +3,7 @@ STDOUT_FILENAME = $(RUN_TYPE).out STDIN_FILENAME = $(RUN_TYPE).in CPPFLAGS = -DSYS_IS_USG -DSYS_HAS_CALLOC_PROTO -DSYS_HAS_IOCTL_PROTO -DSYS_HAS_TIME_PROTO -include ../../Makefile.spec +include ../../Makefile.spec2000 ifeq ($(ARCH),Sparc) CPPFLAGS+= -DSPEC_CPU2000_LP64 endif From alkis at niobe.cs.uiuc.edu Wed Feb 25 18:09:25 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 18:09:25 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/CINT2000/255.vortex/Makefile Message-ID: <200402260001.i1Q01UA16634@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC/CINT2000/255.vortex: Makefile updated: 1.5 -> 1.6 --- Log message: Make SPEC tests share a common Makefile. --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/External/SPEC/CINT2000/255.vortex/Makefile diff -u llvm/test/Programs/External/SPEC/CINT2000/255.vortex/Makefile:1.5 llvm/test/Programs/External/SPEC/CINT2000/255.vortex/Makefile:1.6 --- llvm/test/Programs/External/SPEC/CINT2000/255.vortex/Makefile:1.5 Wed Jul 30 10:55:36 2003 +++ llvm/test/Programs/External/SPEC/CINT2000/255.vortex/Makefile Wed Feb 25 18:01:20 2004 @@ -1,7 +1,7 @@ LEVEL = ../../../../../.. #STDOUT_FILENAME := input.random.out -include ../../Makefile.spec +include ../../Makefile.spec2000 ifeq ($(ARCH),Sparc) ## SPEC portability note for vortex says to use this flag on 64-bit machines From alkis at niobe.cs.uiuc.edu Wed Feb 25 18:10:00 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 18:10:00 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/CINT2000/253.perlbmk/Makefile Message-ID: <200402260001.i1Q01U216650@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC/CINT2000/253.perlbmk: Makefile updated: 1.4 -> 1.5 --- Log message: Make SPEC tests share a common Makefile. --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/External/SPEC/CINT2000/253.perlbmk/Makefile diff -u llvm/test/Programs/External/SPEC/CINT2000/253.perlbmk/Makefile:1.4 llvm/test/Programs/External/SPEC/CINT2000/253.perlbmk/Makefile:1.5 --- llvm/test/Programs/External/SPEC/CINT2000/253.perlbmk/Makefile:1.4 Sun Feb 8 16:23:10 2004 +++ llvm/test/Programs/External/SPEC/CINT2000/253.perlbmk/Makefile Wed Feb 25 18:01:20 2004 @@ -8,4 +8,4 @@ CPPFLAGS += -D__LITTLE_ENDIAN__ endif -include ../../Makefile.spec +include ../../Makefile.spec2000 From alkis at niobe.cs.uiuc.edu Wed Feb 25 18:10:36 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 18:10:36 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/CINT2000/256.bzip2/Makefile Message-ID: <200402260001.i1Q01UO16625@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC/CINT2000/256.bzip2: Makefile updated: 1.1 -> 1.2 --- Log message: Make SPEC tests share a common Makefile. --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/External/SPEC/CINT2000/256.bzip2/Makefile diff -u llvm/test/Programs/External/SPEC/CINT2000/256.bzip2/Makefile:1.1 llvm/test/Programs/External/SPEC/CINT2000/256.bzip2/Makefile:1.2 --- llvm/test/Programs/External/SPEC/CINT2000/256.bzip2/Makefile:1.1 Thu May 15 13:11:06 2003 +++ llvm/test/Programs/External/SPEC/CINT2000/256.bzip2/Makefile Wed Feb 25 18:01:20 2004 @@ -1,4 +1,4 @@ LEVEL = ../../../../../.. RUN_OPTIONS = `cat $(REF_IN_DIR)control` STDOUT_FILENAME := input.random.out -include ../../Makefile.spec +include ../../Makefile.spec2000 From alkis at niobe.cs.uiuc.edu Wed Feb 25 18:11:12 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 18:11:12 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/CINT2000/300.twolf/Makefile Message-ID: <200402260001.i1Q01Ub16619@niobe.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC/CINT2000/300.twolf: Makefile updated: 1.3 -> 1.4 --- Log message: Make SPEC tests share a common Makefile. --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/External/SPEC/CINT2000/300.twolf/Makefile diff -u llvm/test/Programs/External/SPEC/CINT2000/300.twolf/Makefile:1.3 llvm/test/Programs/External/SPEC/CINT2000/300.twolf/Makefile:1.4 --- llvm/test/Programs/External/SPEC/CINT2000/300.twolf/Makefile:1.3 Mon Sep 29 16:09:16 2003 +++ llvm/test/Programs/External/SPEC/CINT2000/300.twolf/Makefile Wed Feb 25 18:01:18 2004 @@ -2,5 +2,5 @@ LDFLAGS = -lm RUN_OPTIONS = $(RUN_TYPE) STDOUT_FILENAME = $(RUN_TYPE).net.stdout -include ../../Makefile.spec +include ../../Makefile.spec2000 From gaeke at cs.uiuc.edu Wed Feb 25 18:12:13 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 18:12:13 2004 Subject: [llvm-commits] CVS: llvm/docs/ReleaseNotes.html Message-ID: <200402260008.SAA16811@zion.cs.uiuc.edu> Changes in directory llvm/docs: ReleaseNotes.html updated: 1.134 -> 1.135 --- Log message: One B00g fixed. --- Diffs of the changes: (+2 -1) Index: llvm/docs/ReleaseNotes.html diff -u llvm/docs/ReleaseNotes.html:1.134 llvm/docs/ReleaseNotes.html:1.135 --- llvm/docs/ReleaseNotes.html:1.134 Wed Feb 25 10:36:51 2004 +++ llvm/docs/ReleaseNotes.html Wed Feb 25 18:08:25 2004 @@ -199,6 +199,7 @@
  • [loopsimplify] Loopsimplify incorrectly updates dominator information
  • [pruneeh] -pruneeh pass removes invoke instructions it shouldn't
  • [sparc] Boolean constants are emitted as true and false
  • +
  • [interpreter] va_list values silently corrupted by function calls
  • Tablegen aborts on errors
  • [inliner] Error inlining intrinsic calls into invoke instructions
  • Linking weak and strong global variables is dependent on link order
  • @@ -606,7 +607,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /> The LLVM Compiler Infrastructure
    - Last modified: $Date: 2004/02/25 16:36:51 $ + Last modified: $Date: 2004/02/26 00:08:25 $ From gaeke at cs.uiuc.edu Wed Feb 25 18:12:48 2004 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Feb 25 18:12:48 2004 Subject: [llvm-commits] CVS: llvm-www/releases/1.1/docs/ReleaseNotes.html Message-ID: <200402260007.SAA16693@zion.cs.uiuc.edu> Changes in directory llvm-www/releases/1.1/docs: ReleaseNotes.html updated: 1.28 -> 1.29 --- Log message: One Boog found. --- Diffs of the changes: (+2 -1) Index: llvm-www/releases/1.1/docs/ReleaseNotes.html diff -u llvm-www/releases/1.1/docs/ReleaseNotes.html:1.28 llvm-www/releases/1.1/docs/ReleaseNotes.html:1.29 --- llvm-www/releases/1.1/docs/ReleaseNotes.html:1.28 Sun Feb 22 21:36:48 2004 +++ llvm-www/releases/1.1/docs/ReleaseNotes.html Wed Feb 25 18:06:51 2004 @@ -391,6 +391,7 @@
  • make tools-only doesn't make lib/Support
  • [loopsimplify] Loopsimplify incorrectly updates dominator information
  • [pruneeh] -pruneeh pass removes invoke instructions it shouldn't
  • +
  • [interpreter] va_list values silently corrupted by function calls
  • [inliner] Error inlining intrinsic calls into invoke instructions
  • Linking weak and strong global variables is dependent on link order
  • [X86] Missing cast from ULong -> Double, cast FP -> bool and support for -9223372036854775808
  • @@ -753,7 +754,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /> The LLVM Compiler Infrastructure
    - Last modified: $Date: 2004/02/23 03:36:48 $ + Last modified: $Date: 2004/02/26 00:06:51 $ From lattner at cs.uiuc.edu Wed Feb 25 19:21:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 19:21:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/InstSelectSimple.cpp Message-ID: <200402260120.TAA18140@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: InstSelectSimple.cpp updated: 1.178 -> 1.179 --- Log message: Fix some warnings, some of which were spurious, and some of which were real bugs. Thanks Brian! --- Diffs of the changes: (+6 -6) Index: llvm/lib/Target/X86/InstSelectSimple.cpp diff -u llvm/lib/Target/X86/InstSelectSimple.cpp:1.178 llvm/lib/Target/X86/InstSelectSimple.cpp:1.179 --- llvm/lib/Target/X86/InstSelectSimple.cpp:1.178 Wed Feb 25 01:00:55 2004 +++ llvm/lib/Target/X86/InstSelectSimple.cpp Wed Feb 25 19:20:02 2004 @@ -1293,7 +1293,6 @@ } // Turn the byte code into # iterations - unsigned ByteReg; unsigned CountReg; unsigned Opcode; switch (Align & 3) { @@ -1302,6 +1301,7 @@ CountReg = getReg(ConstantUInt::get(Type::UIntTy, I->getRawValue()/2)); } else { CountReg = makeAnotherReg(Type::IntTy); + unsigned ByteReg = getReg(CI.getOperand(3)); BuildMI(BB, X86::SHRri32, 2, CountReg).addReg(ByteReg).addZImm(1); } Opcode = X86::REP_MOVSW; @@ -1311,12 +1311,12 @@ CountReg = getReg(ConstantUInt::get(Type::UIntTy, I->getRawValue()/4)); } else { CountReg = makeAnotherReg(Type::IntTy); + unsigned ByteReg = getReg(CI.getOperand(3)); BuildMI(BB, X86::SHRri32, 2, CountReg).addReg(ByteReg).addZImm(2); } Opcode = X86::REP_MOVSD; break; - case 1: // BYTE aligned - case 3: // BYTE aligned + default: // BYTE aligned CountReg = getReg(CI.getOperand(3)); Opcode = X86::REP_MOVSB; break; @@ -1341,7 +1341,6 @@ } // Turn the byte code into # iterations - unsigned ByteReg; unsigned CountReg; unsigned Opcode; if (ConstantInt *ValC = dyn_cast(CI.getOperand(2))) { @@ -1354,6 +1353,7 @@ CountReg =getReg(ConstantUInt::get(Type::UIntTy, I->getRawValue()/2)); } else { CountReg = makeAnotherReg(Type::IntTy); + unsigned ByteReg = getReg(CI.getOperand(3)); BuildMI(BB, X86::SHRri32, 2, CountReg).addReg(ByteReg).addZImm(1); } BuildMI(BB, X86::MOVri16, 1, X86::AX).addZImm((Val << 8) | Val); @@ -1364,14 +1364,14 @@ CountReg =getReg(ConstantUInt::get(Type::UIntTy, I->getRawValue()/4)); } else { CountReg = makeAnotherReg(Type::IntTy); + unsigned ByteReg = getReg(CI.getOperand(3)); BuildMI(BB, X86::SHRri32, 2, CountReg).addReg(ByteReg).addZImm(2); } Val = (Val << 8) | Val; BuildMI(BB, X86::MOVri32, 1, X86::EAX).addZImm((Val << 16) | Val); Opcode = X86::REP_STOSD; break; - case 1: // BYTE aligned - case 3: // BYTE aligned + default: // BYTE aligned CountReg = getReg(CI.getOperand(3)); BuildMI(BB, X86::MOVri8, 1, X86::AL).addZImm(Val); Opcode = X86::REP_STOSB; From alkis at cs.uiuc.edu Wed Feb 25 21:22:01 2004 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 21:22:01 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/C/ Message-ID: <200402260321.VAA27892@zion.cs.uiuc.edu> Changes in directory llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/C: --- Log message: Directory /home/vadve/shared/PublicCVS/llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/C added to the repository --- Diffs of the changes: (+0 -0) From alkis at cs.uiuc.edu Wed Feb 25 21:22:35 2004 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 21:22:35 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/C++/ Message-ID: <200402260321.VAA27891@zion.cs.uiuc.edu> Changes in directory llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/C++: --- Log message: Directory /home/vadve/shared/PublicCVS/llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/C++ added to the repository --- Diffs of the changes: (+0 -0) From alkis at cs.uiuc.edu Wed Feb 25 21:33:01 2004 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 21:33:01 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/C/Makefile Message-ID: <200402260332.VAA28318@zion.cs.uiuc.edu> Changes in directory llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/C: Makefile added (r1.1) --- Log message: Split SetjmpLongjmp tests in C and C++ subdirectories --- Diffs of the changes: (+5 -0) Index: llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/C/Makefile diff -c /dev/null llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/C/Makefile:1.1 *** /dev/null Wed Feb 25 21:32:43 2004 --- llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/C/Makefile Wed Feb 25 21:32:33 2004 *************** *** 0 **** --- 1,5 ---- + # Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile + LEVEL = ../../../../../.. + include $(LEVEL)/test/Programs/SingleSource/Makefile.singlesrc + + From alkis at cs.uiuc.edu Wed Feb 25 21:33:35 2004 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 21:33:35 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile C++Catch.cpp FarJump.c Looping.c MultipleSetjmp.c SimpleC++Test.cpp SimpleCTest.c WhileLoop.c Message-ID: <200402260332.VAA28313@zion.cs.uiuc.edu> Changes in directory llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp: Makefile updated: 1.5 -> 1.6 C++Catch.cpp (r1.1) removed FarJump.c (r1.1) removed Looping.c (r1.2) removed MultipleSetjmp.c (r1.1) removed SimpleC++Test.cpp (r1.1) removed SimpleCTest.c (r1.1) removed WhileLoop.c (r1.1) removed --- Log message: Split SetjmpLongjmp tests in C and C++ subdirectories --- Diffs of the changes: (+2 -2) Index: llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile diff -u llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile:1.5 llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile:1.6 --- llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile:1.5 Fri Feb 13 00:20:58 2004 +++ llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile Wed Feb 25 21:32:32 2004 @@ -1,7 +1,7 @@ # Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile + +DIRS = C C++ LEVEL = ../../../../.. -REQUIRES_EH_SUPPORT = 1 -LIBS = -lstdc++ include $(LEVEL)/test/Programs/SingleSource/Makefile.singlesrc From alkis at cs.uiuc.edu Wed Feb 25 21:34:09 2004 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 21:34:09 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/C++/Makefile Message-ID: <200402260332.VAA28327@zion.cs.uiuc.edu> Changes in directory llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/C++: Makefile added (r1.1) --- Log message: Split SetjmpLongjmp tests in C and C++ subdirectories --- Diffs of the changes: (+7 -0) Index: llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/C++/Makefile diff -c /dev/null llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/C++/Makefile:1.1 *** /dev/null Wed Feb 25 21:32:43 2004 --- llvm/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/C++/Makefile Wed Feb 25 21:32:33 2004 *************** *** 0 **** --- 1,7 ---- + # Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile + LEVEL = ../../../../../.. + REQUIRES_EH_SUPPORT = 1 + LIBS = -lstdc++ + include $(LEVEL)/test/Programs/SingleSource/Makefile.singlesrc + + From lattner at cs.uiuc.edu Wed Feb 25 21:35:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 21:35:01 2004 Subject: [llvm-commits] CVS: llvm/tools/gccld/GenerateCode.cpp Message-ID: <200402260334.VAA28373@zion.cs.uiuc.edu> Changes in directory llvm/tools/gccld: GenerateCode.cpp updated: 1.19 -> 1.20 --- Log message: We have this snazzy link-time optimizer. How about we start using it? This removes some cruft from 255.vortex, cleaning up after DAE and IPCP, which do horrible, beautiful, things to vortex. --- Diffs of the changes: (+6 -2) Index: llvm/tools/gccld/GenerateCode.cpp diff -u llvm/tools/gccld/GenerateCode.cpp:1.19 llvm/tools/gccld/GenerateCode.cpp:1.20 --- llvm/tools/gccld/GenerateCode.cpp:1.19 Wed Feb 25 15:35:13 2004 +++ llvm/tools/gccld/GenerateCode.cpp Wed Feb 25 21:34:30 2004 @@ -111,6 +111,11 @@ if (!DisableInline) addPass(Passes, createFunctionInliningPass()); // Inline small functions + // The IPO passes may leave cruft around. Clean up after them. + addPass(Passes, createInstructionCombiningPass()); + + addPass(Passes, createScalarReplAggregatesPass()); // Break up allocas + // Run a few AA driven optimizations here and now, to cleanup the code. // Eventually we should put an IP AA in place here. @@ -118,8 +123,7 @@ addPass(Passes, createLoadValueNumberingPass()); // GVN for load instrs addPass(Passes, createGCSEPass()); // Remove common subexprs - // The FuncResolve pass may leave cruft around if functions were prototyped - // differently than they were defined. Remove this cruft. + // Cleanup and simplify the code after the scalar optimizations. addPass(Passes, createInstructionCombiningPass()); // Delete basic blocks, which optimization passes may have killed... From lattner at cs.uiuc.edu Wed Feb 25 21:44:00 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 21:44:00 2004 Subject: [llvm-commits] CVS: llvm/lib/Analysis/DataStructure/Local.cpp Message-ID: <200402260343.VAA28445@zion.cs.uiuc.edu> Changes in directory llvm/lib/Analysis/DataStructure: Local.cpp updated: 1.91 -> 1.92 --- Log message: Add _more_ functions --- Diffs of the changes: (+20 -3) Index: llvm/lib/Analysis/DataStructure/Local.cpp diff -u llvm/lib/Analysis/DataStructure/Local.cpp:1.91 llvm/lib/Analysis/DataStructure/Local.cpp:1.92 --- llvm/lib/Analysis/DataStructure/Local.cpp:1.91 Wed Feb 25 17:31:02 2004 +++ llvm/lib/Analysis/DataStructure/Local.cpp Wed Feb 25 21:43:08 2004 @@ -495,6 +495,15 @@ if (DSNode *N = RetNH.getNode()) N->setHeapNodeMarker()->setModifiedMarker()->setReadMarker(); return; + } else if (F->getName() == "memmove") { + // Merge the first & second arguments, and mark the memory read and + // modified. + DSNodeHandle RetNH = getValueDest(**CS.arg_begin()); + RetNH.mergeWith(getValueDest(**(CS.arg_begin()+1))); + if (DSNode *N = RetNH.getNode()) + N->setModifiedMarker()->setReadMarker(); + return; + } else if (F->getName() == "atoi" || F->getName() == "atof" || F->getName() == "atol" || F->getName() == "atoll" || F->getName() == "remove" || F->getName() == "unlink" || @@ -753,12 +762,20 @@ N->mergeTypeInfo(PTy->getElementType(), H.getOffset()); } return; - } else if (F->getName() == "strchr" || F->getName() == "strrchr") { - // These read their first argument, and return it. + } else if (F->getName() == "strchr" || F->getName() == "strrchr" || + F->getName() == "strstr") { + // These read their arguments, and return the first one DSNodeHandle H = getValueDest(**CS.arg_begin()); + H.mergeWith(getValueDest(*CS.getInstruction())); // Returns buffer + + for (CallSite::arg_iterator AI = CS.arg_begin(), E = CS.arg_end(); + AI != E; ++AI) + if (isPointerType((*AI)->getType())) + if (DSNode *N = getValueDest(**AI).getNode()) + N->setReadMarker(); + if (DSNode *N = H.getNode()) N->setReadMarker(); - H.mergeWith(getValueDest(*CS.getInstruction())); // Returns buffer return; } else if (F->getName() == "modf" && CS.arg_end()-CS.arg_begin() == 2) { // This writes its second argument, and forces it to double. From lattner at cs.uiuc.edu Wed Feb 25 21:44:33 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 21:44:33 2004 Subject: [llvm-commits] CVS: llvm/lib/Analysis/DataStructure/DataStructure.cpp Message-ID: <200402260343.VAA28440@zion.cs.uiuc.edu> Changes in directory llvm/lib/Analysis/DataStructure: DataStructure.cpp updated: 1.160 -> 1.161 --- Log message: The node doesn't have to be _no_ node flags, it just has to be complete and not have any globals. --- Diffs of the changes: (+3 -2) Index: llvm/lib/Analysis/DataStructure/DataStructure.cpp diff -u llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.160 llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.161 --- llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.160 Wed Feb 25 17:36:08 2004 +++ llvm/lib/Analysis/DataStructure/DataStructure.cpp Wed Feb 25 21:43:43 2004 @@ -1393,9 +1393,10 @@ // If the Callee is a useless edge, this must be an unreachable call site, // eliminate it. if (CS.isIndirectCall() && CS.getCalleeNode()->getNumReferrers() == 1 && - CS.getCalleeNode()->getNodeFlags() == 0) { // No useful info? + CS.getCalleeNode()->isComplete() && + CS.getCalleeNode()->getGlobals.empty()) { // No useful info? #ifndef NDEBUG - std::cerr << "WARNING: Useless call site found??\n"; + std::cerr << "WARNING: Useless call site found.\n"; #endif CS.swap(Calls.back()); Calls.pop_back(); From lattner at cs.uiuc.edu Wed Feb 25 21:46:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 21:46:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Analysis/DataStructure/DataStructure.cpp Message-ID: <200402260345.VAA28816@zion.cs.uiuc.edu> Changes in directory llvm/lib/Analysis/DataStructure: DataStructure.cpp updated: 1.161 -> 1.162 --- Log message: Fix typo --- Diffs of the changes: (+1 -1) Index: llvm/lib/Analysis/DataStructure/DataStructure.cpp diff -u llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.161 llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.162 --- llvm/lib/Analysis/DataStructure/DataStructure.cpp:1.161 Wed Feb 25 21:43:43 2004 +++ llvm/lib/Analysis/DataStructure/DataStructure.cpp Wed Feb 25 21:45:03 2004 @@ -1394,7 +1394,7 @@ // eliminate it. if (CS.isIndirectCall() && CS.getCalleeNode()->getNumReferrers() == 1 && CS.getCalleeNode()->isComplete() && - CS.getCalleeNode()->getGlobals.empty()) { // No useful info? + CS.getCalleeNode()->getGlobals().empty()) { // No useful info? #ifndef NDEBUG std::cerr << "WARNING: Useless call site found.\n"; #endif From lattner at cs.uiuc.edu Wed Feb 25 22:08:00 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 22:08:00 2004 Subject: [llvm-commits] CVS: llvm/include/Support/DenseMap.h Message-ID: <200402260407.WAA00398@zion.cs.uiuc.edu> Changes in directory llvm/include/Support: DenseMap.h updated: 1.1 -> 1.2 --- Log message: Fix typeo. grow() cannot shrink storage. clear() should really nuke storage --- Diffs of the changes: (+5 -3) Index: llvm/include/Support/DenseMap.h diff -u llvm/include/Support/DenseMap.h:1.1 llvm/include/Support/DenseMap.h:1.2 --- llvm/include/Support/DenseMap.h:1.1 Wed Feb 25 15:55:45 2004 +++ llvm/include/Support/DenseMap.h Wed Feb 25 22:07:12 2004 @@ -9,7 +9,7 @@ // // This file implements a dense map. A dense map template takes two // types. The first is the mapped type and the second is a functor -// that maps its argument to a size_t. On instanciation a "null" value +// that maps its argument to a size_t. On instantiation a "null" value // can be provided to be used as a "does not exist" indicator in the // map. A member function grow() is provided that given the value of // the maximally indexed key (the argument of the functor) makes sure @@ -48,11 +48,13 @@ } void clear() { - storage_.assign(storage_.size(), nullVal_); + storage_.clear(); } void grow(IndexT n) { - storage_.resize(toIndex_(n) + 1, nullVal_); + unsigned NewSize = toIndex_(n) + 1; + if (NewSize > storage_.size()) + storage_.resize(NewSize, nullVal_); } }; From alkis at cs.uiuc.edu Wed Feb 25 22:15:01 2004 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 22:15:01 2004 Subject: [llvm-commits] CVS: llvm/autoconf/configure.ac Message-ID: <200402260414.WAA00843@zion.cs.uiuc.edu> Changes in directory llvm/autoconf: configure.ac updated: 1.80 -> 1.81 --- Log message: Remove .micro references as those files no longer exist and add some more recent Makefile additions to the list --- Diffs of the changes: (+2 -2) Index: llvm/autoconf/configure.ac diff -u llvm/autoconf/configure.ac:1.80 llvm/autoconf/configure.ac:1.81 --- llvm/autoconf/configure.ac:1.80 Wed Feb 25 17:20:27 2004 +++ llvm/autoconf/configure.ac Wed Feb 25 22:14:10 2004 @@ -40,7 +40,6 @@ AC_CONFIG_MAKEFILE(test/Programs/Makefile.programs) AC_CONFIG_MAKEFILE(test/Programs/TEST.aa.Makefile) AC_CONFIG_MAKEFILE(test/Programs/TEST.dsgraph.report) -AC_CONFIG_MAKEFILE(test/Programs/TEST.micro.report) AC_CONFIG_MAKEFILE(test/Programs/TEST.aa.report) AC_CONFIG_MAKEFILE(test/Programs/TEST.example.Makefile) AC_CONFIG_MAKEFILE(test/Programs/TEST.nightly.Makefile) @@ -51,11 +50,11 @@ AC_CONFIG_MAKEFILE(test/Programs/TEST.jit.report) AC_CONFIG_MAKEFILE(test/Programs/TEST.typesafe.Makefile) AC_CONFIG_MAKEFILE(test/Programs/TEST.dsgraph.gnuplot) -AC_CONFIG_MAKEFILE(test/Programs/TEST.micro.Makefile) AC_CONFIG_MAKEFILE(test/Programs/TEST.vtl.Makefile) AC_CONFIG_MAKEFILE(test/Programs/External/Makefile) AC_CONFIG_MAKEFILE(test/Programs/External/SPEC/Makefile) AC_CONFIG_MAKEFILE(test/Programs/External/SPEC/Makefile.spec) +AC_CONFIG_MAKEFILE(test/Programs/External/SPEC/Makefile.spec2000) AC_CONFIG_MAKEFILE(test/Programs/External/SPEC/Makefile.spec95) AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Makefile) AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Makefile.multisrc) @@ -74,6 +73,7 @@ AC_CONFIG_MAKEFILE(test/Programs/MultiSource/Benchmarks/FreeBench/pifft/test.in) AC_CONFIG_MAKEFILE(test/Programs/SingleSource/Makefile) AC_CONFIG_MAKEFILE(test/Programs/SingleSource/Makefile.singlesrc) +AC_CONFIG_MAKEFILE(test/Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile) AC_CONFIG_MAKEFILE(tools/Makefile) AC_CONFIG_MAKEFILE(utils/Makefile) AC_CONFIG_MAKEFILE(projects/Makefile) From alkis at cs.uiuc.edu Wed Feb 25 22:15:34 2004 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 22:15:34 2004 Subject: [llvm-commits] CVS: llvm/configure Message-ID: <200402260414.WAA00842@zion.cs.uiuc.edu> Changes in directory llvm: configure updated: 1.82 -> 1.83 --- Log message: Remove .micro references as those files no longer exist and add some more recent Makefile additions to the list --- Diffs of the changes: (+12 -12) Index: llvm/configure diff -u llvm/configure:1.82 llvm/configure:1.83 --- llvm/configure:1.82 Wed Feb 25 17:41:30 2004 +++ llvm/configure Wed Feb 25 22:14:10 2004 @@ -1571,9 +1571,6 @@ ac_config_commands="$ac_config_commands test/Programs/TEST.dsgraph.report" - ac_config_commands="$ac_config_commands test/Programs/TEST.micro.report" - - ac_config_commands="$ac_config_commands test/Programs/TEST.aa.report" @@ -1604,9 +1601,6 @@ ac_config_commands="$ac_config_commands test/Programs/TEST.dsgraph.gnuplot" - ac_config_commands="$ac_config_commands test/Programs/TEST.micro.Makefile" - - ac_config_commands="$ac_config_commands test/Programs/TEST.vtl.Makefile" @@ -1619,6 +1613,9 @@ ac_config_commands="$ac_config_commands test/Programs/External/SPEC/Makefile.spec" + ac_config_commands="$ac_config_commands test/Programs/External/SPEC/Makefile.spec2000" + + ac_config_commands="$ac_config_commands test/Programs/External/SPEC/Makefile.spec95" @@ -1673,6 +1670,9 @@ ac_config_commands="$ac_config_commands test/Programs/SingleSource/Makefile.singlesrc" + ac_config_commands="$ac_config_commands test/Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile" + + ac_config_commands="$ac_config_commands tools/Makefile" @@ -22611,7 +22611,6 @@ ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/Makefile.programs` ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/TEST.aa.Makefile` ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/TEST.dsgraph.report` -${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/TEST.micro.report` ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/TEST.aa.report` ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/TEST.example.Makefile` ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/TEST.nightly.Makefile` @@ -22622,11 +22621,11 @@ ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/TEST.jit.report` ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/TEST.typesafe.Makefile` ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/TEST.dsgraph.gnuplot` -${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/TEST.micro.Makefile` ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/TEST.vtl.Makefile` ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/External/Makefile` ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/External/SPEC/Makefile` ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/External/SPEC/Makefile.spec` +${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/External/SPEC/Makefile.spec2000` ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/External/SPEC/Makefile.spec95` ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/MultiSource/Makefile` ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/MultiSource/Makefile.multisrc` @@ -22645,6 +22644,7 @@ ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/MultiSource/Benchmarks/FreeBench/pifft/test.in` ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/SingleSource/Makefile` ${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/SingleSource/Makefile.singlesrc` +${srcdir}/autoconf/mkinstalldirs `dirname test/Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile` ${srcdir}/autoconf/mkinstalldirs `dirname tools/Makefile` ${srcdir}/autoconf/mkinstalldirs `dirname utils/Makefile` ${srcdir}/autoconf/mkinstalldirs `dirname projects/Makefile` @@ -22676,7 +22676,6 @@ "test/Programs/Makefile.programs" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/Makefile.programs" ;; "test/Programs/TEST.aa.Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/TEST.aa.Makefile" ;; "test/Programs/TEST.dsgraph.report" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/TEST.dsgraph.report" ;; - "test/Programs/TEST.micro.report" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/TEST.micro.report" ;; "test/Programs/TEST.aa.report" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/TEST.aa.report" ;; "test/Programs/TEST.example.Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/TEST.example.Makefile" ;; "test/Programs/TEST.nightly.Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/TEST.nightly.Makefile" ;; @@ -22687,11 +22686,11 @@ "test/Programs/TEST.jit.report" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/TEST.jit.report" ;; "test/Programs/TEST.typesafe.Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/TEST.typesafe.Makefile" ;; "test/Programs/TEST.dsgraph.gnuplot" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/TEST.dsgraph.gnuplot" ;; - "test/Programs/TEST.micro.Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/TEST.micro.Makefile" ;; "test/Programs/TEST.vtl.Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/TEST.vtl.Makefile" ;; "test/Programs/External/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/External/Makefile" ;; "test/Programs/External/SPEC/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/External/SPEC/Makefile" ;; "test/Programs/External/SPEC/Makefile.spec" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/External/SPEC/Makefile.spec" ;; + "test/Programs/External/SPEC/Makefile.spec2000" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/External/SPEC/Makefile.spec2000" ;; "test/Programs/External/SPEC/Makefile.spec95" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/External/SPEC/Makefile.spec95" ;; "test/Programs/MultiSource/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/MultiSource/Makefile" ;; "test/Programs/MultiSource/Makefile.multisrc" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/MultiSource/Makefile.multisrc" ;; @@ -22710,6 +22709,7 @@ "test/Programs/MultiSource/Benchmarks/FreeBench/pifft/test.in" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/MultiSource/Benchmarks/FreeBench/pifft/test.in" ;; "test/Programs/SingleSource/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/SingleSource/Makefile" ;; "test/Programs/SingleSource/Makefile.singlesrc" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/SingleSource/Makefile.singlesrc" ;; + "test/Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS test/Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile" ;; "tools/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS tools/Makefile" ;; "utils/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS utils/Makefile" ;; "projects/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS projects/Makefile" ;; @@ -23381,7 +23381,6 @@ test/Programs/Makefile.programs ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/Makefile.programs test/Programs/Makefile.programs ;; test/Programs/TEST.aa.Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/TEST.aa.Makefile test/Programs/TEST.aa.Makefile ;; test/Programs/TEST.dsgraph.report ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/TEST.dsgraph.report test/Programs/TEST.dsgraph.report ;; - test/Programs/TEST.micro.report ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/TEST.micro.report test/Programs/TEST.micro.report ;; test/Programs/TEST.aa.report ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/TEST.aa.report test/Programs/TEST.aa.report ;; test/Programs/TEST.example.Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/TEST.example.Makefile test/Programs/TEST.example.Makefile ;; test/Programs/TEST.nightly.Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/TEST.nightly.Makefile test/Programs/TEST.nightly.Makefile ;; @@ -23392,11 +23391,11 @@ test/Programs/TEST.jit.report ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/TEST.jit.report test/Programs/TEST.jit.report ;; test/Programs/TEST.typesafe.Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/TEST.typesafe.Makefile test/Programs/TEST.typesafe.Makefile ;; test/Programs/TEST.dsgraph.gnuplot ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/TEST.dsgraph.gnuplot test/Programs/TEST.dsgraph.gnuplot ;; - test/Programs/TEST.micro.Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/TEST.micro.Makefile test/Programs/TEST.micro.Makefile ;; test/Programs/TEST.vtl.Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/TEST.vtl.Makefile test/Programs/TEST.vtl.Makefile ;; test/Programs/External/Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/External/Makefile test/Programs/External/Makefile ;; test/Programs/External/SPEC/Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/External/SPEC/Makefile test/Programs/External/SPEC/Makefile ;; test/Programs/External/SPEC/Makefile.spec ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/External/SPEC/Makefile.spec test/Programs/External/SPEC/Makefile.spec ;; + test/Programs/External/SPEC/Makefile.spec2000 ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/External/SPEC/Makefile.spec2000 test/Programs/External/SPEC/Makefile.spec2000 ;; test/Programs/External/SPEC/Makefile.spec95 ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/External/SPEC/Makefile.spec95 test/Programs/External/SPEC/Makefile.spec95 ;; test/Programs/MultiSource/Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/MultiSource/Makefile test/Programs/MultiSource/Makefile ;; test/Programs/MultiSource/Makefile.multisrc ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/MultiSource/Makefile.multisrc test/Programs/MultiSource/Makefile.multisrc ;; @@ -23415,6 +23414,7 @@ test/Programs/MultiSource/Benchmarks/FreeBench/pifft/test.in ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/MultiSource/Benchmarks/FreeBench/pifft/test.in test/Programs/MultiSource/Benchmarks/FreeBench/pifft/test.in ;; test/Programs/SingleSource/Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/SingleSource/Makefile test/Programs/SingleSource/Makefile ;; test/Programs/SingleSource/Makefile.singlesrc ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/SingleSource/Makefile.singlesrc test/Programs/SingleSource/Makefile.singlesrc ;; + test/Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/test/Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile test/Programs/SingleSource/UnitTests/SetjmpLongjmp/Makefile ;; tools/Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/tools/Makefile tools/Makefile ;; utils/Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/utils/Makefile utils/Makefile ;; projects/Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/projects/Makefile projects/Makefile ;; From lattner at cs.uiuc.edu Wed Feb 25 23:01:07 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 23:01:07 2004 Subject: [llvm-commits] CVS: llvm/include/Support/DenseMap.h Message-ID: <200402260500.XAA03795@zion.cs.uiuc.edu> Changes in directory llvm/include/Support: DenseMap.h updated: 1.2 -> 1.3 --- Log message: Fix a bug in the densemap that was killing the local allocator, and probably other clients. The problem is that the nullVal member was left to the default constructor to initialize, which for int's does nothing (ie, leaves it unspecified). To get a zero value, we must use T(). It's C++ wonderful? :) --- Diffs of the changes: (+1 -1) Index: llvm/include/Support/DenseMap.h diff -u llvm/include/Support/DenseMap.h:1.2 llvm/include/Support/DenseMap.h:1.3 --- llvm/include/Support/DenseMap.h:1.2 Wed Feb 25 22:07:12 2004 +++ llvm/include/Support/DenseMap.h Wed Feb 25 23:00:15 2004 @@ -33,7 +33,7 @@ ToIndexT toIndex_; public: - DenseMap() { } + DenseMap() : nullVal_(T()) { } explicit DenseMap(const T& val) : nullVal_(val) { } From alkis at uiuc.edu Wed Feb 25 23:22:01 2004 From: alkis at uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 23:22:01 2004 Subject: [llvm-commits] CVS: llvm/include/Support/DenseMap.h In-Reply-To: <200402260500.XAA03795@zion.cs.uiuc.edu> References: <200402260500.XAA03795@zion.cs.uiuc.edu> Message-ID: <200402252319.50802.alkis@uiuc.edu> On Wednesday 25 February 2004 11:00 pm, Chris Lattner wrote: > > Changes in directory llvm/include/Support: > > DenseMap.h updated: 1.2 -> 1.3 > > --- > Log message: > > Fix a bug in the densemap that was killing the local allocator, and probably > other clients. The problem is that the nullVal member was left to the default > constructor to initialize, which for int's does nothing (ie, leaves it unspecified). > > To get a zero value, we must use T(). It's C++ wonderful? :) Wow... I always thought that all members had T() called if you didn't specify it. -- Alkis From lattner at cs.uiuc.edu Wed Feb 25 23:22:36 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Feb 25 23:22:36 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/RegAllocLocal.cpp Message-ID: <200402260521.XAA05192@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: RegAllocLocal.cpp updated: 1.58 -> 1.59 --- Log message: No need to clear the map here, it will always be empty --- Diffs of the changes: (+0 -1) Index: llvm/lib/CodeGen/RegAllocLocal.cpp diff -u llvm/lib/CodeGen/RegAllocLocal.cpp:1.58 llvm/lib/CodeGen/RegAllocLocal.cpp:1.59 --- llvm/lib/CodeGen/RegAllocLocal.cpp:1.58 Wed Feb 25 15:55:44 2004 +++ llvm/lib/CodeGen/RegAllocLocal.cpp Wed Feb 25 23:21:21 2004 @@ -683,7 +683,6 @@ // initialize the virtual->physical register map to have a 'null' // mapping for all virtual registers - Virt2PhysRegMap.clear(); Virt2PhysRegMap.grow(MF->getSSARegMap()->getLastVirtReg()); // Loop over all of the basic blocks, eliminating virtual register references From sabre at nondot.org Wed Feb 25 23:25:01 2004 From: sabre at nondot.org (Chris Lattner) Date: Wed Feb 25 23:25:01 2004 Subject: [llvm-commits] CVS: llvm/include/Support/DenseMap.h In-Reply-To: <200402252319.50802.alkis@uiuc.edu> Message-ID: On Wed, 25 Feb 2004, Alkis Evlogimenos wrote: > > Fix a bug in the densemap that was killing the local allocator, and probably > > other clients. The problem is that the nullVal member was left to the default > > constructor to initialize, which for int's does nothing (ie, leaves it unspecified). > > > > To get a zero value, we must use T(). It's C++ wonderful? :) > > Wow... I always thought that all members had T() called if you didn't > specify it. Nope. Strange but true: T v; and T v = T(); act differently when T is an int, pointer or other primitive type. I personally think that this is foolish, as even a dumb compiler can eliminate default dead initializations of primitives, but the C++ commitee didn't ask me. :) -Chris -- http://llvm.cs.uiuc.edu/ http://www.nondot.org/~sabre/Projects/ From alkis at cs.uiuc.edu Wed Feb 25 23:58:01 2004 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Wed Feb 25 23:58:01 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/Makefile.spec Message-ID: <200402260557.XAA06583@zion.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC: Makefile.spec updated: 1.26 -> 1.27 --- Log message: Fix problem -lm not being passed to the linker --- Diffs of the changes: (+1 -3) Index: llvm/test/Programs/External/SPEC/Makefile.spec diff -u llvm/test/Programs/External/SPEC/Makefile.spec:1.26 llvm/test/Programs/External/SPEC/Makefile.spec:1.27 --- llvm/test/Programs/External/SPEC/Makefile.spec:1.26 Wed Feb 25 18:01:21 2004 +++ llvm/test/Programs/External/SPEC/Makefile.spec Wed Feb 25 23:57:20 2004 @@ -18,9 +18,7 @@ ifndef STDOUT_FILENAME STDOUT_FILENAME := standard.out endif -ifndef LDFLAGS -LDFLAGS = -lm -endif +LDFLAGS += -lm # Get the current directory, the name of the benchmark, and the current # subdirectory of the SPEC directory we are in (ie, CINT2000/164.gzip) From lattner at cs.uiuc.edu Thu Feb 26 01:14:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Feb 26 01:14:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Utils/SimplifyCFG.cpp Message-ID: <200402260713.BAA15129@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Utils: SimplifyCFG.cpp updated: 1.27 -> 1.28 --- Log message: turn things like: if (X == 0 || X == 2) ...where the comparisons and branches are in different blocks... into a switch instruction. This comes up a lot in various programs, and works well with the switch/switch merging code I checked earlier. For example, this testcase: int switchtest(int C) { return C == 0 ? f(123) : C == 1 ? f(3123) : C == 4 ? f(312) : C == 5 ? f(1234): f(444); } is converted into this: switch int %C, label %cond_false.3 [ int 0, label %cond_true.0 int 1, label %cond_true.1 int 4, label %cond_true.2 int 5, label %cond_true.3 ] instead of a whole bunch of conditional branches. Admittedly the code is ugly, and incomplete. To be complete, we need to add br -> switch merging and switch -> br merging. For example, this testcase: struct foo { int Q, R, Z; }; #define A (X->Q+X->R * 123) int test(struct foo *X) { return A == 123 ? X1() : A == 12321 ? X2(): (A == 111 || A == 222) ? X3() : A == 875 ? X4() : X5(); } Gets compiled to this: switch int %tmp.7, label %cond_false.2 [ int 123, label %cond_true.0 int 12321, label %cond_true.1 int 111, label %cond_true.2 int 222, label %cond_true.2 ] ... cond_false.2: ; preds = %entry %tmp.52 = seteq int %tmp.7, 875 ; [#uses=1] br bool %tmp.52, label %cond_true.3, label %cond_false.3 where the branch could be folded into the switch. This kind of thing occurs *ALL OF THE TIME*, especially in programs like 176.gcc, which is a horrible mess of code. It contains stuff like *shudder*: #define SWITCH_TAKES_ARG(CHAR) \ ( (CHAR) == 'D' \ || (CHAR) == 'U' \ || (CHAR) == 'o' \ || (CHAR) == 'e' \ || (CHAR) == 'u' \ || (CHAR) == 'I' \ || (CHAR) == 'm' \ || (CHAR) == 'L' \ || (CHAR) == 'A' \ || (CHAR) == 'h' \ || (CHAR) == 'z') and #define CONST_OK_FOR_LETTER_P(VALUE, C) \ ((C) == 'I' ? SMALL_INTVAL (VALUE) \ : (C) == 'J' ? SMALL_INTVAL (-(VALUE)) \ : (C) == 'K' ? (unsigned)(VALUE) < 32 \ : (C) == 'L' ? ((VALUE) & 0xffff) == 0 \ : (C) == 'M' ? integer_ok_for_set (VALUE) \ : (C) == 'N' ? (VALUE) < 0 \ : (C) == 'O' ? (VALUE) == 0 \ : (C) == 'P' ? (VALUE) >= 0 \ : 0) and #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) \ { \ if (GET_CODE (X) == PLUS && CONSTANT_ADDRESS_P (XEXP (X, 1))) \ (X) = gen_rtx (PLUS, SImode, XEXP (X, 0), \ copy_to_mode_reg (SImode, XEXP (X, 1))); \ if (GET_CODE (X) == PLUS && CONSTANT_ADDRESS_P (XEXP (X, 0))) \ (X) = gen_rtx (PLUS, SImode, XEXP (X, 1), \ copy_to_mode_reg (SImode, XEXP (X, 0))); \ if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 0)) == MULT) \ (X) = gen_rtx (PLUS, SImode, XEXP (X, 1), \ force_operand (XEXP (X, 0), 0)); \ if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 1)) == MULT) \ (X) = gen_rtx (PLUS, SImode, XEXP (X, 0), \ force_operand (XEXP (X, 1), 0)); \ if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 0)) == PLUS) \ (X) = gen_rtx (PLUS, Pmode, force_operand (XEXP (X, 0), NULL_RTX),\ XEXP (X, 1)); \ if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 1)) == PLUS) \ (X) = gen_rtx (PLUS, Pmode, XEXP (X, 0), \ force_operand (XEXP (X, 1), NULL_RTX)); \ if (GET_CODE (X) == SYMBOL_REF || GET_CODE (X) == CONST \ || GET_CODE (X) == LABEL_REF) \ (X) = legitimize_address (flag_pic, X, 0, 0); \ if (memory_address_p (MODE, X)) \ goto WIN; } and others. These macros get used multiple times of course. These are such lovely candidates for macros, aren't they? :) This code also nicely handles LLVM constructs that look like this: if (isa(I)) ... else if (isa(I)) ... else if (isa(I)) ... else if (isa(I)) ... else if (isa(I)) ... where the isa can obviously be a dyn_cast as well. Switch instructions are a good thing. --- Diffs of the changes: (+74 -0) Index: llvm/lib/Transforms/Utils/SimplifyCFG.cpp diff -u llvm/lib/Transforms/Utils/SimplifyCFG.cpp:1.27 llvm/lib/Transforms/Utils/SimplifyCFG.cpp:1.28 --- llvm/lib/Transforms/Utils/SimplifyCFG.cpp:1.27 Tue Feb 24 10:09:21 2004 +++ llvm/lib/Transforms/Utils/SimplifyCFG.cpp Thu Feb 26 01:13:46 2004 @@ -690,6 +690,80 @@ return true; } + // If there is a single predecessor for this block, and if this block is a + // simple value comparison block (ie, contains X == C), see if we can fold + // this comparison into the comparison in our predecessor block, making the + // predecessor block terminator into a switch (or adding cases to a + // preexisting switch). + if (OnlyPred) { + if (SetCondInst *SCI = dyn_cast(BB->begin())) + if (SCI->getOpcode() == Instruction::SetEQ && SCI->hasOneUse() && + isa(SCI->use_back()) && + SCI->getNext() == cast(SCI->use_back())) { + // Okay, we know we have a block containing (only) a seteq and a + // conditional branch instruction. If an integer value is being + // compared, if the comparison value is a constant, then check the + // predecessor. + BranchInst *BBBr = cast(BB->getTerminator()); + Value *CompVal = SCI->getOperand(0); + if (ConstantInt *CVal = dyn_cast(SCI->getOperand(1))) { + // We can do the merge if the predecessor contains either a + // conditional branch or a switch instruction which is operating on + // the CompVal. + if (BranchInst *BI = dyn_cast(OnlyPred->getTerminator())){ + // If it is a branch, then it must be a conditional branch, + // otherwise we would have merged it in before. We can only handle + // this if the block we are looking at is the 'false' branch. + assert(BI->isConditional() && + "Should have previously merged blocks!"); + if (SetCondInst *PredSCC= dyn_cast(BI->getCondition())) + if (PredSCC->getOperand(0) == CompVal && + PredSCC->getOpcode() == Instruction::SetEQ && + isa(PredSCC->getOperand(1)) && + BB == BI->getSuccessor(1) && + SafeToMergeTerminators(BI, BBBr)) { + // If the constants being compared are the same, then the + // comparison in this block could never come true. + if (SCI->getOperand(1) == PredSCC->getOperand(1)) { + // Tell the block to skip over us, making us dead. + BI->setSuccessor(1, BBBr->getSuccessor(1)); + AddPredecessorToBlock(BBBr->getSuccessor(1), OnlyPred, BB); + return SimplifyCFG(BB); + } + + // Otherwise, create the switch instruction! + SwitchInst *SI = new SwitchInst(CompVal, BBBr->getSuccessor(1), + BI); + // Add the edge from our predecessor, and remove the + // predecessors (now obsolete branch instruction). This makes + // the current block dead. + SI->addCase(cast(PredSCC->getOperand(1)), + BI->getSuccessor(0)); + OnlyPred->getInstList().erase(BI); + if (PredSCC->use_empty()) + PredSCC->getParent()->getInstList().erase(PredSCC); + + // Add our case... + SI->addCase(cast(SCI->getOperand(1)), + BBBr->getSuccessor(0)); + + AddPredecessorToBlock(BBBr->getSuccessor(0), OnlyPred, BB); + AddPredecessorToBlock(BBBr->getSuccessor(1), OnlyPred, BB); + + //std::cerr << "Formed Switch: " << SI; + + // Made a big change! Now this block is dead, so remove it. + return SimplifyCFG(BB); + } + + } else if (SwitchInst *SI = + dyn_cast(OnlyPred->getTerminator())) { + + } + } + } + } + for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) if (BranchInst *BI = dyn_cast((*PI)->getTerminator())) // Change br (X == 0 | X == 1), T, F into a switch instruction. From lattner at cs.uiuc.edu Thu Feb 26 01:25:02 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Feb 26 01:25:02 2004 Subject: [llvm-commits] CVS: llvm/lib/VMCore/Type.cpp Message-ID: <200402260724.BAA25893@zion.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: Type.cpp updated: 1.95 -> 1.96 --- Log message: Make sure that at least one virtual method is defined in a .cpp file to avoid having the compiler emit RTTI and vtables to EVERY translation unit. --- Diffs of the changes: (+1 -0) Index: llvm/lib/VMCore/Type.cpp diff -u llvm/lib/VMCore/Type.cpp:1.95 llvm/lib/VMCore/Type.cpp:1.96 --- llvm/lib/VMCore/Type.cpp:1.95 Mon Feb 16 21:03:47 2004 +++ llvm/lib/VMCore/Type.cpp Thu Feb 26 01:24:18 2004 @@ -26,6 +26,7 @@ // //#define DEBUG_MERGE_TYPES 1 +AbstractTypeUser::~AbstractTypeUser() {} //===----------------------------------------------------------------------===// // Type Class Implementation From lattner at cs.uiuc.edu Thu Feb 26 01:25:43 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Feb 26 01:25:43 2004 Subject: [llvm-commits] CVS: llvm/include/llvm/AbstractTypeUser.h Message-ID: <200402260724.BAA25410@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm: AbstractTypeUser.h updated: 1.18 -> 1.19 --- Log message: Make sure that at least one virtual method is defined in a .cpp file to avoid having the compiler emit RTTI and vtables to EVERY translation unit. --- Diffs of the changes: (+1 -1) Index: llvm/include/llvm/AbstractTypeUser.h diff -u llvm/include/llvm/AbstractTypeUser.h:1.18 llvm/include/llvm/AbstractTypeUser.h:1.19 --- llvm/include/llvm/AbstractTypeUser.h:1.18 Tue Dec 23 17:25:21 2003 +++ llvm/include/llvm/AbstractTypeUser.h Thu Feb 26 01:24:08 2004 @@ -44,7 +44,7 @@ class AbstractTypeUser { protected: - virtual ~AbstractTypeUser() {} // Derive from me + virtual ~AbstractTypeUser(); // Derive from me public: /// refineAbstractType - The callback method invoked when an abstract type is From lattner at cs.uiuc.edu Thu Feb 26 01:26:21 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Feb 26 01:26:21 2004 Subject: [llvm-commits] CVS: llvm/lib/Support/Annotation.cpp Message-ID: <200402260724.BAA25218@zion.cs.uiuc.edu> Changes in directory llvm/lib/Support: Annotation.cpp updated: 1.13 -> 1.14 --- Log message: Make sure that at least one virtual method is defined in a .cpp file to avoid having the compiler emit RTTI and vtables to EVERY translation unit. --- Diffs of the changes: (+12 -1) Index: llvm/lib/Support/Annotation.cpp diff -u llvm/lib/Support/Annotation.cpp:1.13 llvm/lib/Support/Annotation.cpp:1.14 --- llvm/lib/Support/Annotation.cpp:1.13 Sun Dec 14 15:35:53 2003 +++ llvm/lib/Support/Annotation.cpp Thu Feb 26 01:23:57 2004 @@ -15,6 +15,18 @@ #include "Support/Annotation.h" using namespace llvm; +Annotation::~Annotation() {} // Designed to be subclassed + +Annotable::~Annotable() { // Virtual because it's designed to be subclassed... + Annotation *A = AnnotationList; + while (A) { + Annotation *Next = A->getNext(); + delete A; + A = Next; + } +} + + typedef std::map IDMapType; static unsigned IDCounter = 0; // Unique ID counter @@ -40,7 +52,6 @@ TheFactMap = 0; } } - AnnotationID AnnotationManager::getID(const std::string &Name) { // Name -> ID IDMapType::iterator I = getIDMap().find(Name); From lattner at cs.uiuc.edu Thu Feb 26 01:27:02 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Feb 26 01:27:02 2004 Subject: [llvm-commits] CVS: llvm/include/Support/Annotation.h Message-ID: <200402260724.BAA24928@zion.cs.uiuc.edu> Changes in directory llvm/include/Support: Annotation.h updated: 1.13 -> 1.14 --- Log message: Make sure that at least one virtual method is defined in a .cpp file to avoid having the compiler emit RTTI and vtables to EVERY translation unit. --- Diffs of the changes: (+2 -9) Index: llvm/include/Support/Annotation.h diff -u llvm/include/Support/Annotation.h:1.13 llvm/include/Support/Annotation.h:1.14 --- llvm/include/Support/Annotation.h:1.13 Tue Nov 11 16:41:29 2003 +++ llvm/include/Support/Annotation.h Thu Feb 26 01:23:53 2004 @@ -68,7 +68,7 @@ Annotation *Next; // The next annotation in the linked list public: inline Annotation(AnnotationID id) : ID(id), Next(0) {} - virtual ~Annotation() {} // Designed to be subclassed + virtual ~Annotation(); // Designed to be subclassed // getID - Return the unique ID# of this annotation inline AnnotationID getID() const { return ID; } @@ -95,14 +95,7 @@ void operator=(const Annotable &); // Do not implement public: Annotable() : AnnotationList(0) {} - virtual ~Annotable() { // Virtual because it's designed to be subclassed... - Annotation *A = AnnotationList; - while (A) { - Annotation *Next = A->getNext(); - delete A; - A = Next; - } - } + virtual ~Annotable(); // Virtual because it's designed to be subclassed... // getAnnotation - Search the list for annotations of the specified ID. The // pointer returned is either null (if no annotations of the specified ID From lattner at cs.uiuc.edu Thu Feb 26 02:00:02 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Feb 26 02:00:02 2004 Subject: [llvm-commits] CVS: llvm/lib/ExecutionEngine/Interpreter/Interpreter.h Message-ID: <200402260759.BAA26428@zion.cs.uiuc.edu> Changes in directory llvm/lib/ExecutionEngine/Interpreter: Interpreter.h updated: 1.60 -> 1.61 --- Log message: remove obsolete comment --- Diffs of the changes: (+1 -1) Index: llvm/lib/ExecutionEngine/Interpreter/Interpreter.h diff -u llvm/lib/ExecutionEngine/Interpreter/Interpreter.h:1.60 llvm/lib/ExecutionEngine/Interpreter/Interpreter.h:1.61 --- llvm/lib/ExecutionEngine/Interpreter/Interpreter.h:1.60 Fri Feb 13 00:18:39 2004 +++ llvm/lib/ExecutionEngine/Interpreter/Interpreter.h Thu Feb 26 01:59:22 2004 @@ -24,7 +24,7 @@ namespace llvm { -struct FunctionInfo; // Defined in ExecutionAnnotations.h +struct FunctionInfo; class gep_type_iterator; class ConstantExpr; From lattner at cs.uiuc.edu Thu Feb 26 02:02:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Feb 26 02:02:01 2004 Subject: [llvm-commits] CVS: llvm/include/Config/sys/resource.h stat.h time.h types.h wait.h Message-ID: <200402260801.CAA27233@zion.cs.uiuc.edu> Changes in directory llvm/include/Config/sys: resource.h updated: 1.3 -> 1.4 stat.h updated: 1.3 -> 1.4 time.h updated: 1.3 -> 1.4 types.h updated: 1.3 -> 1.4 wait.h updated: 1.3 -> 1.4 --- Log message: Eliminate copy-and-paste comments --- Diffs of the changes: (+5 -5) Index: llvm/include/Config/sys/resource.h diff -u llvm/include/Config/sys/resource.h:1.3 llvm/include/Config/sys/resource.h:1.4 --- llvm/include/Config/sys/resource.h:1.3 Mon Oct 20 15:11:42 2003 +++ llvm/include/Config/sys/resource.h Thu Feb 26 02:01:30 2004 @@ -1,4 +1,4 @@ -/*===-- Config/sys/resource.h - Annotation classes --------------*- C++ -*-===// +/*===-- Config/sys/resource.h -----------------------------------*- C++ -*-===// * * The LLVM Compiler Infrastructure * Index: llvm/include/Config/sys/stat.h diff -u llvm/include/Config/sys/stat.h:1.3 llvm/include/Config/sys/stat.h:1.4 --- llvm/include/Config/sys/stat.h:1.3 Mon Oct 20 15:11:42 2003 +++ llvm/include/Config/sys/stat.h Thu Feb 26 02:01:30 2004 @@ -1,4 +1,4 @@ -/*===-- Config/sys/stat.h - Annotation classes --------------*- ----C++ -*-===// +/*===-- Config/sys/stat.h -----------------------------------*- ----C++ -*-===// * * The LLVM Compiler Infrastructure * Index: llvm/include/Config/sys/time.h diff -u llvm/include/Config/sys/time.h:1.3 llvm/include/Config/sys/time.h:1.4 --- llvm/include/Config/sys/time.h:1.3 Mon Oct 20 15:11:43 2003 +++ llvm/include/Config/sys/time.h Thu Feb 26 02:01:30 2004 @@ -1,4 +1,4 @@ -/*===-- Config/sys/time.h - Annotation classes ------------------*- C++ -*-===// +/*===-- Config/sys/time.h ---------------------------------------*- C++ -*-===// * * The LLVM Compiler Infrastructure * Index: llvm/include/Config/sys/types.h diff -u llvm/include/Config/sys/types.h:1.3 llvm/include/Config/sys/types.h:1.4 --- llvm/include/Config/sys/types.h:1.3 Mon Oct 20 15:11:43 2003 +++ llvm/include/Config/sys/types.h Thu Feb 26 02:01:30 2004 @@ -1,4 +1,4 @@ -/*===-- Config/sys/types.h - Annotation classes --------------*- C++ -*-===// +/*===-- Config/sys/types.h --------------------------------------*- C++ -*-===// * * The LLVM Compiler Infrastructure * Index: llvm/include/Config/sys/wait.h diff -u llvm/include/Config/sys/wait.h:1.3 llvm/include/Config/sys/wait.h:1.4 --- llvm/include/Config/sys/wait.h:1.3 Mon Oct 20 15:11:43 2003 +++ llvm/include/Config/sys/wait.h Thu Feb 26 02:01:30 2004 @@ -1,4 +1,4 @@ -/*===-- Config/sys/wait.h - Annotation classes ------------------*- C++ -*-===// +/*===-- Config/sys/wait.h ---------------------------------------*- C++ -*-===// * * The LLVM Compiler Infrastructure * From lattner at cs.uiuc.edu Thu Feb 26 02:03:03 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Feb 26 02:03:03 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/TargetData.cpp Message-ID: <200402260802.CAA27320@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target: TargetData.cpp updated: 1.42 -> 1.43 --- Log message: Use a map instead of annotations --- Diffs of the changes: (+36 -23) Index: llvm/lib/Target/TargetData.cpp diff -u llvm/lib/Target/TargetData.cpp:1.42 llvm/lib/Target/TargetData.cpp:1.43 --- llvm/lib/Target/TargetData.cpp:1.42 Sun Feb 8 22:37:30 2004 +++ llvm/lib/Target/TargetData.cpp Thu Feb 26 02:02:17 2004 @@ -8,8 +8,7 @@ //===----------------------------------------------------------------------===// // // This file defines target properties related to datatype size/offset/alignment -// information. It uses lazy annotations to cache information about how -// structure types are laid out and used. +// information. // // This structure should be created once, filled in if the defaults are not // correct and then passed around by const&. None of the members functions @@ -33,11 +32,10 @@ uint64_t &Size, unsigned char &Alignment); //===----------------------------------------------------------------------===// -// Support for StructLayout Annotation +// Support for StructLayout //===----------------------------------------------------------------------===// -StructLayout::StructLayout(const StructType *ST, const TargetData &TD) - : Annotation(TD.getStructLayoutAID()) { +StructLayout::StructLayout(const StructType *ST, const TargetData &TD) { StructAlignment = 0; StructSize = 0; @@ -71,16 +69,6 @@ StructSize = (StructSize/StructAlignment + 1) * StructAlignment; } -Annotation *TargetData::TypeAnFactory(AnnotationID AID, const Annotable *T, - void *D) { - const TargetData &TD = *(const TargetData*)D; - assert(AID == TD.AID && "Target data annotation ID mismatch!"); - const Type *Ty = cast((const Value *)T); - assert(isa(Ty) && - "Can only create StructLayout annotation on structs!"); - return new StructLayout(cast(Ty), TD); -} - //===----------------------------------------------------------------------===// // TargetData Class Implementation //===----------------------------------------------------------------------===// @@ -90,9 +78,7 @@ unsigned char PtrAl, unsigned char DoubleAl, unsigned char FloatAl, unsigned char LongAl, unsigned char IntAl, unsigned char ShortAl, - unsigned char ByteAl) - : AID(AnnotationManager::getID("TargetData::" + TargetName)) { - AnnotationManager::registerAnnotationFactory(AID, TypeAnFactory, this); + unsigned char ByteAl) { // If this assert triggers, a pass "required" TargetData information, but the // top level tool did not provide once for it. We do not want to default @@ -114,10 +100,7 @@ ByteAlignment = ByteAl; } -TargetData::TargetData(const std::string &ToolName, const Module *M) - : AID(AnnotationManager::getID("TargetData::" + ToolName)) { - AnnotationManager::registerAnnotationFactory(AID, TypeAnFactory, this); - +TargetData::TargetData(const std::string &ToolName, const Module *M) { LittleEndian = M->getEndianness() != Module::BigEndian; PointerSize = M->getPointerSize() != Module::Pointer64 ? 4 : 8; PointerAlignment = PointerSize; @@ -129,8 +112,38 @@ ByteAlignment = 1; } +static std::map, + StructLayout> *Layouts = 0; + + TargetData::~TargetData() { - AnnotationManager::registerAnnotationFactory(AID, 0); // Deregister factory + if (Layouts) { + // Remove any layouts for this TD. + std::map, StructLayout>::iterator + I = Layouts->lower_bound(std::make_pair(this, (const StructType*)0)); + while (I != Layouts->end() && I->first.first == this) + Layouts->erase(I++); + if (Layouts->empty()) { + delete Layouts; + Layouts = 0; + } + } +} + +const StructLayout *TargetData::getStructLayout(const StructType *Ty) const { + if (Layouts == 0) + Layouts = new std::map, + StructLayout>(); + std::map, + StructLayout>::iterator + I = Layouts->lower_bound(std::make_pair(this, Ty)); + if (I != Layouts->end() && I->first.first == this && I->first.second == Ty) + return &I->second; + else { + return &Layouts->insert(I, std::make_pair(std::make_pair(this, Ty), + StructLayout(Ty, *this)))->second; + } } static inline void getTypeInfo(const Type *Ty, const TargetData *TD, From lattner at cs.uiuc.edu Thu Feb 26 02:03:41 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Feb 26 02:03:41 2004 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/TargetData.h Message-ID: <200402260802.CAA27272@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: TargetData.h updated: 1.22 -> 1.23 --- Log message: Make TargetData no longer use annotations! --- Diffs of the changes: (+6 -14) Index: llvm/include/llvm/Target/TargetData.h diff -u llvm/include/llvm/Target/TargetData.h:1.22 llvm/include/llvm/Target/TargetData.h:1.23 --- llvm/include/llvm/Target/TargetData.h:1.22 Sun Dec 21 23:00:45 2003 +++ llvm/include/llvm/Target/TargetData.h Thu Feb 26 02:01:57 2004 @@ -21,9 +21,9 @@ #define LLVM_TARGET_TARGETDATA_H #include "llvm/Pass.h" -#include "Support/Annotation.h" #include "Support/DataTypes.h" #include +#include namespace llvm { @@ -42,9 +42,6 @@ unsigned char DoubleAlignment; // Defaults to 8 bytes unsigned char PointerSize; // Defaults to 8 bytes unsigned char PointerAlignment; // Defaults to 8 bytes - AnnotationID AID; // AID for structure layout annotation - - static Annotation *TypeAnFactory(AnnotationID, const Annotable *, void *); public: TargetData(const std::string &TargetName = "", bool LittleEndian = false, @@ -69,7 +66,6 @@ unsigned char getDoubleAlignment() const { return DoubleAlignment; } unsigned char getPointerAlignment() const { return PointerAlignment; } unsigned char getPointerSize() const { return PointerSize; } - AnnotationID getStructLayoutAID() const { return AID; } /// getTypeSize - Return the number of bytes necessary to hold the specified /// type @@ -89,23 +85,19 @@ uint64_t getIndexedOffset(const Type *Ty, const std::vector &Indices) const; - inline const StructLayout *getStructLayout(const StructType *Ty) const { - return (const StructLayout*) - ((const Annotable*)Ty)->getOrCreateAnnotation(AID); - } + const StructLayout *getStructLayout(const StructType *Ty) const; }; -// This annotation (attached ONLY to StructType classes) is used to lazily -// calculate structure layout information for a target machine, based on the -// TargetData structure. +// This object is used to lazily calculate structure layout information for a +// target machine, based on the TargetData structure. // -struct StructLayout : public Annotation { +struct StructLayout { std::vector MemberOffsets; uint64_t StructSize; unsigned StructAlignment; private: friend class TargetData; // Only TargetData can create this class - inline StructLayout(const StructType *ST, const TargetData &TD); + StructLayout(const StructType *ST, const TargetData &TD); }; } // End llvm namespace From lattner at cs.uiuc.edu Thu Feb 26 02:05:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Feb 26 02:05:01 2004 Subject: [llvm-commits] CVS: llvm/docs/ReleaseNotes.html Message-ID: <200402260803.CAA27381@zion.cs.uiuc.edu> Changes in directory llvm/docs: ReleaseNotes.html updated: 1.135 -> 1.136 --- Log message: add note --- Diffs of the changes: (+3 -1) Index: llvm/docs/ReleaseNotes.html diff -u llvm/docs/ReleaseNotes.html:1.135 llvm/docs/ReleaseNotes.html:1.136 --- llvm/docs/ReleaseNotes.html:1.135 Wed Feb 25 18:08:25 2004 +++ llvm/docs/ReleaseNotes.html Thu Feb 26 02:02:57 2004 @@ -115,6 +115,8 @@
  • The X86 backend now generates substantially better native code, and is faster.
  • The C backend has been turned moved from the "llvm-dis" tool to the "llc" tool. You can activate it with "llc -march=c foo.bc -o foo.c".
  • +
  • LLVM includes a new interprocedural optimization that marks global variables +"constant" when they are provably never written to.
  • @@ -607,7 +609,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /> The LLVM Compiler Infrastructure
    - Last modified: $Date: 2004/02/26 00:08:25 $ + Last modified: $Date: 2004/02/26 08:02:57 $ From lattner at cs.uiuc.edu Thu Feb 26 02:05:42 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Feb 26 02:05:42 2004 Subject: [llvm-commits] CVS: poolalloc/test/TEST.poolalloc.Makefile Message-ID: <200402260804.CAA27822@zion.cs.uiuc.edu> Changes in directory poolalloc/test: TEST.poolalloc.Makefile updated: 1.14 -> 1.15 --- Log message: correct dependencies --- Diffs of the changes: (+2 -2) Index: poolalloc/test/TEST.poolalloc.Makefile diff -u poolalloc/test/TEST.poolalloc.Makefile:1.14 poolalloc/test/TEST.poolalloc.Makefile:1.15 --- poolalloc/test/TEST.poolalloc.Makefile:1.14 Tue Feb 24 15:02:05 2004 +++ poolalloc/test/TEST.poolalloc.Makefile Thu Feb 26 02:04:07 2004 @@ -31,7 +31,7 @@ # This rule runs the pool allocator on the .llvm.bc file to produce a new .bc # file $(PROGRAMS_TO_TEST:%=Output/%.$(TEST).transformed.bc): \ -Output/%.$(TEST).transformed.bc: Output/%.llvm.bc $(PA_SO) +Output/%.$(TEST).transformed.bc: Output/%.llvm.bc $(PA_SO) $(LOPT) - at rm -f $(CURDIR)/$@.info -$(OPT_PA_STATS) -q -poolalloc $(EXTRA_PA_FLAGS) -globaldce -ipconstprop -deadargelim $< -o $@ -f 2>&1 > $@.out @@ -100,4 +100,4 @@ @echo "---------------------------------------------------------------" @cat $< -REPORT_DEPENDENCIES := $(PA_RT_O) $(PA_SO) $(PROGRAMS_TO_TEST:%=Output/%.llvm.bc) $(LLC) +REPORT_DEPENDENCIES := $(PA_RT_O) $(PA_SO) $(PROGRAMS_TO_TEST:%=Output/%.llvm.bc) $(LLC) $(LOPT) From lattner at cs.uiuc.edu Thu Feb 26 02:09:00 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Feb 26 02:09:00 2004 Subject: [llvm-commits] CVS: llvm/include/llvm/Function.h Value.h Message-ID: <200402260808.CAA28298@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm: Function.h updated: 1.49 -> 1.50 Value.h updated: 1.49 -> 1.50 --- Log message: Annotations are evil. This makes Value not derive from Annotable, which makes all dynamically allocated LLVM values 4 bytes smaller, eliminate some vtables, and make Value's destructor faster. This makes Function derive from Annotation now because it is the only core LLVM class that still has an annotation stuck onto it: MachineFunction. MachineFunction is obviously horrible and gross (like most other annotations), but will be the subject of refactorings later in the future. Besides many fewer Function objects are dynamically allocated that instructions blocks, constants, types, etc... :) --- Diffs of the changes: (+3 -3) Index: llvm/include/llvm/Function.h diff -u llvm/include/llvm/Function.h:1.49 llvm/include/llvm/Function.h:1.50 --- llvm/include/llvm/Function.h:1.49 Tue Nov 11 16:41:29 2003 +++ llvm/include/llvm/Function.h Thu Feb 26 02:08:38 2004 @@ -21,6 +21,7 @@ #include "llvm/GlobalValue.h" #include "llvm/BasicBlock.h" #include "llvm/Argument.h" +#include "Support/Annotation.h" namespace llvm { @@ -44,7 +45,7 @@ static iplist &getList(Function *F); }; -class Function : public GlobalValue { +class Function : public GlobalValue, public Annotable { public: typedef iplist ArgumentListType; typedef iplist BasicBlockListType; Index: llvm/include/llvm/Value.h diff -u llvm/include/llvm/Value.h:1.49 llvm/include/llvm/Value.h:1.50 --- llvm/include/llvm/Value.h:1.49 Sat Jan 10 15:40:29 2004 +++ llvm/include/llvm/Value.h Thu Feb 26 02:08:38 2004 @@ -19,7 +19,6 @@ #include "llvm/AbstractTypeUser.h" #include "llvm/Use.h" -#include "Support/Annotation.h" #include "Support/Casting.h" #include @@ -42,7 +41,7 @@ /// Value - The base class of all values computed by a program that may be used /// as operands to other values. /// -struct Value : public Annotable { // Values are annotable +struct Value { enum ValueTy { TypeVal, // This is an instance of Type ConstantVal, // This is an instance of Constant From lattner at cs.uiuc.edu Thu Feb 26 14:03:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Feb 26 14:03:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Transforms/IPO/DeadTypeElimination.cpp Message-ID: <200402262002.OAA04920@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/IPO: DeadTypeElimination.cpp updated: 1.48 -> 1.49 --- Log message: Since LLVM uses structure type equivalence, it isn't useful to keep around multiple type names for the same structural type. Make DTE eliminate all but one of the type names --- Diffs of the changes: (+11 -10) Index: llvm/lib/Transforms/IPO/DeadTypeElimination.cpp diff -u llvm/lib/Transforms/IPO/DeadTypeElimination.cpp:1.48 llvm/lib/Transforms/IPO/DeadTypeElimination.cpp:1.49 --- llvm/lib/Transforms/IPO/DeadTypeElimination.cpp:1.48 Fri Nov 21 15:54:21 2003 +++ llvm/lib/Transforms/IPO/DeadTypeElimination.cpp Thu Feb 26 14:02:23 2004 @@ -49,12 +49,12 @@ // ShouldNukeSymtabEntry - Return true if this module level symbol table entry // should be eliminated. // -static inline bool ShouldNukeSymtabEntry(const std::pair&E){ +static inline bool ShouldNukeSymtabEntry(const Type *Ty){ // Nuke all names for primitive types! - if (cast(E.second)->isPrimitiveType()) return true; + if (Ty->isPrimitiveType()) return true; // Nuke all pointers to primitive types as well... - if (const PointerType *PT = dyn_cast(E.second)) + if (const PointerType *PT = dyn_cast(Ty)) if (PT->getElementType()->isPrimitiveType()) return true; return false; @@ -69,8 +69,7 @@ bool Changed = false; SymbolTable &ST = M.getSymbolTable(); - const std::set &UsedTypes = - getAnalysis().getTypes(); + std::set UsedTypes = getAnalysis().getTypes(); // Check the symbol table for superfluous type entries... // @@ -79,18 +78,20 @@ if (STI != ST.end()) { // Loop over all entries in the type plane... SymbolTable::VarMap &Plane = STI->second; - for (SymbolTable::VarMap::iterator PI = Plane.begin(); PI != Plane.end();) + for (SymbolTable::VarMap::iterator PI = Plane.begin(); PI != Plane.end();) { // If this entry should be unconditionally removed, or if we detect that // the type is not used, remove it. - if (ShouldNukeSymtabEntry(*PI) || - !UsedTypes.count(cast(PI->second))) { - SymbolTable::VarMap::iterator PJ = PI++; - Plane.erase(PJ); + const Type *RHS = cast(PI->second); + if (ShouldNukeSymtabEntry(RHS) || !UsedTypes.count(RHS)) { + Plane.erase(PI++); ++NumKilled; Changed = true; } else { ++PI; + // We only need to leave one name for each type. + UsedTypes.erase(RHS); } + } } return Changed; From criswell at cs.uiuc.edu Thu Feb 26 14:17:01 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Feb 26 14:17:01 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/Povray/Makefile Message-ID: <200402262016.OAA23532@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/Povray: Makefile updated: 1.3 -> 1.4 --- Log message: Makefile for Povray 3.1g. --- Diffs of the changes: (+5 -4) Index: llvm/test/Programs/External/Povray/Makefile diff -u llvm/test/Programs/External/Povray/Makefile:1.3 llvm/test/Programs/External/Povray/Makefile:1.4 --- llvm/test/Programs/External/Povray/Makefile:1.3 Fri Feb 20 16:10:33 2004 +++ llvm/test/Programs/External/Povray/Makefile Thu Feb 26 14:16:01 2004 @@ -3,11 +3,12 @@ include $(LEVEL)/Makefile.config PROG = povray -CPPFLAGS += -I$(BUILD_SRC_ROOT)/runtime/libpng -DPREFIX=\"$(BUILD_OBJ_DIR)\" -DSYSCONFDIR=\"$(POVRAY_ROOT)\" -DPOV_LIB_DIR=\"$(BUILD_OBJ_DIR)/lib\" -IOutput/src -UHAVE_LIBVGA -LIBS += -lz -lpng -lstdc++ -ltiff -LDFLAGS += -L$(BUILD_OBJ_ROOT)/lib/$(CONFIGURATION) -lz -lpng -lstdc++ -ltiff -SourceDir = $(POVRAY_ROOT)/src +SourceDir = $(POVRAY_ROOT)/source + +CPPFLAGS += -I$(POVRAY_ROOT)/source/unix -I$(BUILD_SRC_ROOT)/runtime/libpng -DPREFIX=\"$(BUILD_OBJ_DIR)\" -DSYSCONFDIR=\"$(POVRAY_ROOT)\" -DPOV_LIB_DIR=\"$(BUILD_OBJ_DIR)/lib\" -IOutput/src -UHAVE_LIBVGA +LIBS += -lz -lpng -lstdc++ -ltiff -ljpeg +LDFLAGS += -L$(BUILD_OBJ_ROOT)/lib/$(CONFIGURATION) -lz -lpng -lstdc++ -ltiff -ljpeg RUN_OPTIONS = -I$(POVRAY_ROOT)/scenes/advanced/chess2.pov -L$(POVRAY_ROOT)/include -GA$<.junk -O- include ../../MultiSource/Makefile.multisrc From criswell at cs.uiuc.edu Thu Feb 26 14:24:01 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Feb 26 14:24:01 2004 Subject: [llvm-commits] CVS: llvm/autoconf/configure.ac Message-ID: <200402262023.OAA31016@choi.cs.uiuc.edu> Changes in directory llvm/autoconf: configure.ac updated: 1.81 -> 1.82 --- Log message: Modified the default pathname for Povray. --- Diffs of the changes: (+3 -3) Index: llvm/autoconf/configure.ac diff -u llvm/autoconf/configure.ac:1.81 llvm/autoconf/configure.ac:1.82 --- llvm/autoconf/configure.ac:1.81 Wed Feb 25 22:14:10 2004 +++ llvm/autoconf/configure.ac Thu Feb 26 14:22:59 2004 @@ -346,9 +346,9 @@ AC_ARG_ENABLE(povray,AC_HELP_STRING([--enable-povray],[Compile Povray benchmark (default is NO)]),,enableval=no) if test ${enableval} = "no" then - if test -d /home/vadve/criswell/Downloads/povray-3.50c + if test -d /home/vadve/shared/benchmarks/povray31 then - AC_SUBST(POVRAY_ROOT,[/home/vadve/criswell/Downloads/povray-3.50c]) + AC_SUBST(POVRAY_ROOT,[/home/vadve/shared/benchmarks/povray31]) AC_SUBST(USE_POVRAY,[[USE_POVRAY=1]]) else AC_SUBST(USE_POVRAY,[[]]) @@ -357,7 +357,7 @@ else if test ${enableval} = "" then - AC_SUBST(POVRAY_ROOT,[/home/vadve/criswell/Downloads/povray-3.50c]) + AC_SUBST(POVRAY_ROOT,[/home/vadve/shared/benchmarks/povray31]) else AC_SUBST(POVRAY_ROOT,[${enableval}]) fi From criswell at cs.uiuc.edu Thu Feb 26 14:24:40 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Feb 26 14:24:40 2004 Subject: [llvm-commits] CVS: llvm/configure Message-ID: <200402262023.OAA31009@choi.cs.uiuc.edu> Changes in directory llvm: configure updated: 1.83 -> 1.84 --- Log message: Modified the default pathname for Povray. --- Diffs of the changes: (+3 -3) Index: llvm/configure diff -u llvm/configure:1.83 llvm/configure:1.84 --- llvm/configure:1.83 Wed Feb 25 22:14:10 2004 +++ llvm/configure Thu Feb 26 14:22:57 2004 @@ -21905,9 +21905,9 @@ fi; if test ${enableval} = "no" then - if test -d /home/vadve/criswell/Downloads/povray-3.50c + if test -d /home/vadve/shared/benchmarks/povray31 then - POVRAY_ROOT=/home/vadve/criswell/Downloads/povray-3.50c + POVRAY_ROOT=/home/vadve/shared/benchmarks/povray31 USE_POVRAY=USE_POVRAY=1 @@ -21919,7 +21919,7 @@ else if test ${enableval} = "" then - POVRAY_ROOT=/home/vadve/criswell/Downloads/povray-3.50c + POVRAY_ROOT=/home/vadve/shared/benchmarks/povray31 else POVRAY_ROOT=${enableval} From alkis at cs.uiuc.edu Thu Feb 26 16:01:01 2004 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Thu Feb 26 16:01:01 2004 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/MRegisterInfo.h Message-ID: <200402262200.QAA24536@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: MRegisterInfo.h updated: 1.38 -> 1.39 --- Log message: Uncomment assertions that register# != 0 on calls to MRegisterInfo::is{Physical,Virtual}Register. Apply appropriate fixes to relevant files. --- Diffs of the changes: (+2 -2) Index: llvm/include/llvm/Target/MRegisterInfo.h diff -u llvm/include/llvm/Target/MRegisterInfo.h:1.38 llvm/include/llvm/Target/MRegisterInfo.h:1.39 --- llvm/include/llvm/Target/MRegisterInfo.h:1.38 Wed Feb 25 17:56:36 2004 +++ llvm/include/llvm/Target/MRegisterInfo.h Thu Feb 26 16:00:20 2004 @@ -141,14 +141,14 @@ /// isPhysicalRegister - Return true if the specified register number is in /// the physical register namespace. static bool isPhysicalRegister(unsigned Reg) { -// assert(Reg && "this is not a register!"); + assert(Reg && "this is not a register!"); return Reg < FirstVirtualRegister; } /// isVirtualRegister - Return true if the specified register number is in /// the virtual register namespace. static bool isVirtualRegister(unsigned Reg) { -// assert(Reg && "this is not a register!"); + assert(Reg && "this is not a register!"); return Reg >= FirstVirtualRegister; } From alkis at cs.uiuc.edu Thu Feb 26 16:01:38 2004 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Thu Feb 26 16:01:38 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/InstSelectSimple.cpp Message-ID: <200402262200.QAA24522@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: InstSelectSimple.cpp updated: 1.179 -> 1.180 --- Log message: Uncomment assertions that register# != 0 on calls to MRegisterInfo::is{Physical,Virtual}Register. Apply appropriate fixes to relevant files. --- Diffs of the changes: (+5 -4) Index: llvm/lib/Target/X86/InstSelectSimple.cpp diff -u llvm/lib/Target/X86/InstSelectSimple.cpp:1.179 llvm/lib/Target/X86/InstSelectSimple.cpp:1.180 --- llvm/lib/Target/X86/InstSelectSimple.cpp:1.179 Wed Feb 25 19:20:02 2004 +++ llvm/lib/Target/X86/InstSelectSimple.cpp Thu Feb 26 16:00:19 2004 @@ -696,14 +696,15 @@ for (MachineFunction::iterator BB = F->begin(), E = F->end(); BB != E; ++BB) { for (MachineBasicBlock::iterator I = BB->begin(), E = BB->end(); I!=E; ++I) - for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) - if (I->getOperand(i).isRegister()) { - unsigned Reg = I->getOperand(i).getReg(); + for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) { + MachineOperand& MO = I->getOperand(i); + if (MO.isRegister() && MO.getReg()) { + unsigned Reg = MO.getReg(); if (MRegisterInfo::isVirtualRegister(Reg)) if (RegMap.getRegClass(Reg)->getSize() == 10) goto UsesFPReg; } - + } // If we haven't found an FP register use or def in this basic block, check // to see if any of our successors has an FP PHI node, which will cause a // copy to be inserted into this block. From alkis at cs.uiuc.edu Thu Feb 26 16:02:15 2004 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Thu Feb 26 16:02:15 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/RegAllocLocal.cpp LiveVariables.cpp LiveIntervals.cpp Message-ID: <200402262200.QAA24531@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: RegAllocLocal.cpp updated: 1.59 -> 1.60 LiveVariables.cpp updated: 1.26 -> 1.27 LiveIntervals.cpp updated: 1.63 -> 1.64 --- Log message: Uncomment assertions that register# != 0 on calls to MRegisterInfo::is{Physical,Virtual}Register. Apply appropriate fixes to relevant files. --- Diffs of the changes: (+23 -17) Index: llvm/lib/CodeGen/RegAllocLocal.cpp diff -u llvm/lib/CodeGen/RegAllocLocal.cpp:1.59 llvm/lib/CodeGen/RegAllocLocal.cpp:1.60 --- llvm/lib/CodeGen/RegAllocLocal.cpp:1.59 Wed Feb 25 23:21:21 2004 +++ llvm/lib/CodeGen/RegAllocLocal.cpp Thu Feb 26 16:00:20 2004 @@ -542,11 +542,13 @@ // physical register is referenced by the instruction, that it is guaranteed // to be live-in, or the input is badly hosed. // - for (unsigned i = 0; i != MI->getNumOperands(); ++i) - if (MI->getOperand(i).isUse() && - !MI->getOperand(i).isDef() && MI->getOperand(i).isRegister() && - MRegisterInfo::isVirtualRegister(MI->getOperand(i).getReg())) + for (unsigned i = 0; i != MI->getNumOperands(); ++i) { + MachineOperand& MO = MI->getOperand(i); + // here we are looking for only used operands (never def&use) + if (!MO.isDef() && MO.isRegister() && MO.getReg() && + MRegisterInfo::isVirtualRegister(MO.getReg())) MI = reloadVirtReg(MBB, MI, i); + } // If this instruction is the last user of anything in registers, kill the // value, freeing the register being used, so it doesn't need to be @@ -573,10 +575,11 @@ // Loop over all of the operands of the instruction, spilling registers that // are defined, and marking explicit destinations in the PhysRegsUsed map. - for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) - if (MI->getOperand(i).isDef() && MI->getOperand(i).isRegister() && - MRegisterInfo::isPhysicalRegister(MI->getOperand(i).getReg())) { - unsigned Reg = MI->getOperand(i).getReg(); + for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { + MachineOperand& MO = MI->getOperand(i); + if (MO.isDef() && MO.isRegister() && MO.getReg() && + MRegisterInfo::isPhysicalRegister(MO.getReg())) { + unsigned Reg = MO.getReg(); spillPhysReg(MBB, MI, Reg, true); // Spill any existing value in the reg PhysRegsUsed[Reg] = 0; // It is free and reserved now PhysRegsUseOrder.push_back(Reg); @@ -586,6 +589,7 @@ PhysRegsUsed[*AliasSet] = 0; // It is free and reserved now } } + } // Loop over the implicit defs, spilling them as well. for (const unsigned *ImplicitDefs = TID.ImplicitDefs; @@ -606,10 +610,11 @@ // implicit defs and assign them to a register, spilling incoming values if // we need to scavenge a register. // - for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) - if (MI->getOperand(i).isDef() && MI->getOperand(i).isRegister() && - MRegisterInfo::isVirtualRegister(MI->getOperand(i).getReg())) { - unsigned DestVirtReg = MI->getOperand(i).getReg(); + for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { + MachineOperand& MO = MI->getOperand(i); + if (MO.isDef() && MO.isRegister() && MO.getReg() && + MRegisterInfo::isVirtualRegister(MO.getReg())) { + unsigned DestVirtReg = MO.getReg(); unsigned DestPhysReg; // If DestVirtReg already has a value, use it. @@ -618,6 +623,7 @@ markVirtRegModified(DestVirtReg); MI->SetMachineOperandReg(i, DestPhysReg); // Assign the output register } + } // If this instruction defines any registers that are immediately dead, // kill them now. Index: llvm/lib/CodeGen/LiveVariables.cpp diff -u llvm/lib/CodeGen/LiveVariables.cpp:1.26 llvm/lib/CodeGen/LiveVariables.cpp:1.27 --- llvm/lib/CodeGen/LiveVariables.cpp:1.26 Thu Feb 19 12:32:29 2004 +++ llvm/lib/CodeGen/LiveVariables.cpp Thu Feb 26 16:00:20 2004 @@ -232,7 +232,7 @@ // Process all explicit uses... for (unsigned i = 0; i != NumOperandsToProcess; ++i) { MachineOperand &MO = MI->getOperand(i); - if (MO.isUse() && MO.isRegister()) { + if (MO.isUse() && MO.isRegister() && MO.getReg()) { if (MRegisterInfo::isVirtualRegister(MO.getReg())){ HandleVirtRegUse(getVarInfo(MO.getReg()), MBB, MI); } else if (MRegisterInfo::isPhysicalRegister(MO.getReg()) && @@ -250,7 +250,7 @@ // Process all explicit defs... for (unsigned i = 0; i != NumOperandsToProcess; ++i) { MachineOperand &MO = MI->getOperand(i); - if (MO.isDef() && MO.isRegister()) { + if (MO.isDef() && MO.isRegister() && MO.getReg()) { if (MRegisterInfo::isVirtualRegister(MO.getReg())) { VarInfo &VRInfo = getVarInfo(MO.getReg()); @@ -325,7 +325,7 @@ // the instruction. for (unsigned i = 0, e = NewMI->getNumOperands(); i != e; ++i) { MachineOperand &MO = NewMI->getOperand(i); - if (MO.isRegister() && MO.isDef() && + if (MO.isRegister() && MO.isDef() && MO.getReg() && MRegisterInfo::isVirtualRegister(MO.getReg())) { unsigned Reg = MO.getReg(); VarInfo &VI = getVarInfo(Reg); Index: llvm/lib/CodeGen/LiveIntervals.cpp diff -u llvm/lib/CodeGen/LiveIntervals.cpp:1.63 llvm/lib/CodeGen/LiveIntervals.cpp:1.64 --- llvm/lib/CodeGen/LiveIntervals.cpp:1.63 Sun Feb 22 19:01:21 2004 +++ llvm/lib/CodeGen/LiveIntervals.cpp Thu Feb 26 16:00:20 2004 @@ -134,7 +134,7 @@ mii != mie; ) { for (unsigned i = 0; i < mii->getNumOperands(); ++i) { const MachineOperand& mop = mii->getOperand(i); - if (mop.isRegister()) { + if (mop.isRegister() && mop.getReg()) { // replace register with representative register unsigned reg = rep(mop.getReg()); mii->SetMachineOperandReg(i, reg); @@ -421,7 +421,7 @@ for (int i = mi->getNumOperands() - 1; i >= 0; --i) { MachineOperand& mop = mi->getOperand(i); // handle register defs - build intervals - if (mop.isRegister() && mop.isDef()) + if (mop.isRegister() && mop.getReg() && mop.isDef()) handleRegisterDef(mbb, mi, mop.getReg()); } } From lattner at cs.uiuc.edu Thu Feb 26 16:08:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Feb 26 16:08:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Analysis/DataStructure/Local.cpp Message-ID: <200402262207.QAA25578@zion.cs.uiuc.edu> Changes in directory llvm/lib/Analysis/DataStructure: Local.cpp updated: 1.92 -> 1.93 --- Log message: Be a good little compiler and handle direct calls efficiently, even if there are beastly ConstantPointerRefs in the way... --- Diffs of the changes: (+13 -10) Index: llvm/lib/Analysis/DataStructure/Local.cpp diff -u llvm/lib/Analysis/DataStructure/Local.cpp:1.92 llvm/lib/Analysis/DataStructure/Local.cpp:1.93 --- llvm/lib/Analysis/DataStructure/Local.cpp:1.92 Wed Feb 25 21:43:08 2004 +++ llvm/lib/Analysis/DataStructure/Local.cpp Thu Feb 26 16:07:22 2004 @@ -465,8 +465,12 @@ } void GraphBuilder::visitCallSite(CallSite CS) { + Value *Callee = CS.getCalledValue(); + if (ConstantPointerRef *CPR = dyn_cast(Callee)) + Callee = CPR->getValue(); + // Special case handling of certain libc allocation functions here. - if (Function *F = CS.getCalledFunction()) + if (Function *F = dyn_cast(Callee)) if (F->isExternal()) switch (F->getIntrinsicID()) { case Intrinsic::memmove: @@ -809,12 +813,11 @@ if (isPointerType(I->getType())) RetVal = getValueDest(*I); - DSNode *Callee = 0; - if (DisableDirectCallOpt || !isa(CS.getCalledValue())) { - Callee = getValueDest(*CS.getCalledValue()).getNode(); - if (Callee == 0) { - std::cerr << "WARNING: Program is calling through a null pointer?\n" - << *I; + DSNode *CalleeNode = 0; + if (DisableDirectCallOpt || !isa(Callee)) { + CalleeNode = getValueDest(*Callee).getNode(); + if (CalleeNode == 0) { + std::cerr << "WARNING: Program is calling through a null pointer?\n"<< *I; return; // Calling a null pointer? } } @@ -828,10 +831,10 @@ Args.push_back(getValueDest(**I)); // Add a new function call entry... - if (Callee) - FunctionCalls->push_back(DSCallSite(CS, RetVal, Callee, Args)); + if (CalleeNode) + FunctionCalls->push_back(DSCallSite(CS, RetVal, CalleeNode, Args)); else - FunctionCalls->push_back(DSCallSite(CS, RetVal, CS.getCalledFunction(), + FunctionCalls->push_back(DSCallSite(CS, RetVal, cast(Callee), Args)); } From criswell at cs.uiuc.edu Thu Feb 26 16:22:00 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Feb 26 16:22:00 2004 Subject: [llvm-commits] CVS: llvm/lib/Target/CBackend/Writer.cpp Message-ID: <200402262221.QAA32530@choi.cs.uiuc.edu> Changes in directory llvm/lib/Target/CBackend: Writer.cpp updated: 1.164 -> 1.165 --- Log message: Fixes for PR258 and PR259. Functions with linkonce linkage are declared with weak linkage. Global floating point constants used to represent unprintable values (such as NaN and infinity) are declared static so that they don't interfere with other CBE generated translation units. --- Diffs of the changes: (+3 -3) Index: llvm/lib/Target/CBackend/Writer.cpp diff -u llvm/lib/Target/CBackend/Writer.cpp:1.164 llvm/lib/Target/CBackend/Writer.cpp:1.165 --- llvm/lib/Target/CBackend/Writer.cpp:1.164 Tue Feb 24 12:34:10 2004 +++ llvm/lib/Target/CBackend/Writer.cpp Thu Feb 26 16:20:58 2004 @@ -690,6 +690,7 @@ if (!I->getIntrinsicID()) { printFunctionSignature(I, true); if (I->hasWeakLinkage()) Out << " __ATTRIBUTE_WEAK__"; + if (I->hasLinkOnceLinkage()) Out << " __ATTRIBUTE_WEAK__"; Out << ";\n"; } } @@ -788,12 +789,12 @@ if (FPC->getType() == Type::DoubleTy) { DBLUnion.D = Val; - Out << "const ConstantDoubleTy FPConstant" << FPCounter++ + Out << "static const ConstantDoubleTy FPConstant" << FPCounter++ << " = 0x" << std::hex << DBLUnion.U << std::dec << "ULL; /* " << Val << " */\n"; } else if (FPC->getType() == Type::FloatTy) { FLTUnion.F = Val; - Out << "const ConstantFloatTy FPConstant" << FPCounter++ + Out << "static const ConstantFloatTy FPConstant" << FPCounter++ << " = 0x" << std::hex << FLTUnion.U << std::dec << "U; /* " << Val << " */\n"; } else @@ -890,7 +891,6 @@ void CWriter::printFunctionSignature(const Function *F, bool Prototype) { if (F->hasInternalLinkage()) Out << "static "; - if (F->hasLinkOnceLinkage()) Out << "inline "; // Loop over the arguments, printing them... const FunctionType *FT = cast(F->getFunctionType()); From criswell at cs.uiuc.edu Thu Feb 26 17:01:42 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Feb 26 17:01:42 2004 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/CBackend/2004-02-26-FPNotPrintableConstants.llx 2004-02-26-LinkOnceFunctions.llx Message-ID: <200402262255.QAA02056@choi.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/CBackend: 2004-02-26-FPNotPrintableConstants.llx added (r1.1) 2004-02-26-LinkOnceFunctions.llx added (r1.1) --- Log message: Regression tests for PR258 and PR259. 2004-02-26-FPNotPrintableConstants.llx ensures that constants used in an LLVM program are declared static if they are assigned to global variables. 2004-02-26-LinkOnceFunctions.llx ensures that linkonce functions get the weak attribute. --- Diffs of the changes: (+16 -0) Index: llvm/test/Regression/CodeGen/CBackend/2004-02-26-FPNotPrintableConstants.llx diff -c /dev/null llvm/test/Regression/CodeGen/CBackend/2004-02-26-FPNotPrintableConstants.llx:1.1 *** /dev/null Thu Feb 26 16:55:21 2004 --- llvm/test/Regression/CodeGen/CBackend/2004-02-26-FPNotPrintableConstants.llx Thu Feb 26 16:55:11 2004 *************** *** 0 **** --- 1,8 ---- + ; This is a non-normal FP value: it's a nan. + ; RUN: llvm-as < %s | llc -march=c + ; llvm-as < %s | llc -march=c | grep FPConstant | grep static + + float %func () { + ret float 0xFF20000000000000 + } + Index: llvm/test/Regression/CodeGen/CBackend/2004-02-26-LinkOnceFunctions.llx diff -c /dev/null llvm/test/Regression/CodeGen/CBackend/2004-02-26-LinkOnceFunctions.llx:1.1 *** /dev/null Thu Feb 26 16:55:21 2004 --- llvm/test/Regression/CodeGen/CBackend/2004-02-26-LinkOnceFunctions.llx Thu Feb 26 16:55:11 2004 *************** *** 0 **** --- 1,8 ---- + ; RUN: llvm-as < %s | llc -march=c | grep func1 | grep WEAK + + implementation + + linkonce int %func1 () { + ret int 5 + } + From criswell at cs.uiuc.edu Thu Feb 26 17:03:01 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Feb 26 17:03:01 2004 Subject: [llvm-commits] CVS: llvm/utils/llvm-native-gxx Message-ID: <200402262301.RAA05931@choi.cs.uiuc.edu> Changes in directory llvm/utils: llvm-native-gxx added (r1.1) --- Log message: C++ version of llvm-native-gcc. --- Diffs of the changes: (+249 -0) Index: llvm/utils/llvm-native-gxx diff -c /dev/null llvm/utils/llvm-native-gxx:1.1 *** /dev/null Thu Feb 26 17:01:33 2004 --- llvm/utils/llvm-native-gxx Thu Feb 26 17:01:21 2004 *************** *** 0 **** --- 1,249 ---- + #!/usr/bin/perl + # Wrapper around LLVM tools to generate a native .o from llvm-gxx using an + # LLVM back-end (CBE by default). + + # set up defaults. + $Verbose = 0; + $SaveTemps = 1; + $PreprocessOnly = 0; + $CompileDontLink = 0; + $Backend = 'cbe'; + chomp ($ProgramName = `basename $0`); + + sub boldprint { + print "", @_, ""; + } + + # process command-line options. + # most of these are passed on to llvm-gxx. + $GCCOptions = ""; + for ($i = 0; $i <= $#ARGV; ++$i) { + if ($ARGV[$i] =~ /-mllvm-backend=([a-z0-9]*)/) { + $Backend = $1; + if ($ProgramName =~ /llvm-native-gxx/) { + splice (@ARGV, $i, 1); + --$i; + } + } elsif ($ARGV[$i] eq "-E") { + $PreprocessOnly = 1; + } elsif ($ARGV[$i] eq "-c") { + $GCCOptions .= " " . $ARGV[$i]; + $CompileDontLink = 1; + } elsif ($ARGV[$i] eq "-v") { + $GCCOptions .= " " . $ARGV[$i]; + $Verbose = 1; + } elsif ($ARGV[$i] eq "-o") { + $OutputFile = $ARGV[$i + 1]; + } elsif ($ARGV[$i] eq "-save-temps") { + $GCCOptions .= " " . $ARGV[$i]; + $SaveTemps = 1; + } elsif ($ARGV[$i] =~ /\.bc$/) { + push (@BytecodeFiles, $ARGV[$i]); + } elsif ($ARGV[$i] =~ /^-L/) { + $GCCOptions .= " " . $ARGV[$i]; + push (@LibDirs, $ARGV[$i]); + } elsif ($ARGV[$i] =~ /^-l/) { + $GCCOptions .= " " . $ARGV[$i]; + push (@Libs, $ARGV[$i]); + } elsif ($ARGV[$i] =~ /\.(c|cpp|cc|i|ii|C)$/) { + $LastCFile = $ARGV[$i]; + } + } + + sub GetDefaultOutputFileName { + my $DefaultOutputFileBase; + + if ($ProgramName =~ /llvm-native-gxx/) { + $DefaultOutputFileBase = $LastCFile; + } elsif ($ProgramName =~ /native-build/) { + $DefaultOutputFileBase = $BytecodeFiles[0]; + } + + my $def = $DefaultOutputFileBase; + + die "Can't figure out name of output file.\n" + unless $DefaultOutputFileBase + && (($ProgramName !~ /native-build/) + || $#BytecodeFiles == 0); + + print "Warning: defaulting output file name ", + "based on '$DefaultOutputFileBase'\n" if $Verbose; + + if ($ProgramName =~ /llvm-native-gxx/) { + $def =~ s/\.(c|cpp|cc|i|ii|C)$/.o/; + } elsif ($ProgramName =~ /native-build/) { + $def =~ s/\.bc$/.$Backend/; + if ($CompileDontLink) { + $def .= ".o"; + } + } + + return $def; + } + + # run a command, optionally echoing, and quitting if it fails: + sub run { + my $command = join(" ", @_); + print "$command\n" if $Verbose; + $command =~ s/\"/\\\"/g; + system $command and die "$0: $command failed"; + } + + sub LinkBytecodeFilesIntoTemporary { + my $FinalOutputFileName = shift @_; + my @BytecodeFiles = @_; + + my $BCFiles = join (" ", @BytecodeFiles); + my $LinkedBCFile; + if ($SaveTemps) { + $LinkedBCFile = "${FinalOutputFileName}.llvm.bc"; + } else { + $LinkedBCFile = "/tmp/nativebuild-$$.llvm.bc"; + } + run "llvm-link -o $LinkedBCFile $BCFiles"; + return $LinkedBCFile; + } + + sub CompileBytecodeToNative { + my ($BCFile, $Backend, $OutputFile) = @_; + + my $GeneratedCode; + if ($Backend eq 'cbe') { + if ($SaveTemps) { + $GeneratedCode = "${OutputFile}.c"; + } else { + $GeneratedCode = "/tmp/nativebuild-$$.c"; + } + run "llc -march=c -f -o $GeneratedCode $BCFile"; + } elsif ($Backend eq 'llc') { + if ($SaveTemps) { + $GeneratedCode = "${OutputFile}.s"; + } else { + $GeneratedCode = "/tmp/nativebuild-$$.s"; + } + run "llc -f -o $GeneratedCode $BCFile"; + } + my $LibDirs = join (" ", @LibDirs); + my $Libs = join (" ", @Libs); + run "gcc $GCCOptions $GeneratedCode -o $OutputFile $LibDirs $Libs"; + run "rm $BCFile $GeneratedCode" + unless $SaveTemps; + } + + sub CompileCToNative { + my ($LLVMGCCCommand, $Backend, $OutputFile) = @_; + run $LLVMGCCCommand; + if ($PreprocessOnly) { + return; + } + my $BCFile = "${OutputFile}.llvm.bc"; + if ($CompileDontLink) { + run "mv ${OutputFile} $BCFile"; + } else { # gccld messes with the output file name + run "mv ${OutputFile}.bc $BCFile"; + } + my $GeneratedCode; + if ($Backend eq 'cbe') { + $GeneratedCode = "${OutputFile}.cbe.c"; + run "llc -march=c -f -o $GeneratedCode $BCFile"; + } elsif ($Backend eq 'llc') { + $GeneratedCode = "${OutputFile}.llc.s"; + run "llc -f -o $GeneratedCode $BCFile"; + } + my $NativeGCCOptions = ""; + if ($CompileDontLink) { + $NativeGCCOptions = "-c"; + } + run "gcc $NativeGCCOptions $GeneratedCode -o $OutputFile"; + run "rm ${OutputFile}.llvm.bc $GeneratedCode" + unless $SaveTemps; + } + + # guess the name of the output file, if -o was not specified. + $OutputFile = GetDefaultOutputFileName () unless $OutputFile; + print "Output file is $OutputFile\n" if $Verbose; + # do all the dirty work: + if ($ProgramName eq /native-build/) { + my $LinkedBCFile = LinkBytecodeFilesIntoTemporary (@BytecodeFiles); + CompileBytecodeToNative ($LinkedBCFile, $Backend, $OutputFile); + } elsif ($ProgramName =~ /llvm-native-gxx/) { + # build the llvm-gxx command line. + $LLVMGCCCommand = join (" ", ("llvm-g++", @ARGV)); + CompileCToNative ($LLVMGCCCommand, $Backend, $OutputFile); + } + + # we're done. + exit 0; + + __END__ + + =pod + + =head1 NAME + + llvm-native-gxx + + =head1 SYNOPSIS + + llvm-native-g++ [OPTIONS...] FILE + + native-build [OPTIONS...] FILE + + =head1 DESCRIPTION + + llvm-native-g++ is a wrapper around the LLVM command-line tools which generates + a native object (.o) file by compiling FILE with llvm-g++, and then running + an LLVM back-end (CBE by default) over the resulting bytecode, and then + compiling the resulting code to a native object file. + + If called as "native-build", it compiles bytecode to native code, and takes + different options. + + =head1 OPTIONS + + llvm-native-g++ takes the same options as llvm-gcc. All options + except -mllvm-backend=... are passed on to llvm-g++. + + =over 4 + + =item -mllvm-backend=BACKEND + + Use BACKEND for native code generation. + + =item -v + + Print command lines that llvm-native-g++ runs. + + =item -o FILE + + llvm-native-g++ tries to guess the name of the llvm-g++ output file by looking + for this option in the command line. If it can't find it, it finds the last C + or C++ source file named on the command line, and turns its suffix into .o. See + BUGS. + + =item -save-temps + + Save temporary files used by llvm-native-g++ (and llvm-g++, and g++). + + =back + + =head1 BUGS + + llvm-native-g++ only handles the case where llvm-g++ compiles a single + file per invocation. llvm-native-g++ has weak command-line argument + parsing and is a poor substitute for making g++/g++.c do this stuff. + + This manual page does not adequately document native-build mode. + + llvm-native-g++ is pretty gross because it represents the blind merging of two + other scripts that predated it. It could use some code clean-up. + + =head1 SEE ALSO + + g++(1) + + =head1 AUTHOR + + Brian R. Gaeke + + =cut From criswell at cs.uiuc.edu Thu Feb 26 17:04:04 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Feb 26 17:04:04 2004 Subject: [llvm-commits] CVS: llvm/test/Regression/CodeGen/CBackend/2004-02-26-FPNotPrintableConstants.llx Message-ID: <200402262256.QAA02202@choi.cs.uiuc.edu> Changes in directory llvm/test/Regression/CodeGen/CBackend: 2004-02-26-FPNotPrintableConstants.llx updated: 1.1 -> 1.2 --- Log message: Fixed test case to actually check for the static declaration. Oops. --- Diffs of the changes: (+1 -2) Index: llvm/test/Regression/CodeGen/CBackend/2004-02-26-FPNotPrintableConstants.llx diff -u llvm/test/Regression/CodeGen/CBackend/2004-02-26-FPNotPrintableConstants.llx:1.1 llvm/test/Regression/CodeGen/CBackend/2004-02-26-FPNotPrintableConstants.llx:1.2 --- llvm/test/Regression/CodeGen/CBackend/2004-02-26-FPNotPrintableConstants.llx:1.1 Thu Feb 26 16:55:11 2004 +++ llvm/test/Regression/CodeGen/CBackend/2004-02-26-FPNotPrintableConstants.llx Thu Feb 26 16:56:13 2004 @@ -1,6 +1,5 @@ ; This is a non-normal FP value: it's a nan. -; RUN: llvm-as < %s | llc -march=c -; llvm-as < %s | llc -march=c | grep FPConstant | grep static +; RUN: llvm-as < %s | llc -march=c | grep FPConstant | grep static float %func () { ret float 0xFF20000000000000 From criswell at cs.uiuc.edu Thu Feb 26 17:04:43 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Feb 26 17:04:43 2004 Subject: [llvm-commits] CVS: llvm/utils/check-each-file Message-ID: <200402262302.RAA05945@choi.cs.uiuc.edu> Changes in directory llvm/utils: check-each-file updated: 1.3 -> 1.4 --- Log message: Added support for C++ compilation. Made removing the object files a separate sh command so that it can easily be commented out. --- Diffs of the changes: (+3 -2) Index: llvm/utils/check-each-file diff -u llvm/utils/check-each-file:1.3 llvm/utils/check-each-file:1.4 --- llvm/utils/check-each-file:1.3 Wed Feb 11 12:52:05 2004 +++ llvm/utils/check-each-file Thu Feb 26 17:02:25 2004 @@ -10,7 +10,7 @@ linker=./link-$program echo "Building $program with llvm-native-gcc" rm -f $program - gmake -s $program CC=llvm-native-gcc + gmake -e $program CC=llvm-native-gcc CXX=llvm-native-gxx echo "Erasing $program and re-linking it" rm -f $program echo "rm -f $program" > $linker @@ -113,7 +113,8 @@ echo "Recompiling everything with llvm-native-gcc" for f in $files do - rm -f $f && gmake $f CC=llvm-native-gcc + rm -f $f + gmake $f CC=llvm-native-gcc CXX=llvm-native-gxx done rm -f $program $linker From criswell at cs.uiuc.edu Thu Feb 26 17:14:01 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Feb 26 17:14:01 2004 Subject: [llvm-commits] CVS: llvm/docs/ReleaseNotes.html Message-ID: <200402262313.RAA06019@choi.cs.uiuc.edu> Changes in directory llvm/docs: ReleaseNotes.html updated: 1.136 -> 1.137 --- Log message: Added PR258 and 259. --- Diffs of the changes: (+3 -1) Index: llvm/docs/ReleaseNotes.html diff -u llvm/docs/ReleaseNotes.html:1.136 llvm/docs/ReleaseNotes.html:1.137 --- llvm/docs/ReleaseNotes.html:1.136 Thu Feb 26 02:02:57 2004 +++ llvm/docs/ReleaseNotes.html Thu Feb 26 17:13:34 2004 @@ -205,6 +205,8 @@
  • Tablegen aborts on errors
  • [inliner] Error inlining intrinsic calls into invoke instructions
  • Linking weak and strong global variables is dependent on link order
  • +
  • Variables used to define non-printable FP constants are externally visible
  • +
  • CBE gives linkonce functions wrong linkage semantics
  • @@ -609,7 +611,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /> The LLVM Compiler Infrastructure
    - Last modified: $Date: 2004/02/26 08:02:57 $ + Last modified: $Date: 2004/02/26 23:13:34 $ From brukman at cs.uiuc.edu Thu Feb 26 17:21:01 2004 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu Feb 26 17:21:01 2004 Subject: [llvm-commits] CVS: llvm/include/llvm/iTerminators.h Message-ID: <200402262320.RAA30315@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm: iTerminators.h updated: 1.39 -> 1.40 --- Log message: Doxygenify comments. --- Diffs of the changes: (+9 -10) Index: llvm/include/llvm/iTerminators.h diff -u llvm/include/llvm/iTerminators.h:1.39 llvm/include/llvm/iTerminators.h:1.40 --- llvm/include/llvm/iTerminators.h:1.39 Tue Feb 24 00:26:00 2004 +++ llvm/include/llvm/iTerminators.h Thu Feb 26 17:20:29 2004 @@ -21,9 +21,9 @@ namespace llvm { //===--------------------------------------------------------------------------- -// ReturnInst - Return a value (possibly void), from a function. Execution does -// not continue in this function any longer. -// +/// ReturnInst - Return a value (possibly void), from a function. Execution +/// does not continue in this function any longer. +/// class ReturnInst : public TerminatorInst { ReturnInst(const ReturnInst &RI) : TerminatorInst(Instruction::Ret) { if (RI.Operands.size()) { @@ -83,8 +83,8 @@ }; //===--------------------------------------------------------------------------- -// BranchInst - Conditional or Unconditional Branch instruction. -// +/// BranchInst - Conditional or Unconditional Branch instruction. +/// class BranchInst : public TerminatorInst { BranchInst(const BranchInst &BI); public: @@ -153,8 +153,8 @@ //===--------------------------------------------------------------------------- -// SwitchInst - Multiway switch -// +/// SwitchInst - Multiway switch +/// class SwitchInst : public TerminatorInst { // Operand[0] = Value to switch on // Operand[1] = Default basic block destination @@ -254,10 +254,9 @@ } }; - //===--------------------------------------------------------------------------- -// InvokeInst - Invoke instruction -// +/// InvokeInst - Invoke instruction +/// class InvokeInst : public TerminatorInst { InvokeInst(const InvokeInst &BI); public: From brukman at cs.uiuc.edu Thu Feb 26 17:21:36 2004 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu Feb 26 17:21:36 2004 Subject: [llvm-commits] CVS: llvm/include/llvm/iPHINode.h Message-ID: <200402262320.RAA29545@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm: iPHINode.h updated: 1.15 -> 1.16 --- Log message: Doxygenify and tersify comments. --- Diffs of the changes: (+5 -2) Index: llvm/include/llvm/iPHINode.h diff -u llvm/include/llvm/iPHINode.h:1.15 llvm/include/llvm/iPHINode.h:1.16 --- llvm/include/llvm/iPHINode.h:1.15 Sun Nov 16 14:21:15 2003 +++ llvm/include/llvm/iPHINode.h Thu Feb 26 17:20:08 2004 @@ -38,11 +38,12 @@ virtual Instruction *clone() const { return new PHINode(*this); } - /// getNumIncomingValues - Return the number of incoming edges the PHI node - /// has + /// getNumIncomingValues - Return the number of incoming edges + /// unsigned getNumIncomingValues() const { return Operands.size()/2; } /// getIncomingValue - Return incoming value #x + /// Value *getIncomingValue(unsigned i) const { assert(i*2 < Operands.size() && "Invalid value number!"); return Operands[i*2]; @@ -56,6 +57,7 @@ } /// getIncomingBlock - Return incoming basic block #x + /// BasicBlock *getIncomingBlock(unsigned i) const { assert(i*2+1 < Operands.size() && "Invalid value number!"); return reinterpret_cast(Operands[i*2+1].get()); @@ -69,6 +71,7 @@ } /// addIncoming - Add an incoming value to the end of the PHI list + /// void addIncoming(Value *D, BasicBlock *BB) { assert(getType() == D->getType() && "All operands to PHI node must be the same type as the PHI node!"); From alkis at niobe.cs.uiuc.edu Thu Feb 26 17:23:02 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Thu Feb 26 17:23:02 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/VirtRegMap.cpp Message-ID: <200402262322.i1QNMYa05694@niobe.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: VirtRegMap.cpp updated: 1.4 -> 1.5 --- Log message: Clear maps right after basic block is processed. --- Diffs of the changes: (+4 -4) Index: llvm/lib/CodeGen/VirtRegMap.cpp diff -u llvm/lib/CodeGen/VirtRegMap.cpp:1.4 llvm/lib/CodeGen/VirtRegMap.cpp:1.5 --- llvm/lib/CodeGen/VirtRegMap.cpp:1.4 Wed Feb 25 17:21:52 2004 +++ llvm/lib/CodeGen/VirtRegMap.cpp Thu Feb 26 17:22:23 2004 @@ -89,8 +89,8 @@ tii_(tm_.getInstrInfo()), mri_(*tm_.getRegisterInfo()), vrm_(vrm), - p2vMap_(mri_.getNumRegs()), - dirty_(mri_.getNumRegs()) { + p2vMap_(mri_.getNumRegs(), 0), + dirty_(mri_.getNumRegs(), false) { DEBUG(std::cerr << "********** REWRITE MACHINE CODE **********\n"); DEBUG(std::cerr << "********** Function: " << mf_.getFunction()->getName() << '\n'); @@ -99,11 +99,11 @@ void eliminateVirtRegs() { for (MachineFunction::iterator mbbi = mf_.begin(), mbbe = mf_.end(); mbbi != mbbe; ++mbbi) { + DEBUG(std::cerr << mbbi->getBasicBlock()->getName() << ":\n"); + eliminateVirtRegsInMbb(*mbbi); // clear map and dirty flag p2vMap_.assign(p2vMap_.size(), 0); dirty_.assign(dirty_.size(), false); - DEBUG(std::cerr << mbbi->getBasicBlock()->getName() << ":\n"); - eliminateVirtRegsInMbb(*mbbi); } } From criswell at cs.uiuc.edu Thu Feb 26 17:26:01 2004 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Feb 26 17:26:01 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/Makefile Message-ID: <200402262325.RAA06109@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/External: Makefile updated: 1.5 -> 1.6 --- Log message: Enable Povray for testing. --- Diffs of the changes: (+5 -1) Index: llvm/test/Programs/External/Makefile diff -u llvm/test/Programs/External/Makefile:1.5 llvm/test/Programs/External/Makefile:1.6 --- llvm/test/Programs/External/Makefile:1.5 Tue Feb 10 16:34:42 2004 +++ llvm/test/Programs/External/Makefile Thu Feb 26 17:25:31 2004 @@ -8,6 +8,10 @@ # # Create the list of directories to compile # -DIRS := SPEC +DIRS := Povray SPEC + +ifndef USE_POVRAY +DIRS := $(filter-out Povray/, $(DIRS)) +endif include ${LEVEL}/test/Programs/Makefile.programs From alkis at niobe.cs.uiuc.edu Thu Feb 26 19:53:01 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Thu Feb 26 19:53:01 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/MachineInstr.cpp Message-ID: <200402270152.i1R1qjl24005@niobe.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: MachineInstr.cpp updated: 1.93 -> 1.94 --- Log message: Fix crash caused by passing register 0 to MRegisterInfo::isPhysicalRegister(). --- Diffs of the changes: (+1 -1) Index: llvm/lib/CodeGen/MachineInstr.cpp diff -u llvm/lib/CodeGen/MachineInstr.cpp:1.93 llvm/lib/CodeGen/MachineInstr.cpp:1.94 --- llvm/lib/CodeGen/MachineInstr.cpp:1.93 Mon Feb 23 12:40:08 2004 +++ llvm/lib/CodeGen/MachineInstr.cpp Thu Feb 26 19:52:34 2004 @@ -199,7 +199,7 @@ static inline void OutputReg(std::ostream &os, unsigned RegNo, const MRegisterInfo *MRI = 0) { - if (MRegisterInfo::isPhysicalRegister(RegNo)) { + if (!RegNo || MRegisterInfo::isPhysicalRegister(RegNo)) { if (MRI) os << "%" << MRI->get(RegNo).Name; else From alkis at niobe.cs.uiuc.edu Thu Feb 26 22:52:00 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Thu Feb 26 22:52:00 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/VirtRegMap.cpp Message-ID: <200402270451.i1R4pkp25551@niobe.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: VirtRegMap.cpp updated: 1.5 -> 1.6 --- Log message: Make spiller push stores right after the definition of a register so that they are as far away from the loads as possible. --- Diffs of the changes: (+33 -8) Index: llvm/lib/CodeGen/VirtRegMap.cpp diff -u llvm/lib/CodeGen/VirtRegMap.cpp:1.5 llvm/lib/CodeGen/VirtRegMap.cpp:1.6 --- llvm/lib/CodeGen/VirtRegMap.cpp:1.5 Thu Feb 26 17:22:23 2004 +++ llvm/lib/CodeGen/VirtRegMap.cpp Thu Feb 26 22:51:35 2004 @@ -23,6 +23,7 @@ #include "llvm/Target/TargetInstrInfo.h" #include "Support/Statistic.h" #include "Support/Debug.h" +#include "Support/DenseMap.h" #include "Support/STLExtras.h" #include @@ -73,6 +74,7 @@ class Spiller { typedef std::vector Phys2VirtMap; typedef std::vector PhysFlag; + typedef DenseMap Virt2MI; MachineFunction& mf_; const TargetMachine& tm_; @@ -81,6 +83,7 @@ const VirtRegMap& vrm_; Phys2VirtMap p2vMap_; PhysFlag dirty_; + Virt2MI lastDef_; public: Spiller(MachineFunction& mf, const VirtRegMap& vrm) @@ -90,7 +93,8 @@ mri_(*tm_.getRegisterInfo()), vrm_(vrm), p2vMap_(mri_.getNumRegs(), 0), - dirty_(mri_.getNumRegs(), false) { + dirty_(mri_.getNumRegs(), false), + lastDef_() { DEBUG(std::cerr << "********** REWRITE MACHINE CODE **********\n"); DEBUG(std::cerr << "********** Function: " << mf_.getFunction()->getName() << '\n'); @@ -99,11 +103,13 @@ void eliminateVirtRegs() { for (MachineFunction::iterator mbbi = mf_.begin(), mbbe = mf_.end(); mbbi != mbbe; ++mbbi) { + lastDef_.grow(mf_.getSSARegMap()->getLastVirtReg()); DEBUG(std::cerr << mbbi->getBasicBlock()->getName() << ":\n"); eliminateVirtRegsInMbb(*mbbi); - // clear map and dirty flag + // clear map, dirty flag and last ref p2vMap_.assign(p2vMap_.size(), 0); dirty_.assign(dirty_.size(), false); + lastDef_.clear(); } } @@ -113,11 +119,21 @@ unsigned physReg) { unsigned virtReg = p2vMap_[physReg]; if (dirty_[physReg] && vrm_.hasStackSlot(virtReg)) { - mri_.storeRegToStackSlot(mbb, mii, physReg, + assert(lastDef_[virtReg] && "virtual register is mapped " + "to a register and but was not defined!"); + MachineBasicBlock::iterator lastDef = lastDef_[virtReg]; + MachineBasicBlock::iterator nextLastRef = next(lastDef); + mri_.storeRegToStackSlot(*lastDef->getParent(), + nextLastRef, + physReg, vrm_.getStackSlot(virtReg), mri_.getRegClass(physReg)); ++numStores; - DEBUG(std::cerr << "*\t"; prior(mii)->print(std::cerr, tm_)); + DEBUG(std::cerr << "\t\tadded: "; + prior(nextLastRef)->print(std::cerr, tm_); + std::cerr << "\t\tafter: "; + lastDef->print(std::cerr, tm_)); + lastDef_[virtReg] = 0; } p2vMap_[physReg] = 0; dirty_[physReg] = false; @@ -145,7 +161,11 @@ vrm_.getStackSlot(virtReg), mri_.getRegClass(physReg)); ++numLoads; - DEBUG(std::cerr << "*\t"; prior(mii)->print(std::cerr,tm_)); + DEBUG(std::cerr << "\t\tadded: "; + prior(mii)->print(std::cerr,tm_); + std::cerr << "\t\tbefore: "; + mii->print(std::cerr, tm_)); + lastDef_[virtReg] = mii; } } } @@ -160,6 +180,7 @@ p2vMap_[physReg] = virtReg; dirty_[physReg] = true; + lastDef_[virtReg] = mii; } void eliminateVirtRegsInMbb(MachineBasicBlock& mbb) { @@ -170,11 +191,15 @@ MachineOperand& op = mii->getOperand(i); if (op.isRegister() && op.getReg() && op.isUse() && MRegisterInfo::isVirtualRegister(op.getReg())) { - unsigned physReg = vrm_.getPhys(op.getReg()); - handleUse(mbb, mii, op.getReg(), physReg); + unsigned virtReg = op.getReg(); + unsigned physReg = vrm_.getPhys(virtReg); + handleUse(mbb, mii, virtReg, physReg); mii->SetMachineOperandReg(i, physReg); // mark as dirty if this is def&use - if (op.isDef()) dirty_[physReg] = true; + if (op.isDef()) { + dirty_[physReg] = true; + lastDef_[virtReg] = mii; + } } } From alkis at cs.uiuc.edu Thu Feb 26 23:27:01 2004 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Thu Feb 26 23:27:01 2004 Subject: [llvm-commits] CVS: llvm/docs/ReleaseNotes.html Message-ID: <200402270526.XAA32740@zion.cs.uiuc.edu> Changes in directory llvm/docs: ReleaseNotes.html updated: 1.137 -> 1.138 --- Log message: Add improvements to the code generator. --- Diffs of the changes: (+11 -3) Index: llvm/docs/ReleaseNotes.html diff -u llvm/docs/ReleaseNotes.html:1.137 llvm/docs/ReleaseNotes.html:1.138 --- llvm/docs/ReleaseNotes.html:1.137 Thu Feb 26 17:13:34 2004 +++ llvm/docs/ReleaseNotes.html Thu Feb 26 23:26:23 2004 @@ -109,8 +109,16 @@ href="http://llvm.cs.uiuc.edu/PR203">RPM package generation.
  • The "tblgen" tool is now documented.
  • -
  • The LLVM code generator can now fold spill code into instructions on targets -that support it.
  • +
  • The LLVM code generator got a multitude of improvements: +
      +
    • It can now fold spill code into instructions on targets that support it.
    • +
    • A generic machine code spiller/rewriter was added. It provides an API for +global register allocators to eliminate virtual registers and add the +appropriate spill code.
    • +
    • The represenation of machine basic blocks got cleaned up and improved to +allow easier development and more efficient implementation.
    • +
    +
  • LLVM now no longer depends on the boost library.
  • The X86 backend now generates substantially better native code, and is faster.
  • The C backend has been turned moved from the "llvm-dis" tool to the "llc" @@ -611,7 +619,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /> The LLVM Compiler Infrastructure
    - Last modified: $Date: 2004/02/26 23:13:34 $ + Last modified: $Date: 2004/02/27 05:26:23 $ From lattner at cs.uiuc.edu Fri Feb 27 00:00:02 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri Feb 27 00:00:02 2004 Subject: [llvm-commits] CVS: llvm/test/Programs/External/Makefile Message-ID: <200402270559.XAA00542@zion.cs.uiuc.edu> Changes in directory llvm/test/Programs/External: Makefile updated: 1.6 -> 1.7 --- Log message: Run povray after spec, in case it doesn't work. --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/External/Makefile diff -u llvm/test/Programs/External/Makefile:1.6 llvm/test/Programs/External/Makefile:1.7 --- llvm/test/Programs/External/Makefile:1.6 Thu Feb 26 17:25:31 2004 +++ llvm/test/Programs/External/Makefile Thu Feb 26 23:59:09 2004 @@ -8,7 +8,7 @@ # # Create the list of directories to compile # -DIRS := Povray SPEC +DIRS := SPEC Povray ifndef USE_POVRAY DIRS := $(filter-out Povray/, $(DIRS)) From alkis at niobe.cs.uiuc.edu Fri Feb 27 00:12:01 2004 From: alkis at niobe.cs.uiuc.edu (Alkis Evlogimenos) Date: Fri Feb 27 00:12:01 2004 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/VirtRegMap.h RegAllocLinearScan.cpp Message-ID: <200402270611.i1R6BQb07757@niobe.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: VirtRegMap.h updated: 1.6 -> 1.7 RegAllocLinearScan.cpp updated: 1.66 -> 1.67 --- Log message: Rename member function to be consistent with the rest. --- Diffs of the changes: (+4 -4) Index: llvm/lib/CodeGen/VirtRegMap.h diff -u llvm/lib/CodeGen/VirtRegMap.h:1.6 llvm/lib/CodeGen/VirtRegMap.h:1.7 --- llvm/lib/CodeGen/VirtRegMap.h:1.6 Wed Feb 25 15:55:44 2004 +++ llvm/lib/CodeGen/VirtRegMap.h Fri Feb 27 00:11:15 2004 @@ -71,7 +71,7 @@ v2pMap_[virtReg] = physReg; } - void clearVirtReg(unsigned virtReg) { + void clearVirt(unsigned virtReg) { assert(MRegisterInfo::isVirtualRegister(virtReg)); assert(v2pMap_[virtReg] != NO_PHYS_REG && "attempt to clear a not assigned virtual register"); Index: llvm/lib/CodeGen/RegAllocLinearScan.cpp diff -u llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.66 llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.67 --- llvm/lib/CodeGen/RegAllocLinearScan.cpp:1.66 Wed Feb 25 16:01:06 2004 +++ llvm/lib/CodeGen/RegAllocLinearScan.cpp Fri Feb 27 00:11:15 2004 @@ -459,7 +459,7 @@ } else { prt_->delRegUse(vrm_->getPhys(i->reg)); - vrm_->clearVirtReg(i->reg); + vrm_->clearVirt(i->reg); if (i->spilled()) { if (!i->empty()) { IntervalPtrs::iterator it = unhandled_.begin(); @@ -479,7 +479,7 @@ if (MRegisterInfo::isPhysicalRegister(i->reg)) fixed_.push_front(i); else { - vrm_->clearVirtReg(i->reg); + vrm_->clearVirt(i->reg); if (i->spilled()) { if (!i->empty()) { IntervalPtrs::iterator it = unhandled_.begin(); @@ -497,7 +497,7 @@ if (MRegisterInfo::isPhysicalRegister(i->reg)) fixed_.push_front(i); else { - vrm_->clearVirtReg(i->reg); + vrm_->clearVirt(i->reg); unhandled_.push_front(i); } } From lattner at cs.uiuc.edu Fri Feb 27 00:28:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri Feb 27 00:28:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200402270627.AAA11281@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: InstructionCombining.cpp updated: 1.165 -> 1.166 --- Log message: Implement test/Regression/Transforms/InstCombine/canonicalize_branch.ll This is a really minor thing, but might help out the 'switch statement induction' code in simplifycfg. --- Diffs of the changes: (+23 -1) Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.165 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.166 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.165 Tue Feb 24 12:10:14 2004 +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Fri Feb 27 00:27:46 2004 @@ -2343,7 +2343,7 @@ Instruction *InstCombiner::visitBranchInst(BranchInst &BI) { // Change br (not X), label True, label False to: br X, label False, True - if (BI.isConditional() && !isa(BI.getCondition())) + if (BI.isConditional() && !isa(BI.getCondition())) { if (Value *V = dyn_castNotVal(BI.getCondition())) { BasicBlock *TrueDest = BI.getSuccessor(0); BasicBlock *FalseDest = BI.getSuccessor(1); @@ -2352,7 +2352,29 @@ BI.setSuccessor(0, FalseDest); BI.setSuccessor(1, TrueDest); return &BI; + } else if (SetCondInst *I = dyn_cast(BI.getCondition())) { + // Cannonicalize setne -> seteq + if ((I->getOpcode() == Instruction::SetNE || + I->getOpcode() == Instruction::SetLE || + I->getOpcode() == Instruction::SetGE) && I->hasOneUse()) { + std::string Name = I->getName(); I->setName(""); + Instruction::BinaryOps NewOpcode = + SetCondInst::getInverseCondition(I->getOpcode()); + Value *NewSCC = BinaryOperator::create(NewOpcode, I->getOperand(0),