[llvm-commits] CVS: llvm/test/CodeGen/X86/bitcast2.ll
Changes in directory llvm/test/CodeGen/X86: bitcast2.ll added (r1.1) --- Log message: ensure we don't regress on these tests. We generate aweful code in x86-32 for these though. --- Diffs of the changes: (+13 -0) bitcast2.ll | 13 + 1 files changed, 13 insertions(+) Index: llvm/test/CodeGen/X86/bitcast2.ll diff -c /dev/null llvm/test/CodeGen/X86/bitcast2.ll:1.1 *** /dev/null Sun Jun 17 18:30:07 2007 --- llvm/test/CodeGen/X86/bitcast2.ll Sun Jun 17 18:29:57 2007 *** *** 0 --- 1,13 + ; RUN: llvm-as < %s | llc -march=x86-64 | grep movd | wc -l | grep 2 + ; RUN: llvm-as < %s | llc -march=x86-64 | not grep rsp + + define i64 @test1(double %A) { +%B = bitcast double %A to i64 +ret i64 %B + } + + define double @test2(i64 %A) { +%B = bitcast i64 %A to double +ret double %B + } + ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
Re: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelLowering.cpp
On Jun 16, 2007, at 4:57 PM, Bill Wendling wrote: > Revert patch. It regresses: > > define double @test2(i64 %A) { >%B = bitcast i64 %A to double >ret double %B > } Thanks Bill, -Chris ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
Re: [llvm-commits] CVS: llvm/lib/CodeGen/LiveIntervalAnalysis.cpp VirtRegMap.cpp
Hi Dan, Is this necessary? ARM is already doing this by marking trivially re- materializable instructions with let isReMaterializable = 1. Evan On Jun 14, 2007, at 1:51 PM, Dan Gohman wrote: > > > Changes in directory llvm/lib/CodeGen: > > LiveIntervalAnalysis.cpp updated: 1.246 -> 1.247 > VirtRegMap.cpp updated: 1.111 -> 1.112 > --- > Log message: > > Add a target hook to allow loads from constant pools to be > rematerialized, and an > implementation for x86. > > > --- > Diffs of the changes: (+6 -3) > > LiveIntervalAnalysis.cpp |6 -- > VirtRegMap.cpp |3 ++- > 2 files changed, 6 insertions(+), 3 deletions(-) > > > Index: llvm/lib/CodeGen/LiveIntervalAnalysis.cpp > diff -u llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.246 llvm/lib/ > CodeGen/LiveIntervalAnalysis.cpp:1.247 > --- llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.246 Fri Jun 8 > 12:18:56 2007 > +++ llvm/lib/CodeGen/LiveIntervalAnalysis.cpp Thu Jun 14 15:50:44 2007 > @@ -336,12 +336,14 @@ >// time we see a vreg. >if (interval.empty()) { > // Remember if the definition can be rematerialized. All > load's from fixed > -// stack slots are re-materializable. > +// stack slots are re-materializable. The target may permit > other loads to > +// be re-materialized as well. > int FrameIdx = 0; > if (vi.DefInst && > (tii_->isReMaterializable(vi.DefInst->getOpcode()) || > (tii_->isLoadFromStackSlot(vi.DefInst, FrameIdx) && > - mf_->getFrameInfo()->isFixedObjectIndex(FrameIdx > + mf_->getFrameInfo()->isFixedObjectIndex(FrameIdx)) || > + tii_->isOtherReMaterializableLoad(vi.DefInst))) >interval.remat = vi.DefInst; > > // Get the Idx of the defining instructions. > > > Index: llvm/lib/CodeGen/VirtRegMap.cpp > diff -u llvm/lib/CodeGen/VirtRegMap.cpp:1.111 llvm/lib/CodeGen/ > VirtRegMap.cpp:1.112 > --- llvm/lib/CodeGen/VirtRegMap.cpp:1.111 Thu Apr 26 13:59:33 2007 > +++ llvm/lib/CodeGen/VirtRegMap.cpp Thu Jun 14 15:50:44 2007 > @@ -664,7 +664,8 @@ > // If this instruction is being rematerialized, just remove it! > int FrameIdx; > if ((TID->Flags & M_REMATERIALIZIBLE) || > -TII->isLoadFromStackSlot(&MI, FrameIdx)) { > +TII->isLoadFromStackSlot(&MI, FrameIdx) || > +TII->isOtherReMaterializableLoad(&MI)) { >bool Remove = true; >for (unsigned i = 0, e = MI.getNumOperands(); i != e; ++i) { > MachineOperand &MO = MI.getOperand(i); > > > > ___ > llvm-commits mailing list > llvm-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
Re: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrInfo.cpp ARMInstrInfo.h
Geeze. I was sure I would've been yelled at had I made it into a targetinstrinfo bit. :-) Really didn't want to go with either approach. But I don't see a better alternative. Evan On Jun 15, 2007, at 2:37 PM, Chris Lattner wrote: > On Jun 15, 2007, at 2:15 PM, Evan Cheng wrote: >> Instructions with unique labels or embedded jumptables cannot be >> duplicated during ifcvt. > > Please turn this into a targetinstrinfo bit. Virtual methods should > only be used for properties whose behavior is a property of the > *operands* of the instruction in combination with the opcode. This > property seems to only depend on the opcode. > > -Chris > >> --- >> Diffs of the changes: (+31 -0) >> >> ARMInstrInfo.cpp | 29 + >> ARMInstrInfo.h |2 ++ >> 2 files changed, 31 insertions(+) >> >> >> Index: llvm/lib/Target/ARM/ARMInstrInfo.cpp >> diff -u llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.36 llvm/lib/Target/ >> ARM/ARMInstrInfo.cpp:1.37 >> --- llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.36Wed Jun 13 12:59:52 >> 2007 >> +++ llvm/lib/Target/ARM/ARMInstrInfo.cpp Fri Jun 15 16:15:00 2007 >> @@ -446,6 +446,35 @@ >>return PIdx != -1 && MI->getOperand(PIdx).getImmedValue() != >> ARMCC::AL; >> } >> >> +bool ARMInstrInfo::CanBeDuplicated(const MachineInstr *MI) const { >> + switch (MI->getOpcode()) { >> + default: return true; >> + // These have unique labels. >> + case ARM::PICADD: >> + case ARM::PICLD: >> + case ARM::PICLDZH: >> + case ARM::PICLDZB: >> + case ARM::PICLDH: >> + case ARM::PICLDB: >> + case ARM::PICLDSH: >> + case ARM::PICLDSB: >> + case ARM::PICSTR: >> + case ARM::PICSTRH: >> + case ARM::PICSTRB: >> + case ARM::LEApcrel: >> + case ARM::LEApcrelJT: >> + case ARM::tPICADD: >> + case ARM::tLEApcrel: >> + case ARM::tLEApcrelJT: >> + case ARM::CONSTPOOL_ENTRY: >> + // These embed jumptables. >> + case ARM::BR_JTr: >> + case ARM::BR_JTm: >> + case ARM::BR_JTadd: >> +return false; >> + } >> +} >> + >> bool ARMInstrInfo::PredicateInstruction(MachineInstr *MI, >> const std::vector >> &Pred) const { >>unsigned Opc = MI->getOpcode(); >> >> >> Index: llvm/lib/Target/ARM/ARMInstrInfo.h >> diff -u llvm/lib/Target/ARM/ARMInstrInfo.h:1.13 llvm/lib/Target/ARM/ >> ARMInstrInfo.h:1.14 >> --- llvm/lib/Target/ARM/ARMInstrInfo.h:1.13 Tue May 29 13:42:18 2007 >> +++ llvm/lib/Target/ARM/ARMInstrInfo.h Fri Jun 15 16:15:00 2007 >> @@ -106,6 +106,8 @@ >>// Predication support. >>virtual bool isPredicated(const MachineInstr *MI) const; >> >> + virtual bool CanBeDuplicated(const MachineInstr *MI) const; >> + >>virtual >>bool PredicateInstruction(MachineInstr *MI, >> const std::vector >> &Pred) const; >> >> >> >> ___ >> llvm-commits mailing list >> llvm-commits@cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > > ___ > llvm-commits mailing list > llvm-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Transforms/Scalar/GVNPRE.cpp
Changes in directory llvm/lib/Transforms/Scalar: GVNPRE.cpp updated: 1.34 -> 1.35 --- Log message: Don't perform an expensive check if it's not necessary. --- Diffs of the changes: (+12 -2) GVNPRE.cpp | 14 -- 1 files changed, 12 insertions(+), 2 deletions(-) Index: llvm/lib/Transforms/Scalar/GVNPRE.cpp diff -u llvm/lib/Transforms/Scalar/GVNPRE.cpp:1.34 llvm/lib/Transforms/Scalar/GVNPRE.cpp:1.35 --- llvm/lib/Transforms/Scalar/GVNPRE.cpp:1.34 Fri Jun 15 19:26:54 2007 +++ llvm/lib/Transforms/Scalar/GVNPRE.cpp Sun Jun 17 23:30:44 2007 @@ -329,7 +329,12 @@ lhsValid = true; break; } - lhsValid &= !dependsOnInvoke(BO->getOperand(0)); + + // Check for dependency on invoke insts + // NOTE: This check is expensive, so don't do it if we + // don't have to + if (lhsValid) +lhsValid = !dependsOnInvoke(BO->getOperand(0)); bool rhsValid = !isa(BO->getOperand(1)); if (!rhsValid) @@ -339,7 +344,12 @@ rhsValid = true; break; } - rhsValid &= !dependsOnInvoke(BO->getOperand(1)); + + // Check for dependency on invoke insts + // NOTE: This check is expensive, so don't do it if we + // don't have to + if (rhsValid) +rhsValid = !dependsOnInvoke(BO->getOperand(1)); if (!lhsValid || !rhsValid) set.erase(BO); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Transforms/Scalar/GVNPRE.cpp
Changes in directory llvm/lib/Transforms/Scalar: GVNPRE.cpp updated: 1.35 -> 1.36 --- Log message: Fix indentation. --- Diffs of the changes: (+6 -6) GVNPRE.cpp | 12 ++-- 1 files changed, 6 insertions(+), 6 deletions(-) Index: llvm/lib/Transforms/Scalar/GVNPRE.cpp diff -u llvm/lib/Transforms/Scalar/GVNPRE.cpp:1.35 llvm/lib/Transforms/Scalar/GVNPRE.cpp:1.36 --- llvm/lib/Transforms/Scalar/GVNPRE.cpp:1.35 Sun Jun 17 23:30:44 2007 +++ llvm/lib/Transforms/Scalar/GVNPRE.cpp Sun Jun 17 23:31:21 2007 @@ -338,12 +338,12 @@ bool rhsValid = !isa(BO->getOperand(1)); if (!rhsValid) - for (std::set::iterator I = set.begin(), E = set.end(); - I != E; ++I) -if (VN[*I] == VN[BO->getOperand(1)]) { - rhsValid = true; - break; -} +for (std::set::iterator I = set.begin(), E = set.end(); + I != E; ++I) + if (VN[*I] == VN[BO->getOperand(1)]) { +rhsValid = true; +break; + } // Check for dependency on invoke insts // NOTE: This check is expensive, so don't do it if we ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Transforms/Scalar/GVNPRE.cpp
Changes in directory llvm/lib/Transforms/Scalar: GVNPRE.cpp updated: 1.36 -> 1.37 --- Log message: Cache the results of dependsOnInvoke() --- Diffs of the changes: (+18 -4) GVNPRE.cpp | 22 ++ 1 files changed, 18 insertions(+), 4 deletions(-) Index: llvm/lib/Transforms/Scalar/GVNPRE.cpp diff -u llvm/lib/Transforms/Scalar/GVNPRE.cpp:1.36 llvm/lib/Transforms/Scalar/GVNPRE.cpp:1.37 --- llvm/lib/Transforms/Scalar/GVNPRE.cpp:1.36 Sun Jun 17 23:31:21 2007 +++ llvm/lib/Transforms/Scalar/GVNPRE.cpp Sun Jun 17 23:42:29 2007 @@ -103,6 +103,7 @@ std::map > availableOut; std::map > anticipatedIn; +std::map invokeDep; virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.setPreservesCFG(); @@ -135,6 +136,8 @@ std::map > availOut); void cleanup(); void elimination(); + +bool dependsOnInvoke(Value* V); }; @@ -285,11 +288,15 @@ } } -bool dependsOnInvoke(Value* V) { +bool GVNPRE::dependsOnInvoke(Value* V) { if (!isa(V)) return false; User* U = cast(V); + std::map::iterator I = invokeDep.find(U); + if (I != invokeDep.end()) +return I->second; + std::vector worklist(U->op_begin(), U->op_end()); std::set visited; @@ -304,9 +311,15 @@ return true; User* curr = cast(current); -for (unsigned i = 0; i < curr->getNumOperands(); ++i) - if (visited.find(curr->getOperand(i)) == visited.end()) -worklist.push_back(curr->getOperand(i)); +std::map::iterator CI = invokeDep.find(curr); +if (CI != invokeDep.end()) { + if (CI->second) +return true; +} else { + for (unsigned i = 0; i < curr->getNumOperands(); ++i) +if (visited.find(curr->getOperand(i)) == visited.end()) + worklist.push_back(curr->getOperand(i)); +} } return false; @@ -593,6 +606,7 @@ createdExpressions.clear(); availableOut.clear(); anticipatedIn.clear(); + invokeDep.clear(); std::map > generatedExpressions; std::map > generatedPhis; ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits