@@ -1099,32 +1099,33 @@ class ByteCodeRewriteResultList : public PDLResultList {
10991099 MutableArrayRef<PDLValue> getResults () { return results; }
11001100
11011101 // / Return the type ranges allocated by this list.
1102- MutableArrayRef<llvm::OwningArrayRef <Type>> getAllocatedTypeRanges () {
1102+ MutableArrayRef<std::vector <Type>> getAllocatedTypeRanges () {
11031103 return allocatedTypeRanges;
11041104 }
11051105
11061106 // / Return the value ranges allocated by this list.
1107- MutableArrayRef<llvm::OwningArrayRef <Value>> getAllocatedValueRanges () {
1107+ MutableArrayRef<std::vector <Value>> getAllocatedValueRanges () {
11081108 return allocatedValueRanges;
11091109 }
11101110};
11111111
11121112// / This class provides support for executing a bytecode stream.
11131113class ByteCodeExecutor {
11141114public:
1115- ByteCodeExecutor (
1116- const ByteCodeField *curCodeIt, MutableArrayRef<const void *> memory,
1117- MutableArrayRef<llvm::OwningArrayRef<Operation *>> opRangeMemory,
1118- MutableArrayRef<TypeRange> typeRangeMemory,
1119- std::vector<llvm::OwningArrayRef<Type>> &allocatedTypeRangeMemory,
1120- MutableArrayRef<ValueRange> valueRangeMemory,
1121- std::vector<llvm::OwningArrayRef<Value>> &allocatedValueRangeMemory,
1122- MutableArrayRef<unsigned > loopIndex, ArrayRef<const void *> uniquedMemory,
1123- ArrayRef<ByteCodeField> code,
1124- ArrayRef<PatternBenefit> currentPatternBenefits,
1125- ArrayRef<PDLByteCodePattern> patterns,
1126- ArrayRef<PDLConstraintFunction> constraintFunctions,
1127- ArrayRef<PDLRewriteFunction> rewriteFunctions)
1115+ ByteCodeExecutor (const ByteCodeField *curCodeIt,
1116+ MutableArrayRef<const void *> memory,
1117+ MutableArrayRef<std::vector<Operation *>> opRangeMemory,
1118+ MutableArrayRef<TypeRange> typeRangeMemory,
1119+ std::vector<std::vector<Type>> &allocatedTypeRangeMemory,
1120+ MutableArrayRef<ValueRange> valueRangeMemory,
1121+ std::vector<std::vector<Value>> &allocatedValueRangeMemory,
1122+ MutableArrayRef<unsigned > loopIndex,
1123+ ArrayRef<const void *> uniquedMemory,
1124+ ArrayRef<ByteCodeField> code,
1125+ ArrayRef<PatternBenefit> currentPatternBenefits,
1126+ ArrayRef<PDLByteCodePattern> patterns,
1127+ ArrayRef<PDLConstraintFunction> constraintFunctions,
1128+ ArrayRef<PDLRewriteFunction> rewriteFunctions)
11281129 : curCodeIt(curCodeIt), memory(memory), opRangeMemory(opRangeMemory),
11291130 typeRangeMemory (typeRangeMemory),
11301131 allocatedTypeRangeMemory(allocatedTypeRangeMemory),
@@ -1367,13 +1368,9 @@ class ByteCodeExecutor {
13671368 if (range.empty ()) {
13681369 rangeMemory[rangeIndex] = {};
13691370 } else {
1370- // Allocate a buffer for this type range.
1371- llvm::OwningArrayRef<T> storage (llvm::size (range));
1372- llvm::copy (range, storage.begin ());
1373-
13741371 // Assign this to the range slot and use the range as the value for the
13751372 // memory index.
1376- allocatedRangeMemory.emplace_back (std::move (storage ));
1373+ allocatedRangeMemory.emplace_back (range. begin (), range. end ( ));
13771374 rangeMemory[rangeIndex] = allocatedRangeMemory.back ();
13781375 }
13791376 memory[memIndex] = &rangeMemory[rangeIndex];
@@ -1397,11 +1394,11 @@ class ByteCodeExecutor {
13971394
13981395 // / The current execution memory.
13991396 MutableArrayRef<const void *> memory;
1400- MutableArrayRef<OwningOpRange > opRangeMemory;
1397+ MutableArrayRef<std::vector<Operation *> > opRangeMemory;
14011398 MutableArrayRef<TypeRange> typeRangeMemory;
1402- std::vector<llvm::OwningArrayRef <Type>> &allocatedTypeRangeMemory;
1399+ std::vector<std::vector <Type>> &allocatedTypeRangeMemory;
14031400 MutableArrayRef<ValueRange> valueRangeMemory;
1404- std::vector<llvm::OwningArrayRef <Value>> &allocatedValueRangeMemory;
1401+ std::vector<std::vector <Value>> &allocatedValueRangeMemory;
14051402
14061403 // / The current loop indices.
14071404 MutableArrayRef<unsigned > loopIndex;
@@ -1907,20 +1904,18 @@ void ByteCodeExecutor::executeGetUsers() {
19071904 LDBG () << " Executing GetUsers:" ;
19081905 unsigned memIndex = read ();
19091906 unsigned rangeIndex = read ();
1910- OwningOpRange &range = opRangeMemory[rangeIndex];
1907+ std::vector<Operation *> &range = opRangeMemory[rangeIndex];
19111908 memory[memIndex] = ⦥
19121909
1913- range = OwningOpRange ();
1910+ range. clear ();
19141911 if (read<PDLValue::Kind>() == PDLValue::Kind::Value) {
19151912 // Read the value.
19161913 Value value = read<Value>();
19171914 if (!value)
19181915 return ;
19191916 LDBG () << " * Value: " << value;
19201917
1921- // Extract the users of a single value.
1922- range = OwningOpRange (std::distance (value.user_begin (), value.user_end ()));
1923- llvm::copy (value.getUsers (), range.begin ());
1918+ range.assign (value.user_begin (), value.user_end ());
19241919 } else {
19251920 // Read a range of values.
19261921 ValueRange *values = read<ValueRange *>();
@@ -1929,12 +1924,8 @@ void ByteCodeExecutor::executeGetUsers() {
19291924 LDBG () << " * Values (" << values->size ()
19301925 << " ): " << llvm::interleaved (*values);
19311926
1932- // Extract all the users of a range of values.
1933- SmallVector<Operation *> users;
19341927 for (Value value : *values)
1935- users.append (value.user_begin (), value.user_end ());
1936- range = OwningOpRange (users.size ());
1937- llvm::copy (users, range.begin ());
1928+ range.insert (range.end (), value.user_begin (), value.user_end ());
19381929 }
19391930
19401931 LDBG () << " * Result: " << range.size () << " operations" ;
@@ -2174,7 +2165,8 @@ ByteCodeExecutor::execute(PatternRewriter &rewriter,
21742165 executeEraseOp (rewriter);
21752166 break ;
21762167 case ExtractOp:
2177- executeExtract<Operation *, OwningOpRange, PDLValue::Kind::Operation>();
2168+ executeExtract<Operation *, std::vector<Operation *>,
2169+ PDLValue::Kind::Operation>();
21782170 break ;
21792171 case ExtractType:
21802172 executeExtract<Type, TypeRange, PDLValue::Kind::Type>();
0 commit comments