@@ -19,11 +19,15 @@ using namespace mlir::sparse_tensor;
19
19
20
20
// / Opens the file for reading.
21
21
void SparseTensorReader::openFile () {
22
- if (file)
23
- MLIR_SPARSETENSOR_FATAL (" Already opened file %s\n " , filename);
22
+ if (file) {
23
+ fprintf (stderr, " Already opened file %s\n " , filename);
24
+ exit (1 );
25
+ }
24
26
file = fopen (filename, " r" );
25
- if (!file)
26
- MLIR_SPARSETENSOR_FATAL (" Cannot find file %s\n " , filename);
27
+ if (!file) {
28
+ fprintf (stderr, " Cannot find file %s\n " , filename);
29
+ exit (1 );
30
+ }
27
31
}
28
32
29
33
// / Closes the file.
@@ -36,19 +40,23 @@ void SparseTensorReader::closeFile() {
36
40
37
41
// / Attempts to read a line from the file.
38
42
void SparseTensorReader::readLine () {
39
- if (!fgets (line, kColWidth , file))
40
- MLIR_SPARSETENSOR_FATAL (" Cannot read next line of %s\n " , filename);
43
+ if (!fgets (line, kColWidth , file)) {
44
+ fprintf (stderr, " Cannot read next line of %s\n " , filename);
45
+ exit (1 );
46
+ }
41
47
}
42
48
43
49
// / Reads and parses the file's header.
44
50
void SparseTensorReader::readHeader () {
45
51
assert (file && " Attempt to readHeader() before openFile()" );
46
- if (strstr (filename, " .mtx" ))
52
+ if (strstr (filename, " .mtx" )) {
47
53
readMMEHeader ();
48
- else if (strstr (filename, " .tns" ))
54
+ } else if (strstr (filename, " .tns" )) {
49
55
readExtFROSTTHeader ();
50
- else
51
- MLIR_SPARSETENSOR_FATAL (" Unknown format %s\n " , filename);
56
+ } else {
57
+ fprintf (stderr, " Unknown format %s\n " , filename);
58
+ exit (1 );
59
+ }
52
60
assert (isValid () && " Failed to read the header" );
53
61
}
54
62
@@ -57,7 +65,7 @@ void SparseTensorReader::readHeader() {
57
65
void SparseTensorReader::assertMatchesShape (uint64_t rank,
58
66
const uint64_t *shape) const {
59
67
assert (rank == getRank () && " Rank mismatch" );
60
- for (uint64_t r = 0 ; r < rank; ++r )
68
+ for (uint64_t r = 0 ; r < rank; r++ )
61
69
assert ((shape[r] == 0 || shape[r] == idata[2 + r]) &&
62
70
" Dimension size mismatch" );
63
71
}
@@ -87,13 +95,13 @@ bool SparseTensorReader::canReadAs(PrimaryType valTy) const {
87
95
// integer and floating primary-types.
88
96
return isRealPrimaryType (valTy);
89
97
}
90
- MLIR_SPARSETENSOR_FATAL ( " Unknown ValueKind: %d\n " ,
91
- static_cast < uint8_t >(valueKind_)) ;
98
+ fprintf (stderr, " Unknown ValueKind: %d\n " , static_cast < uint8_t >(valueKind_));
99
+ return false ;
92
100
}
93
101
94
102
// / Helper to convert C-style strings (i.e., '\0' terminated) to lower case.
95
103
static inline void toLower (char *token) {
96
- for (char *c = token; *c; ++c )
104
+ for (char *c = token; *c; c++ )
97
105
*c = tolower (*c);
98
106
}
99
107
@@ -116,33 +124,38 @@ void SparseTensorReader::readMMEHeader() {
116
124
char symmetry[64 ];
117
125
// Read header line.
118
126
if (fscanf (file, " %63s %63s %63s %63s %63s\n " , header, object, format, field,
119
- symmetry) != 5 )
120
- MLIR_SPARSETENSOR_FATAL (" Corrupt header in %s\n " , filename);
127
+ symmetry) != 5 ) {
128
+ fprintf (stderr, " Corrupt header in %s\n " , filename);
129
+ exit (1 );
130
+ }
121
131
// Convert all to lowercase up front (to avoid accidental redundancy).
122
132
toLower (header);
123
133
toLower (object);
124
134
toLower (format);
125
135
toLower (field);
126
136
toLower (symmetry);
127
137
// Process `field`, which specify pattern or the data type of the values.
128
- if (streq (field, " pattern" ))
138
+ if (streq (field, " pattern" )) {
129
139
valueKind_ = ValueKind::kPattern ;
130
- else if (streq (field, " real" ))
140
+ } else if (streq (field, " real" )) {
131
141
valueKind_ = ValueKind::kReal ;
132
- else if (streq (field, " integer" ))
142
+ } else if (streq (field, " integer" )) {
133
143
valueKind_ = ValueKind::kInteger ;
134
- else if (streq (field, " complex" ))
144
+ } else if (streq (field, " complex" )) {
135
145
valueKind_ = ValueKind::kComplex ;
136
- else
137
- MLIR_SPARSETENSOR_FATAL (" Unexpected header field value in %s\n " , filename);
146
+ } else {
147
+ fprintf (stderr, " Unexpected header field value in %s\n " , filename);
148
+ exit (1 );
149
+ }
138
150
// Set properties.
139
151
isSymmetric_ = streq (symmetry, " symmetric" );
140
152
// Make sure this is a general sparse matrix.
141
153
if (strne (header, " %%matrixmarket" ) || strne (object, " matrix" ) ||
142
154
strne (format, " coordinate" ) ||
143
- (strne (symmetry, " general" ) && !isSymmetric_))
144
- MLIR_SPARSETENSOR_FATAL (" Cannot find a general sparse matrix in %s\n " ,
145
- filename);
155
+ (strne (symmetry, " general" ) && !isSymmetric_)) {
156
+ fprintf (stderr, " Cannot find a general sparse matrix in %s\n " , filename);
157
+ exit (1 );
158
+ }
146
159
// Skip comments.
147
160
while (true ) {
148
161
readLine ();
@@ -152,8 +165,10 @@ void SparseTensorReader::readMMEHeader() {
152
165
// Next line contains M N NNZ.
153
166
idata[0 ] = 2 ; // rank
154
167
if (sscanf (line, " %" PRIu64 " %" PRIu64 " %" PRIu64 " \n " , idata + 2 , idata + 3 ,
155
- idata + 1 ) != 3 )
156
- MLIR_SPARSETENSOR_FATAL (" Cannot find size in %s\n " , filename);
168
+ idata + 1 ) != 3 ) {
169
+ fprintf (stderr, " Cannot find size in %s\n " , filename);
170
+ exit (1 );
171
+ }
157
172
}
158
173
159
174
// / Read the "extended" FROSTT header. Although not part of the documented
@@ -168,12 +183,17 @@ void SparseTensorReader::readExtFROSTTHeader() {
168
183
break ;
169
184
}
170
185
// Next line contains RANK and NNZ.
171
- if (sscanf (line, " %" PRIu64 " %" PRIu64 " \n " , idata, idata + 1 ) != 2 )
172
- MLIR_SPARSETENSOR_FATAL (" Cannot find metadata in %s\n " , filename);
186
+ if (sscanf (line, " %" PRIu64 " %" PRIu64 " \n " , idata, idata + 1 ) != 2 ) {
187
+ fprintf (stderr, " Cannot find metadata in %s\n " , filename);
188
+ exit (1 );
189
+ }
173
190
// Followed by a line with the dimension sizes (one per rank).
174
- for (uint64_t r = 0 ; r < idata[0 ]; ++r)
175
- if (fscanf (file, " %" PRIu64, idata + 2 + r) != 1 )
176
- MLIR_SPARSETENSOR_FATAL (" Cannot find dimension size %s\n " , filename);
191
+ for (uint64_t r = 0 ; r < idata[0 ]; r++) {
192
+ if (fscanf (file, " %" PRIu64, idata + 2 + r) != 1 ) {
193
+ fprintf (stderr, " Cannot find dimension size %s\n " , filename);
194
+ exit (1 );
195
+ }
196
+ }
177
197
readLine (); // end of line
178
198
// The FROSTT format does not define the data type of the nonzero elements.
179
199
valueKind_ = ValueKind::kUndefined ;
0 commit comments