[llvm-commits] [llvm] r49525 - in /llvm/branches/ggreif/use-diet: include/llvm/OperandTraits.h lib/Bitcode/Reader/BitcodeReader.cpp lib/Bitcode/Reader/BitcodeReader.h
Gabor Greif
ggreif at gmail.com
Fri Apr 11 03:15:42 PDT 2008
Author: ggreif
Date: Fri Apr 11 05:15:41 2008
New Revision: 49525
URL: http://llvm.org/viewvc/llvm-project?rev=49525&view=rev
Log:
implement more bits of BitcodeReader. move HungoffOperand to OperandTraits.h
Modified:
llvm/branches/ggreif/use-diet/include/llvm/OperandTraits.h
llvm/branches/ggreif/use-diet/lib/Bitcode/Reader/BitcodeReader.cpp
llvm/branches/ggreif/use-diet/lib/Bitcode/Reader/BitcodeReader.h
Modified: llvm/branches/ggreif/use-diet/include/llvm/OperandTraits.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/ggreif/use-diet/include/llvm/OperandTraits.h?rev=49525&r1=49524&r2=49525&view=diff
==============================================================================
--- llvm/branches/ggreif/use-diet/include/llvm/OperandTraits.h (original)
+++ llvm/branches/ggreif/use-diet/include/llvm/OperandTraits.h Fri Apr 11 05:15:41 2008
@@ -7,7 +7,9 @@
//
//===----------------------------------------------------------------------===//
//
-// This file defines the FIXME.
+// This file defines the traits classes that are handy for enforcing the correct
+// layout of various User subclasses. It also provides the means for accessing
+// the operands in the most efficient manner.
//
#ifndef LLVM_OPERAND_TRAITS_H
@@ -63,6 +65,24 @@
static inline void *allocate(unsigned); // FIXME
};
+//===----------------------------------------------------------------------===//
+// HungoffOperand Trait Class
+//===----------------------------------------------------------------------===//
+
+template <unsigned MINARITY = 1>
+struct HungoffOperandTraits {
+ static Use *op_begin(User* U) {
+ return U->OperandList;
+ }
+ static Use *op_end(User* U) {
+ return U->OperandList + U->getNumOperands();
+ }
+ static unsigned operands(const User *U) {
+ return U->getNumOperands();
+ }
+ static inline void *allocate(unsigned); // FIXME
+};
+
/// Macro for generating in-class operand accessor declarations
#define DECLARE_TRANSPARENT_OPERAND_ACCESSORS(VALUECLASS) \
inline VALUECLASS *getOperand(unsigned) const; \
Modified: llvm/branches/ggreif/use-diet/lib/Bitcode/Reader/BitcodeReader.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/ggreif/use-diet/lib/Bitcode/Reader/BitcodeReader.cpp?rev=49525&r1=49524&r2=49525&view=diff
==============================================================================
--- llvm/branches/ggreif/use-diet/lib/Bitcode/Reader/BitcodeReader.cpp (original)
+++ llvm/branches/ggreif/use-diet/lib/Bitcode/Reader/BitcodeReader.cpp Fri Apr 11 05:15:41 2008
@@ -154,7 +154,10 @@
if (Desired > Capacity)
{
- // FIXME
+ Use *New = allocHangoffUses(Desired);
+ for (int i(getNumOperands() - 1); i >= 0; --i)
+ New[i] = getOperand(i);
+ OperandList = New;
}
}
Modified: llvm/branches/ggreif/use-diet/lib/Bitcode/Reader/BitcodeReader.h
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/ggreif/use-diet/lib/Bitcode/Reader/BitcodeReader.h?rev=49525&r1=49524&r2=49525&view=diff
==============================================================================
--- llvm/branches/ggreif/use-diet/lib/Bitcode/Reader/BitcodeReader.h (original)
+++ llvm/branches/ggreif/use-diet/lib/Bitcode/Reader/BitcodeReader.h Fri Apr 11 05:15:41 2008
@@ -27,24 +27,6 @@
class MemoryBuffer;
//===----------------------------------------------------------------------===//
-// HungoffOperand Trait Class
-//===----------------------------------------------------------------------===//
-
-template <unsigned MINARITY = 1>
-struct HungoffOperandTraits {
- static Use *op_begin(User* U) {
- return U->OperandList;
- }
- static Use *op_end(User* U) {
- return U->OperandList + U->getNumOperands();
- }
- static unsigned operands(const User *U) {
- return U->getNumOperands();
- }
- static inline void *allocate(unsigned); // FIXME
-};
-
-//===----------------------------------------------------------------------===//
// BitcodeReaderValueList Class
//===----------------------------------------------------------------------===//
@@ -59,8 +41,6 @@
unsigned size() const { return getNumOperands(); }
void resize(unsigned);
void push_back(Value *V) {
-// Uses.push_back(Use(V, this));
-// OperandList = &Uses[0];
++NumOperands;
}
@@ -75,8 +55,6 @@
bool empty() const { return NumOperands == 0; }
void shrinkTo(unsigned N) {
assert(N <= NumOperands && "Invalid shrinkTo request!");
-// Uses.resize(N);
-// NumOperands = N;
while (NumOperands > N)
pop_back();
}
@@ -100,8 +78,12 @@
private:
void initVal(unsigned Idx, Value *V) {
-// assert(Uses[Idx] == 0 && "Cannot init an already init'd Use!");
-// Uses[Idx].init(V, this);
+ if (Idx >= size()) {
+ // Insert a bunch of null values.
+ resize(Idx * 2 + 1);
+ }
+ assert(getOperand(Idx) == 0 && "Cannot init an already init'd Use!");
+ OperandList[Idx].init(V, this);
}
};
More information about the llvm-commits
mailing list