Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(117)

Side by Side Diff: unittest/IceParseInstsTest.cpp

Issue 1120853002: Fix instruction unit tests to use new editing constants. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- unittest/IceParseInstsTest.cpp - test instruction errors -----------===// 1 //===- unittest/IceParseInstsTest.cpp - test instruction errors -----------===//
2 // 2 //
3 // The Subzero Code Generator 3 // The Subzero Code Generator
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 9
10 #include "llvm/ADT/STLExtras.h" 10 #include "llvm/ADT/STLExtras.h"
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 "%p0, align 1;\n", 100 "%p0, align 1;\n",
101 DumpMunger.getLinesWithSubstring("62:4")); 101 DumpMunger.getLinesWithSubstring("62:4"));
102 102
103 // Show that we can handle alignment of 1. 103 // Show that we can handle alignment of 1.
104 IceTest::SubzeroBitcodeMunger Munger( 104 IceTest::SubzeroBitcodeMunger Munger(
105 BitcodeRecords, array_lengthof(BitcodeRecords), Terminator); 105 BitcodeRecords, array_lengthof(BitcodeRecords), Terminator);
106 EXPECT_TRUE(Munger.runTest("Good alloca alignment 1")); 106 EXPECT_TRUE(Munger.runTest("Good alloca alignment 1"));
107 107
108 // Show what happens when changing alignment to 0. 108 // Show what happens when changing alignment to 0.
109 const uint64_t Align0[] = { 109 const uint64_t Align0[] = {
110 ReplaceIndex, NaClBitcodeMunger::Replace, 110 ReplaceIndex, NaClMungedBitcode::Replace,
111 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignZero(), Terminator, 111 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignZero(), Terminator,
112 }; 112 };
113 EXPECT_TRUE(Munger.runTest("Good alloca alignment 0", Align0, 113 EXPECT_TRUE(Munger.runTest("Good alloca alignment 0", Align0,
114 array_lengthof(Align0))); 114 array_lengthof(Align0)));
115 EXPECT_TRUE(DumpMunger.runTestForAssembly("Good alloca alignment 0", Align0, 115 EXPECT_TRUE(DumpMunger.runTestForAssembly("Good alloca alignment 0", Align0,
116 array_lengthof(Align0))); 116 array_lengthof(Align0)));
117 EXPECT_EQ(" %v0 = alloca i8, i32 %p0, align 0;\n", 117 EXPECT_EQ(" %v0 = alloca i8, i32 %p0, align 0;\n",
118 DumpMunger.getLinesWithSubstring("alloca")); 118 DumpMunger.getLinesWithSubstring("alloca"));
119 119
120 // Show what happens when changing alignment to 2**30. 120 // Show what happens when changing alignment to 2**30.
121 const uint64_t Align30[] = { 121 const uint64_t Align30[] = {
122 ReplaceIndex, NaClBitcodeMunger::Replace, 122 ReplaceIndex, NaClMungedBitcode::Replace,
123 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(30), Terminator, 123 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(30), Terminator,
124 }; 124 };
125 EXPECT_FALSE(Munger.runTest("Bad alloca alignment 30", Align30, 125 EXPECT_FALSE(Munger.runTest("Bad alloca alignment 30", Align30,
126 array_lengthof(Align30))); 126 array_lengthof(Align30)));
127 EXPECT_EQ("Error(62:4): Invalid function record: <19 1 31>\n", 127 EXPECT_EQ("Error(62:4): Invalid function record: <19 1 31>\n",
128 Munger.getTestResults()); 128 Munger.getTestResults());
129 129
130 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad alloca alignment 30", Align30, 130 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad alloca alignment 30", Align30,
131 array_lengthof(Align30))); 131 array_lengthof(Align30)));
132 EXPECT_EQ(" %v0 = alloca i8, i32 %p0, align 0;\n", 132 EXPECT_EQ(" %v0 = alloca i8, i32 %p0, align 0;\n",
133 DumpMunger.getLinesWithSubstring("alloca")); 133 DumpMunger.getLinesWithSubstring("alloca"));
134 EXPECT_EQ( 134 EXPECT_EQ(
135 "Error(62:4): Alignment can't be greater than 2**29. Found: 2**30\n", 135 "Error(62:4): Alignment can't be greater than 2**29. Found: 2**30\n",
136 DumpMunger.getLinesWithSubstring("Error")); 136 DumpMunger.getLinesWithSubstring("Error"));
137 137
138 // Show what happens when changing alignment to 2**29. 138 // Show what happens when changing alignment to 2**29.
139 const uint64_t Align29[] = { 139 const uint64_t Align29[] = {
140 ReplaceIndex, NaClBitcodeMunger::Replace, 140 ReplaceIndex, NaClMungedBitcode::Replace,
141 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(29), Terminator, 141 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(29), Terminator,
142 }; 142 };
143 EXPECT_TRUE(Munger.runTest("Good alloca alignment 29", Align29, 143 EXPECT_TRUE(Munger.runTest("Good alloca alignment 29", Align29,
144 array_lengthof(Align29))); 144 array_lengthof(Align29)));
145 EXPECT_TRUE(DumpMunger.runTestForAssembly("Good alloca alignment 29", Align29, 145 EXPECT_TRUE(DumpMunger.runTestForAssembly("Good alloca alignment 29", Align29,
146 array_lengthof(Align29))); 146 array_lengthof(Align29)));
147 EXPECT_EQ(" %v0 = alloca i8, i32 %p0, align 536870912;\n", 147 EXPECT_EQ(" %v0 = alloca i8, i32 %p0, align 536870912;\n",
148 DumpMunger.getLinesWithSubstring("alloca")); 148 DumpMunger.getLinesWithSubstring("alloca"));
149 } 149 }
150 150
(...skipping 22 matching lines...) Expand all
173 EXPECT_TRUE(DumpMunger.runTest("Good load i32 alignment 1")); 173 EXPECT_TRUE(DumpMunger.runTest("Good load i32 alignment 1"));
174 EXPECT_EQ(" 58:4| 3: <20, 1, 1, 0> | %v0 = load i32* %p0, " 174 EXPECT_EQ(" 58:4| 3: <20, 1, 1, 0> | %v0 = load i32* %p0, "
175 "align 1;\n", 175 "align 1;\n",
176 DumpMunger.getLinesWithSubstring("58:4")); 176 DumpMunger.getLinesWithSubstring("58:4"));
177 IceTest::SubzeroBitcodeMunger Munger( 177 IceTest::SubzeroBitcodeMunger Munger(
178 BitcodeRecords, array_lengthof(BitcodeRecords), Terminator); 178 BitcodeRecords, array_lengthof(BitcodeRecords), Terminator);
179 EXPECT_TRUE(Munger.runTest("Good load i32 alignment 1")); 179 EXPECT_TRUE(Munger.runTest("Good load i32 alignment 1"));
180 180
181 // Show what happens when changing alignment to 0. 181 // Show what happens when changing alignment to 0.
182 const uint64_t Align0[] = { 182 const uint64_t Align0[] = {
183 ReplaceIndex, NaClBitcodeMunger::Replace, 183 ReplaceIndex, NaClMungedBitcode::Replace,
184 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignZero(), 0, Terminator, 184 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignZero(), 0, Terminator,
185 }; 185 };
186 EXPECT_FALSE(Munger.runTest("Bad load i32 alignment 0", Align0, 186 EXPECT_FALSE(Munger.runTest("Bad load i32 alignment 0", Align0,
187 array_lengthof(Align0))); 187 array_lengthof(Align0)));
188 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 0 0>\n", 188 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 0 0>\n",
189 Munger.getTestResults()); 189 Munger.getTestResults());
190 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad load i32 alignment 0", Align0, 190 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad load i32 alignment 0", Align0,
191 array_lengthof(Align0))); 191 array_lengthof(Align0)));
192 EXPECT_EQ(" %v0 = load i32* %p0, align 0;\n" 192 EXPECT_EQ(" %v0 = load i32* %p0, align 0;\n"
193 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", 193 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n",
194 DumpMunger.getLinesWithSubstring("load")); 194 DumpMunger.getLinesWithSubstring("load"));
195 195
196 // Show what happens when changing alignment to 4. 196 // Show what happens when changing alignment to 4.
197 const uint64_t Align4[] = { 197 const uint64_t Align4[] = {
198 ReplaceIndex, NaClBitcodeMunger::Replace, 198 ReplaceIndex, NaClMungedBitcode::Replace,
199 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(2), 0, Terminator, 199 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(2), 0, Terminator,
200 }; 200 };
201 EXPECT_FALSE(Munger.runTest("Bad load i32 alignment 4", Align4, 201 EXPECT_FALSE(Munger.runTest("Bad load i32 alignment 4", Align4,
202 array_lengthof(Align4))); 202 array_lengthof(Align4)));
203 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 3 0>\n", 203 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 3 0>\n",
204 Munger.getTestResults()); 204 Munger.getTestResults());
205 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad load i32 alignment 4", Align4, 205 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad load i32 alignment 4", Align4,
206 array_lengthof(Align4))); 206 array_lengthof(Align4)));
207 EXPECT_EQ(" %v0 = load i32* %p0, align 4;\n" 207 EXPECT_EQ(" %v0 = load i32* %p0, align 4;\n"
208 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", 208 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n",
209 DumpMunger.getLinesWithSubstring("load")); 209 DumpMunger.getLinesWithSubstring("load"));
210 210
211 // Show what happens when changing alignment to 2**29. 211 // Show what happens when changing alignment to 2**29.
212 const uint64_t Align29[] = { 212 const uint64_t Align29[] = {
213 ReplaceIndex, NaClBitcodeMunger::Replace, 213 ReplaceIndex, NaClMungedBitcode::Replace,
214 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(29), 0, Terminator, 214 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(29), 0, Terminator,
215 }; 215 };
216 EXPECT_FALSE(Munger.runTest("Bad load i32 alignment 29", Align29, 216 EXPECT_FALSE(Munger.runTest("Bad load i32 alignment 29", Align29,
217 array_lengthof(Align29))); 217 array_lengthof(Align29)));
218 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 30 0>\n", 218 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 30 0>\n",
219 Munger.getTestResults()); 219 Munger.getTestResults());
220 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad load i32 alignment 29", 220 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad load i32 alignment 29",
221 Align29, array_lengthof(Align29))); 221 Align29, array_lengthof(Align29)));
222 EXPECT_EQ(" %v0 = load i32* %p0, align 536870912;\n" 222 EXPECT_EQ(" %v0 = load i32* %p0, align 536870912;\n"
223 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", 223 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n",
224 DumpMunger.getLinesWithSubstring("load")); 224 DumpMunger.getLinesWithSubstring("load"));
225 225
226 // Show what happens when changing alignment to 2**30. 226 // Show what happens when changing alignment to 2**30.
227 const uint64_t Align30[] = { 227 const uint64_t Align30[] = {
228 ReplaceIndex, NaClBitcodeMunger::Replace, 228 ReplaceIndex, NaClMungedBitcode::Replace,
229 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator, 229 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator,
230 }; 230 };
231 EXPECT_FALSE(Munger.runTest("Bad load i32 alignment 30", Align30, 231 EXPECT_FALSE(Munger.runTest("Bad load i32 alignment 30", Align30,
232 array_lengthof(Align30))); 232 array_lengthof(Align30)));
233 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 31 0>\n", 233 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 31 0>\n",
234 Munger.getTestResults()); 234 Munger.getTestResults());
235 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad load i32 alignment 30", 235 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad load i32 alignment 30",
236 Align30, array_lengthof(Align30))); 236 Align30, array_lengthof(Align30)));
237 EXPECT_EQ(" %v0 = load i32* %p0, align 0;\n" 237 EXPECT_EQ(" %v0 = load i32* %p0, align 0;\n"
238 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", 238 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n",
(...skipping 26 matching lines...) Expand all
265 EXPECT_TRUE(DumpMunger.runTest("Good load float alignment 1")); 265 EXPECT_TRUE(DumpMunger.runTest("Good load float alignment 1"));
266 EXPECT_EQ(" 58:4| 3: <20, 1, 1, 0> | %v0 = load float* " 266 EXPECT_EQ(" 58:4| 3: <20, 1, 1, 0> | %v0 = load float* "
267 "%p0, align 1;\n", 267 "%p0, align 1;\n",
268 DumpMunger.getLinesWithSubstring("58:4")); 268 DumpMunger.getLinesWithSubstring("58:4"));
269 IceTest::SubzeroBitcodeMunger Munger( 269 IceTest::SubzeroBitcodeMunger Munger(
270 BitcodeRecords, array_lengthof(BitcodeRecords), Terminator); 270 BitcodeRecords, array_lengthof(BitcodeRecords), Terminator);
271 EXPECT_TRUE(Munger.runTest("Good load float alignment 1")); 271 EXPECT_TRUE(Munger.runTest("Good load float alignment 1"));
272 272
273 // Show what happens when changing alignment to 0. 273 // Show what happens when changing alignment to 0.
274 const uint64_t Align0[] = { 274 const uint64_t Align0[] = {
275 ReplaceIndex, NaClBitcodeMunger::Replace, 275 ReplaceIndex, NaClMungedBitcode::Replace,
276 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignZero(), 0, Terminator, 276 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignZero(), 0, Terminator,
277 }; 277 };
278 EXPECT_FALSE(Munger.runTest("Bad load float alignment 0", Align0, 278 EXPECT_FALSE(Munger.runTest("Bad load float alignment 0", Align0,
279 array_lengthof(Align0))); 279 array_lengthof(Align0)));
280 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 0 0>\n", 280 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 0 0>\n",
281 Munger.getTestResults()); 281 Munger.getTestResults());
282 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad load float alignment 0", 282 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad load float alignment 0",
283 Align0, array_lengthof(Align0))); 283 Align0, array_lengthof(Align0)));
284 EXPECT_EQ( 284 EXPECT_EQ(
285 " %v0 = load float* %p0, align 0;\n" 285 " %v0 = load float* %p0, align 0;\n"
286 "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n", 286 "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n",
287 DumpMunger.getLinesWithSubstring("load")); 287 DumpMunger.getLinesWithSubstring("load"));
288 288
289 // Show what happens when changing alignment to 4. 289 // Show what happens when changing alignment to 4.
290 const uint64_t Align4[] = { 290 const uint64_t Align4[] = {
291 ReplaceIndex, NaClBitcodeMunger::Replace, 291 ReplaceIndex, NaClMungedBitcode::Replace,
292 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(2), 0, Terminator, 292 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(2), 0, Terminator,
293 }; 293 };
294 EXPECT_TRUE(Munger.runTest("Good load float alignment 4", Align4, 294 EXPECT_TRUE(Munger.runTest("Good load float alignment 4", Align4,
295 array_lengthof(Align4))); 295 array_lengthof(Align4)));
296 EXPECT_TRUE(DumpMunger.runTestForAssembly("Good load float alignment 4", 296 EXPECT_TRUE(DumpMunger.runTestForAssembly("Good load float alignment 4",
297 Align4, array_lengthof(Align4))); 297 Align4, array_lengthof(Align4)));
298 EXPECT_EQ(" %v0 = load float* %p0, align 4;\n", 298 EXPECT_EQ(" %v0 = load float* %p0, align 4;\n",
299 DumpMunger.getLinesWithSubstring("load")); 299 DumpMunger.getLinesWithSubstring("load"));
300 300
301 const uint64_t Align29[] = { 301 const uint64_t Align29[] = {
302 ReplaceIndex, NaClBitcodeMunger::Replace, 302 ReplaceIndex, NaClMungedBitcode::Replace,
303 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(29), 0, Terminator, 303 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(29), 0, Terminator,
304 }; 304 };
305 EXPECT_FALSE(Munger.runTest("Bad load float alignment 29", Align29, 305 EXPECT_FALSE(Munger.runTest("Bad load float alignment 29", Align29,
306 array_lengthof(Align29))); 306 array_lengthof(Align29)));
307 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 30 0>\n", 307 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 30 0>\n",
308 Munger.getTestResults()); 308 Munger.getTestResults());
309 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad load float alignment 29", 309 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad load float alignment 29",
310 Align29, array_lengthof(Align29))); 310 Align29, array_lengthof(Align29)));
311 EXPECT_EQ( 311 EXPECT_EQ(
312 " %v0 = load float* %p0, align 536870912;\n" 312 " %v0 = load float* %p0, align 536870912;\n"
313 "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n", 313 "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n",
314 DumpMunger.getLinesWithSubstring("load")); 314 DumpMunger.getLinesWithSubstring("load"));
315 315
316 // Show what happens when changing alignment to 2**30. 316 // Show what happens when changing alignment to 2**30.
317 const uint64_t Align30[] = { 317 const uint64_t Align30[] = {
318 ReplaceIndex, NaClBitcodeMunger::Replace, 318 ReplaceIndex, NaClMungedBitcode::Replace,
319 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator, 319 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator,
320 }; 320 };
321 EXPECT_FALSE(Munger.runTest("Bad load float alignment 30", Align30, 321 EXPECT_FALSE(Munger.runTest("Bad load float alignment 30", Align30,
322 array_lengthof(Align30))); 322 array_lengthof(Align30)));
323 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 31 0>\n", 323 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 31 0>\n",
324 Munger.getTestResults()); 324 Munger.getTestResults());
325 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad load float alignment 30", 325 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad load float alignment 30",
326 Align30, array_lengthof(Align30))); 326 Align30, array_lengthof(Align30)));
327 EXPECT_EQ( 327 EXPECT_EQ(
328 " %v0 = load float* %p0, align 0;\n" 328 " %v0 = load float* %p0, align 0;\n"
(...skipping 27 matching lines...) Expand all
356 EXPECT_TRUE(DumpMunger.runTest("Good Store Alignment 1")); 356 EXPECT_TRUE(DumpMunger.runTest("Good Store Alignment 1"));
357 EXPECT_EQ(" 62:4| 3: <24, 2, 1, 1> | store float %p1, " 357 EXPECT_EQ(" 62:4| 3: <24, 2, 1, 1> | store float %p1, "
358 "float* %p0, \n", 358 "float* %p0, \n",
359 DumpMunger.getLinesWithSubstring("62:4")); 359 DumpMunger.getLinesWithSubstring("62:4"));
360 IceTest::SubzeroBitcodeMunger Munger( 360 IceTest::SubzeroBitcodeMunger Munger(
361 BitcodeRecords, array_lengthof(BitcodeRecords), Terminator); 361 BitcodeRecords, array_lengthof(BitcodeRecords), Terminator);
362 EXPECT_TRUE(Munger.runTest("Good store alignment")); 362 EXPECT_TRUE(Munger.runTest("Good store alignment"));
363 363
364 // Show what happens when changing alignment to 0. 364 // Show what happens when changing alignment to 0.
365 const uint64_t Align0[] = { 365 const uint64_t Align0[] = {
366 ReplaceIndex, NaClBitcodeMunger::Replace, 366 ReplaceIndex, NaClMungedBitcode::Replace,
367 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignZero(), Terminator, 367 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignZero(), Terminator,
368 }; 368 };
369 EXPECT_FALSE( 369 EXPECT_FALSE(
370 Munger.runTest("Bad store alignment 0", Align0, array_lengthof(Align0))); 370 Munger.runTest("Bad store alignment 0", Align0, array_lengthof(Align0)));
371 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 0>\n", 371 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 0>\n",
372 Munger.getTestResults()); 372 Munger.getTestResults());
373 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad store alignment 0", Align0, 373 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad store alignment 0", Align0,
374 array_lengthof(Align0))); 374 array_lengthof(Align0)));
375 EXPECT_EQ( 375 EXPECT_EQ(
376 " store float %p1, float* %p0, align 0;\n" 376 " store float %p1, float* %p0, align 0;\n"
377 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", 377 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n",
378 DumpMunger.getLinesWithSubstring("store")); 378 DumpMunger.getLinesWithSubstring("store"));
379 379
380 // Show what happens when changing alignment to 4. 380 // Show what happens when changing alignment to 4.
381 const uint64_t Align4[] = { 381 const uint64_t Align4[] = {
382 ReplaceIndex, NaClBitcodeMunger::Replace, 382 ReplaceIndex, NaClMungedBitcode::Replace,
383 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(2), Terminator, 383 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(2), Terminator,
384 }; 384 };
385 EXPECT_TRUE( 385 EXPECT_TRUE(
386 Munger.runTest("Bad store alignment 4", Align4, array_lengthof(Align4))); 386 Munger.runTest("Bad store alignment 4", Align4, array_lengthof(Align4)));
387 EXPECT_TRUE(DumpMunger.runTestForAssembly("Good store alignment 4", Align4, 387 EXPECT_TRUE(DumpMunger.runTestForAssembly("Good store alignment 4", Align4,
388 array_lengthof(Align4))); 388 array_lengthof(Align4)));
389 389
390 // Show what happens when changing alignment to 8. 390 // Show what happens when changing alignment to 8.
391 const uint64_t Align8[] = { 391 const uint64_t Align8[] = {
392 ReplaceIndex, NaClBitcodeMunger::Replace, 392 ReplaceIndex, NaClMungedBitcode::Replace,
393 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(3), Terminator, 393 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(3), Terminator,
394 }; 394 };
395 EXPECT_FALSE( 395 EXPECT_FALSE(
396 Munger.runTest("Bad store alignment 8", Align8, array_lengthof(Align8))); 396 Munger.runTest("Bad store alignment 8", Align8, array_lengthof(Align8)));
397 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 4>\n", 397 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 4>\n",
398 Munger.getTestResults()); 398 Munger.getTestResults());
399 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad store alignment 8", Align8, 399 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad store alignment 8", Align8,
400 array_lengthof(Align8))); 400 array_lengthof(Align8)));
401 EXPECT_EQ( 401 EXPECT_EQ(
402 " store float %p1, float* %p0, align 8;\n" 402 " store float %p1, float* %p0, align 8;\n"
403 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", 403 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n",
404 DumpMunger.getLinesWithSubstring("store")); 404 DumpMunger.getLinesWithSubstring("store"));
405 405
406 // Show what happens when changing alignment to 2**29. 406 // Show what happens when changing alignment to 2**29.
407 const uint64_t Align29[] = { 407 const uint64_t Align29[] = {
408 ReplaceIndex, NaClBitcodeMunger::Replace, 408 ReplaceIndex, NaClMungedBitcode::Replace,
409 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(29), Terminator, 409 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(29), Terminator,
410 }; 410 };
411 EXPECT_FALSE(Munger.runTest("Bad store alignment 29", Align29, 411 EXPECT_FALSE(Munger.runTest("Bad store alignment 29", Align29,
412 array_lengthof(Align29))); 412 array_lengthof(Align29)));
413 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 30>\n", 413 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 30>\n",
414 Munger.getTestResults()); 414 Munger.getTestResults());
415 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad store alignment 29", Align29, 415 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad store alignment 29", Align29,
416 array_lengthof(Align29))); 416 array_lengthof(Align29)));
417 EXPECT_EQ( 417 EXPECT_EQ(
418 " store float %p1, float* %p0, align 536870912;\n" 418 " store float %p1, float* %p0, align 536870912;\n"
419 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", 419 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n",
420 DumpMunger.getLinesWithSubstring("store")); 420 DumpMunger.getLinesWithSubstring("store"));
421 421
422 const uint64_t Align30[] = { 422 const uint64_t Align30[] = {
423 ReplaceIndex, NaClBitcodeMunger::Replace, 423 ReplaceIndex, NaClMungedBitcode::Replace,
424 // Note: alignment stored as 0 or log2(Alignment)+1. 424 // Note: alignment stored as 0 or log2(Alignment)+1.
425 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(30), Terminator, 425 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(30), Terminator,
426 }; 426 };
427 EXPECT_FALSE(Munger.runTest("Bad store alignment 30", Align30, 427 EXPECT_FALSE(Munger.runTest("Bad store alignment 30", Align30,
428 array_lengthof(Align30))); 428 array_lengthof(Align30)));
429 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 31>\n", 429 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 31>\n",
430 Munger.getTestResults()); 430 Munger.getTestResults());
431 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad Store alignment 30", Align30, 431 EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad Store alignment 30", Align30,
432 array_lengthof(Align30))); 432 array_lengthof(Align30)));
433 EXPECT_EQ( 433 EXPECT_EQ(
434 " store float %p1, float* %p0, align 0;\n" 434 " store float %p1, float* %p0, align 0;\n"
435 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", 435 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n",
436 DumpMunger.getLinesWithSubstring("store")); 436 DumpMunger.getLinesWithSubstring("store"));
437 } 437 }
438 438
439 } // end of anonymous namespace 439 } // end of anonymous namespace
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698