@@ -73,8 +73,8 @@ readPotentiallySplatString(DialectBytecodeReader &reader, ShapedType type,
7373 return success ();
7474}
7575
76- void writePotentiallySplatString (DialectBytecodeWriter &writer,
77- DenseStringElementsAttr attr) {
76+ static void writePotentiallySplatString (DialectBytecodeWriter &writer,
77+ DenseStringElementsAttr attr) {
7878 bool isSplat = attr.isSplat ();
7979 if (isSplat)
8080 return writer.writeOwnedString (attr.getRawStringData ().front ());
@@ -83,8 +83,9 @@ void writePotentiallySplatString(DialectBytecodeWriter &writer,
8383 writer.writeOwnedString (str);
8484}
8585
86- FileLineColRange getFileLineColRange (MLIRContext *context, StringAttr filename,
87- ArrayRef<uint64_t > lineCols) {
86+ static FileLineColRange getFileLineColRange (MLIRContext *context,
87+ StringAttr filename,
88+ ArrayRef<uint64_t > lineCols) {
8889 switch (lineCols.size ()) {
8990 case 0 :
9091 return FileLineColRange::get (filename);
@@ -97,34 +98,52 @@ FileLineColRange getFileLineColRange(MLIRContext *context, StringAttr filename,
9798 lineCols[2 ]);
9899 case 4 :
99100 return FileLineColRange::get (filename, lineCols[0 ], lineCols[1 ],
100- lineCols[3 ], lineCols[2 ]);
101+ lineCols[2 ], lineCols[3 ]);
101102 default :
102103 return {};
103104 }
104105}
105106
106- LogicalResult readFileLineColRangeLocs (DialectBytecodeReader &reader,
107+ static LogicalResult readFileLineColRangeLocs (DialectBytecodeReader &reader,
107108 SmallVectorImpl<uint64_t > &lineCols) {
108109 return reader.readList (
109110 lineCols, [&reader](uint64_t &val) { return reader.readVarInt (val); });
110111}
111112
112- void writeFileLineColRangeLocs (DialectBytecodeWriter &writer,
113- FileLineColRange range) {
114- int count = range.getStartLine ().has_value () +
115- range.getStartColumn ().has_value () +
116- range.getEndLine ().has_value () + range.getEndColumn ().has_value ();
117- writer.writeVarInt (count);
118- if (count == 0 )
113+ static void writeFileLineColRangeLocs (DialectBytecodeWriter &writer,
114+ FileLineColRange range) {
115+ if (range.getStartLine () == range.getStartColumn () == range.getEndLine () ==
116+ range.getEndColumn () == 0 ) {
117+ writer.writeVarInt (0 );
119118 return ;
120- // Startline here is either known or zero with other trailing offsets.
121- writer.writeVarInt (range.getStartLine ().value_or (0 ));
122- if (range.getStartColumn ().has_value ())
123- writer.writeVarInt (*range.getStartColumn ());
124- if (range.getEndColumn ().has_value ())
125- writer.writeVarInt (*range.getEndColumn ());
126- if (range.getEndLine ().has_value ())
127- writer.writeVarInt (*range.getEndLine ());
119+ }
120+ if (range.getStartColumn () == 0 &&
121+ range.getStartLine () == range.getEndLine ()) {
122+ writer.writeVarInt (1 );
123+ writer.writeVarInt (range.getStartLine ());
124+ return ;
125+ }
126+ // The single file:line:col is handled by other writer, but checked here for
127+ // completeness.
128+ if (range.endColumn () == range.startColumn () &&
129+ range.getStartLine () == range.getEndLine ()) {
130+ writer.writeVarInt (2 );
131+ writer.writeVarInt (range.getStartLine ());
132+ writer.writeVarInt (range.getStartColumn ());
133+ return ;
134+ }
135+ if (range.getStartLine () == range.getEndLine ()) {
136+ writer.writeVarInt (3 );
137+ writer.writeVarInt (range.getStartLine ());
138+ writer.writeVarInt (range.getStartColumn ());
139+ writer.writeVarInt (range.getEndColumn ());
140+ return ;
141+ }
142+ writer.writeVarInt (4 );
143+ writer.writeVarInt (range.getStartLine ());
144+ writer.writeVarInt (range.getStartColumn ());
145+ writer.writeVarInt (range.getEndLine ());
146+ writer.writeVarInt (range.getEndColumn ());
128147}
129148
130149#include " mlir/IR/BuiltinDialectBytecode.cpp.inc"
0 commit comments