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

Side by Side Diff: unittest/IceParseInstsTest.cpp

Issue 1173353003: Unittest fixes. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Created 5 years, 6 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 // Show bitcode objdump for BitcodeRecords. 49 // Show bitcode objdump for BitcodeRecords.
50 NaClObjDumpMunger DumpMunger(ARRAY_TERM(BitcodeRecords)); 50 NaClObjDumpMunger DumpMunger(ARRAY_TERM(BitcodeRecords));
51 EXPECT_FALSE(DumpMunger.runTest()); 51 EXPECT_FALSE(DumpMunger.runTest());
52 EXPECT_EQ(" 66:4| 3: <34, 0, 4, 2, 100> | call void @f0(i32 " 52 EXPECT_EQ(" 66:4| 3: <34, 0, 4, 2, 100> | call void @f0(i32 "
53 "%p0, i32 @f0);\n" 53 "%p0, i32 @f0);\n"
54 "Error(66:4): Invalid relative value id: 100 (Must be <= 4)\n", 54 "Error(66:4): Invalid relative value id: 100 (Must be <= 4)\n",
55 DumpMunger.getLinesWithSubstring("66:4")); 55 DumpMunger.getLinesWithSubstring("66:4"));
56 56
57 // Show that we get appropriate error when parsing in Subzero. 57 // Show that we get appropriate error when parsing in Subzero.
58 IceTest::SubzeroBitcodeMunger Munger(ARRAY_TERM(BitcodeRecords)); 58 IceTest::SubzeroBitcodeMunger Munger(ARRAY_TERM(BitcodeRecords));
59 EXPECT_FALSE(Munger.runTest()); 59 EXPECT_FALSE(Munger.runTest());
Karl 2015/06/11 19:58:54 Why not add an (optional) flag to runTest() in (un
John 2015/06/11 20:42:09 There was precedent to doing this (e.g., lines 52-
60 EXPECT_EQ("Error(66:4): Invalid function record: <34 0 4 2 100>\n", 60 EXPECT_EQ("\t.type\t__Sz_block_profile_info,@object\n"
Jim Stichnoth 2015/06/11 19:07:14 Can you factor this string into a const char *, or
John 2015/06/11 20:42:09 Not easily. EXPECT_EQ expands to another another m
61 "\t.section\t.rodata,\"a\",@progbits\n"
62 "\t.globl\t__Sz_block_profile_info\n"
63 "\t.align\t8"
64 "\n__Sz_block_profile_info:\n"
65 "\t.zero\t8\n"
66 "\t.size\t__Sz_block_profile_info, 8\n"
67 "Error(66:4): Invalid function record: <34 0 4 2 100>\n",
61 Munger.getTestResults()); 68 Munger.getTestResults());
62 69
63 // Show that we generate a fatal error when not allowing error recovery. 70 // Show that we generate a fatal error when not allowing error recovery.
64 Munger.Flags.setAllowErrorRecovery(false); 71 Munger.Flags.setAllowErrorRecovery(false);
65 EXPECT_DEATH(Munger.runTest(), ".*ERROR: Unable to continue.*"); 72 EXPECT_DEATH(Munger.runTest(), ".*ERROR: Unable to continue.*");
66 } 73 }
67 74
68 /// Test how we recognize alignments in alloca instructions. 75 /// Test how we recognize alignments in alloca instructions.
69 TEST(IceParseInstsTests, AllocaAlignment) { 76 TEST(IceParseInstsTests, AllocaAlignment) {
70 const uint64_t BitcodeRecords[] = { 77 const uint64_t BitcodeRecords[] = {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 EXPECT_TRUE(DumpMunger.runTestForAssembly(ARRAY(Align0))); 113 EXPECT_TRUE(DumpMunger.runTestForAssembly(ARRAY(Align0)));
107 EXPECT_EQ(" %v0 = alloca i8, i32 %p0, align 0;\n", 114 EXPECT_EQ(" %v0 = alloca i8, i32 %p0, align 0;\n",
108 DumpMunger.getLinesWithSubstring("alloca")); 115 DumpMunger.getLinesWithSubstring("alloca"));
109 116
110 // Show what happens when changing alignment to 2**30. 117 // Show what happens when changing alignment to 2**30.
111 const uint64_t Align30[] = { 118 const uint64_t Align30[] = {
112 ReplaceIndex, NaClMungedBitcode::Replace, 119 ReplaceIndex, NaClMungedBitcode::Replace,
113 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(30), Terminator, 120 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(30), Terminator,
114 }; 121 };
115 EXPECT_FALSE(Munger.runTest(ARRAY(Align30))); 122 EXPECT_FALSE(Munger.runTest(ARRAY(Align30)));
116 EXPECT_EQ("Error(62:4): Invalid function record: <19 1 31>\n", 123 EXPECT_EQ("\t.type\t__Sz_block_profile_info,@object\n"
124 "\t.section\t.rodata,\"a\",@progbits\n"
125 "\t.globl\t__Sz_block_profile_info\n"
126 "\t.align\t8"
127 "\n__Sz_block_profile_info:\n"
128 "\t.zero\t8\n"
129 "\t.size\t__Sz_block_profile_info, 8\n"
130 "Error(62:4): Invalid function record: <19 1 31>\n",
117 Munger.getTestResults()); 131 Munger.getTestResults());
118 132
119 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30))); 133 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30)));
120 EXPECT_EQ(" %v0 = alloca i8, i32 %p0, align 0;\n", 134 EXPECT_EQ(" %v0 = alloca i8, i32 %p0, align 0;\n",
121 DumpMunger.getLinesWithSubstring("alloca")); 135 DumpMunger.getLinesWithSubstring("alloca"));
122 EXPECT_EQ( 136 EXPECT_EQ(
123 "Error(62:4): Alignment can't be greater than 2**29. Found: 2**30\n", 137 "Error(62:4): Alignment can't be greater than 2**29. Found: 2**30\n",
124 DumpMunger.getLinesWithSubstring("Error")); 138 DumpMunger.getLinesWithSubstring("Error"));
125 139
126 // Show what happens when changing alignment to 2**29. 140 // Show what happens when changing alignment to 2**29.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 DumpMunger.getLinesWithSubstring("58:4")); 175 DumpMunger.getLinesWithSubstring("58:4"));
162 IceTest::SubzeroBitcodeMunger Munger(ARRAY_TERM(BitcodeRecords)); 176 IceTest::SubzeroBitcodeMunger Munger(ARRAY_TERM(BitcodeRecords));
163 EXPECT_TRUE(Munger.runTest()); 177 EXPECT_TRUE(Munger.runTest());
164 178
165 // Show what happens when changing alignment to 0. 179 // Show what happens when changing alignment to 0.
166 const uint64_t Align0[] = { 180 const uint64_t Align0[] = {
167 ReplaceIndex, NaClMungedBitcode::Replace, 181 ReplaceIndex, NaClMungedBitcode::Replace,
168 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignZero(), 0, Terminator, 182 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignZero(), 0, Terminator,
169 }; 183 };
170 EXPECT_FALSE(Munger.runTest(ARRAY(Align0))); 184 EXPECT_FALSE(Munger.runTest(ARRAY(Align0)));
171 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 0 0>\n", 185 EXPECT_EQ("\t.type\t__Sz_block_profile_info,@object\n"
186 "\t.section\t.rodata,\"a\",@progbits\n"
187 "\t.globl\t__Sz_block_profile_info\n"
188 "\t.align\t8"
189 "\n__Sz_block_profile_info:\n"
190 "\t.zero\t8\n"
191 "\t.size\t__Sz_block_profile_info, 8\n"
192 "Error(58:4): Invalid function record: <20 1 0 0>\n",
172 Munger.getTestResults()); 193 Munger.getTestResults());
173 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align0))); 194 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align0)));
174 EXPECT_EQ(" %v0 = load i32* %p0, align 0;\n" 195 EXPECT_EQ(" %v0 = load i32* %p0, align 0;\n"
175 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", 196 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n",
176 DumpMunger.getLinesWithSubstring("load")); 197 DumpMunger.getLinesWithSubstring("load"));
177 198
178 // Show what happens when changing alignment to 4. 199 // Show what happens when changing alignment to 4.
179 const uint64_t Align4[] = { 200 const uint64_t Align4[] = {
180 ReplaceIndex, NaClMungedBitcode::Replace, 201 ReplaceIndex, NaClMungedBitcode::Replace,
181 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(2), 0, Terminator, 202 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(2), 0, Terminator,
182 }; 203 };
183 EXPECT_FALSE(Munger.runTest(ARRAY(Align4))); 204 EXPECT_FALSE(Munger.runTest(ARRAY(Align4)));
184 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 3 0>\n", 205 EXPECT_EQ("\t.type\t__Sz_block_profile_info,@object\n"
206 "\t.section\t.rodata,\"a\",@progbits\n"
207 "\t.globl\t__Sz_block_profile_info\n"
208 "\t.align\t8"
209 "\n__Sz_block_profile_info:\n"
210 "\t.zero\t8\n"
211 "\t.size\t__Sz_block_profile_info, 8\n"
212 "Error(58:4): Invalid function record: <20 1 3 0>\n",
185 Munger.getTestResults()); 213 Munger.getTestResults());
186 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align4))); 214 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align4)));
187 EXPECT_EQ(" %v0 = load i32* %p0, align 4;\n" 215 EXPECT_EQ(" %v0 = load i32* %p0, align 4;\n"
188 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", 216 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n",
189 DumpMunger.getLinesWithSubstring("load")); 217 DumpMunger.getLinesWithSubstring("load"));
190 218
191 // Show what happens when changing alignment to 2**29. 219 // Show what happens when changing alignment to 2**29.
192 const uint64_t Align29[] = { 220 const uint64_t Align29[] = {
193 ReplaceIndex, NaClMungedBitcode::Replace, 221 ReplaceIndex, NaClMungedBitcode::Replace,
194 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(29), 0, Terminator, 222 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(29), 0, Terminator,
195 }; 223 };
196 EXPECT_FALSE(Munger.runTest(ARRAY(Align29))); 224 EXPECT_FALSE(Munger.runTest(ARRAY(Align29)));
197 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 30 0>\n", 225 EXPECT_EQ("\t.type\t__Sz_block_profile_info,@object\n"
226 "\t.section\t.rodata,\"a\",@progbits\n"
227 "\t.globl\t__Sz_block_profile_info\n"
228 "\t.align\t8"
229 "\n__Sz_block_profile_info:\n"
230 "\t.zero\t8\n"
231 "\t.size\t__Sz_block_profile_info, 8\n"
232 "Error(58:4): Invalid function record: <20 1 30 0>\n",
198 Munger.getTestResults()); 233 Munger.getTestResults());
199 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align29))); 234 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align29)));
200 EXPECT_EQ(" %v0 = load i32* %p0, align 536870912;\n" 235 EXPECT_EQ(" %v0 = load i32* %p0, align 536870912;\n"
201 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", 236 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n",
202 DumpMunger.getLinesWithSubstring("load")); 237 DumpMunger.getLinesWithSubstring("load"));
203 238
204 // Show what happens when changing alignment to 2**30. 239 // Show what happens when changing alignment to 2**30.
205 const uint64_t Align30[] = { 240 const uint64_t Align30[] = {
206 ReplaceIndex, NaClMungedBitcode::Replace, 241 ReplaceIndex, NaClMungedBitcode::Replace,
207 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator, 242 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator,
208 }; 243 };
209 EXPECT_FALSE(Munger.runTest(ARRAY(Align30))); 244 EXPECT_FALSE(Munger.runTest(ARRAY(Align30)));
210 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 31 0>\n", 245 EXPECT_EQ("\t.type\t__Sz_block_profile_info,@object\n"
246 "\t.section\t.rodata,\"a\",@progbits\n"
247 "\t.globl\t__Sz_block_profile_info\n"
248 "\t.align\t8"
249 "\n__Sz_block_profile_info:\n"
250 "\t.zero\t8\n"
251 "\t.size\t__Sz_block_profile_info, 8\n"
252 "Error(58:4): Invalid function record: <20 1 31 0>\n",
211 Munger.getTestResults()); 253 Munger.getTestResults());
212 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30))); 254 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30)));
213 EXPECT_EQ(" %v0 = load i32* %p0, align 0;\n" 255 EXPECT_EQ(" %v0 = load i32* %p0, align 0;\n"
214 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n", 256 "Error(58:4): load: Illegal alignment for i32. Expects: 1\n",
215 DumpMunger.getLinesWithSubstring("load")); 257 DumpMunger.getLinesWithSubstring("load"));
216 } 258 }
217 259
218 // Test how we recognize alignments in load float instructions. 260 // Test how we recognize alignments in load float instructions.
219 TEST(IceParseInstsTests, LoadFloatAlignment) { 261 TEST(IceParseInstsTests, LoadFloatAlignment) {
220 const uint64_t BitcodeRecords[] = { 262 const uint64_t BitcodeRecords[] = {
(...skipping 22 matching lines...) Expand all
243 DumpMunger.getLinesWithSubstring("58:4")); 285 DumpMunger.getLinesWithSubstring("58:4"));
244 IceTest::SubzeroBitcodeMunger Munger(ARRAY_TERM(BitcodeRecords)); 286 IceTest::SubzeroBitcodeMunger Munger(ARRAY_TERM(BitcodeRecords));
245 EXPECT_TRUE(Munger.runTest()); 287 EXPECT_TRUE(Munger.runTest());
246 288
247 // Show what happens when changing alignment to 0. 289 // Show what happens when changing alignment to 0.
248 const uint64_t Align0[] = { 290 const uint64_t Align0[] = {
249 ReplaceIndex, NaClMungedBitcode::Replace, 291 ReplaceIndex, NaClMungedBitcode::Replace,
250 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignZero(), 0, Terminator, 292 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignZero(), 0, Terminator,
251 }; 293 };
252 EXPECT_FALSE(Munger.runTest(ARRAY(Align0))); 294 EXPECT_FALSE(Munger.runTest(ARRAY(Align0)));
253 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 0 0>\n", 295 EXPECT_EQ("\t.type\t__Sz_block_profile_info,@object\n"
296 "\t.section\t.rodata,\"a\",@progbits\n"
297 "\t.globl\t__Sz_block_profile_info\n"
298 "\t.align\t8"
299 "\n__Sz_block_profile_info:\n"
300 "\t.zero\t8\n"
301 "\t.size\t__Sz_block_profile_info, 8\n"
302 "Error(58:4): Invalid function record: <20 1 0 0>\n",
254 Munger.getTestResults()); 303 Munger.getTestResults());
255 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align0))); 304 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align0)));
256 EXPECT_EQ( 305 EXPECT_EQ(
257 " %v0 = load float* %p0, align 0;\n" 306 " %v0 = load float* %p0, align 0;\n"
258 "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n", 307 "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n",
259 DumpMunger.getLinesWithSubstring("load")); 308 DumpMunger.getLinesWithSubstring("load"));
260 309
261 // Show what happens when changing alignment to 4. 310 // Show what happens when changing alignment to 4.
262 const uint64_t Align4[] = { 311 const uint64_t Align4[] = {
263 ReplaceIndex, NaClMungedBitcode::Replace, 312 ReplaceIndex, NaClMungedBitcode::Replace,
264 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(2), 0, Terminator, 313 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(2), 0, Terminator,
265 }; 314 };
266 EXPECT_TRUE(Munger.runTest(ARRAY(Align4))); 315 EXPECT_TRUE(Munger.runTest(ARRAY(Align4)));
267 EXPECT_TRUE(DumpMunger.runTestForAssembly(ARRAY(Align4))); 316 EXPECT_TRUE(DumpMunger.runTestForAssembly(ARRAY(Align4)));
268 EXPECT_EQ(" %v0 = load float* %p0, align 4;\n", 317 EXPECT_EQ(" %v0 = load float* %p0, align 4;\n",
269 DumpMunger.getLinesWithSubstring("load")); 318 DumpMunger.getLinesWithSubstring("load"));
270 319
271 const uint64_t Align29[] = { 320 const uint64_t Align29[] = {
272 ReplaceIndex, NaClMungedBitcode::Replace, 321 ReplaceIndex, NaClMungedBitcode::Replace,
273 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(29), 0, Terminator, 322 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(29), 0, Terminator,
274 }; 323 };
275 EXPECT_FALSE(Munger.runTest(ARRAY(Align29))); 324 EXPECT_FALSE(Munger.runTest(ARRAY(Align29)));
276 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 30 0>\n", 325 EXPECT_EQ("\t.type\t__Sz_block_profile_info,@object\n"
326 "\t.section\t.rodata,\"a\",@progbits\n"
327 "\t.globl\t__Sz_block_profile_info\n"
328 "\t.align\t8"
329 "\n__Sz_block_profile_info:\n"
330 "\t.zero\t8\n"
331 "\t.size\t__Sz_block_profile_info, 8\n"
332 "Error(58:4): Invalid function record: <20 1 30 0>\n",
277 Munger.getTestResults()); 333 Munger.getTestResults());
278 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align29))); 334 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align29)));
279 EXPECT_EQ( 335 EXPECT_EQ(
280 " %v0 = load float* %p0, align 536870912;\n" 336 " %v0 = load float* %p0, align 536870912;\n"
281 "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n", 337 "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n",
282 DumpMunger.getLinesWithSubstring("load")); 338 DumpMunger.getLinesWithSubstring("load"));
283 339
284 // Show what happens when changing alignment to 2**30. 340 // Show what happens when changing alignment to 2**30.
285 const uint64_t Align30[] = { 341 const uint64_t Align30[] = {
286 ReplaceIndex, NaClMungedBitcode::Replace, 342 ReplaceIndex, NaClMungedBitcode::Replace,
287 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator, 343 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator,
288 }; 344 };
289 EXPECT_FALSE(Munger.runTest(ARRAY(Align30))); 345 EXPECT_FALSE(Munger.runTest(ARRAY(Align30)));
290 EXPECT_EQ("Error(58:4): Invalid function record: <20 1 31 0>\n", 346 EXPECT_EQ("\t.type\t__Sz_block_profile_info,@object\n"
347 "\t.section\t.rodata,\"a\",@progbits\n"
348 "\t.globl\t__Sz_block_profile_info\n"
349 "\t.align\t8"
350 "\n__Sz_block_profile_info:\n"
351 "\t.zero\t8\n"
352 "\t.size\t__Sz_block_profile_info, 8\n"
353 "Error(58:4): Invalid function record: <20 1 31 0>\n",
291 Munger.getTestResults()); 354 Munger.getTestResults());
292 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30))); 355 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30)));
293 EXPECT_EQ( 356 EXPECT_EQ(
294 " %v0 = load float* %p0, align 0;\n" 357 " %v0 = load float* %p0, align 0;\n"
295 "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n", 358 "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n",
296 DumpMunger.getLinesWithSubstring("load")); 359 DumpMunger.getLinesWithSubstring("load"));
297 } 360 }
298 361
299 // Test how we recognize alignments in store instructions. 362 // Test how we recognize alignments in store instructions.
300 TEST(NaClParseInstsTests, StoreAlignment) { 363 TEST(NaClParseInstsTests, StoreAlignment) {
(...skipping 25 matching lines...) Expand all
326 IceTest::SubzeroBitcodeMunger Munger( 389 IceTest::SubzeroBitcodeMunger Munger(
327 BitcodeRecords, array_lengthof(BitcodeRecords), Terminator); 390 BitcodeRecords, array_lengthof(BitcodeRecords), Terminator);
328 EXPECT_TRUE(Munger.runTest()); 391 EXPECT_TRUE(Munger.runTest());
329 392
330 // Show what happens when changing alignment to 0. 393 // Show what happens when changing alignment to 0.
331 const uint64_t Align0[] = { 394 const uint64_t Align0[] = {
332 ReplaceIndex, NaClMungedBitcode::Replace, 395 ReplaceIndex, NaClMungedBitcode::Replace,
333 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignZero(), Terminator, 396 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignZero(), Terminator,
334 }; 397 };
335 EXPECT_FALSE(Munger.runTest(ARRAY(Align0))); 398 EXPECT_FALSE(Munger.runTest(ARRAY(Align0)));
336 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 0>\n", 399 EXPECT_EQ("\t.type\t__Sz_block_profile_info,@object\n"
400 "\t.section\t.rodata,\"a\",@progbits\n"
401 "\t.globl\t__Sz_block_profile_info\n"
402 "\t.align\t8"
403 "\n__Sz_block_profile_info:\n"
404 "\t.zero\t8\n"
405 "\t.size\t__Sz_block_profile_info, 8\n"
406 "Error(62:4): Invalid function record: <24 2 1 0>\n",
337 Munger.getTestResults()); 407 Munger.getTestResults());
338 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align0))); 408 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align0)));
339 EXPECT_EQ( 409 EXPECT_EQ(
340 " store float %p1, float* %p0, align 0;\n" 410 " store float %p1, float* %p0, align 0;\n"
341 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", 411 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n",
342 DumpMunger.getLinesWithSubstring("store")); 412 DumpMunger.getLinesWithSubstring("store"));
343 413
344 // Show what happens when changing alignment to 4. 414 // Show what happens when changing alignment to 4.
345 const uint64_t Align4[] = { 415 const uint64_t Align4[] = {
346 ReplaceIndex, NaClMungedBitcode::Replace, 416 ReplaceIndex, NaClMungedBitcode::Replace,
347 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(2), Terminator, 417 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(2), Terminator,
348 }; 418 };
349 EXPECT_TRUE(Munger.runTest(ARRAY(Align4))); 419 EXPECT_TRUE(Munger.runTest(ARRAY(Align4)));
350 EXPECT_TRUE(DumpMunger.runTestForAssembly(ARRAY(Align4))); 420 EXPECT_TRUE(DumpMunger.runTestForAssembly(ARRAY(Align4)));
351 421
352 // Show what happens when changing alignment to 8. 422 // Show what happens when changing alignment to 8.
353 const uint64_t Align8[] = { 423 const uint64_t Align8[] = {
354 ReplaceIndex, NaClMungedBitcode::Replace, 424 ReplaceIndex, NaClMungedBitcode::Replace,
355 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(3), Terminator, 425 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(3), Terminator,
356 }; 426 };
357 EXPECT_FALSE(Munger.runTest(ARRAY(Align8))); 427 EXPECT_FALSE(Munger.runTest(ARRAY(Align8)));
358 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 4>\n", 428 EXPECT_EQ("\t.type\t__Sz_block_profile_info,@object\n"
429 "\t.section\t.rodata,\"a\",@progbits\n"
430 "\t.globl\t__Sz_block_profile_info\n"
431 "\t.align\t8"
432 "\n__Sz_block_profile_info:\n"
433 "\t.zero\t8\n"
434 "\t.size\t__Sz_block_profile_info, 8\n"
435 "Error(62:4): Invalid function record: <24 2 1 4>\n",
359 Munger.getTestResults()); 436 Munger.getTestResults());
360 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align8))); 437 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align8)));
361 EXPECT_EQ( 438 EXPECT_EQ(
362 " store float %p1, float* %p0, align 8;\n" 439 " store float %p1, float* %p0, align 8;\n"
363 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", 440 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n",
364 DumpMunger.getLinesWithSubstring("store")); 441 DumpMunger.getLinesWithSubstring("store"));
365 442
366 // Show what happens when changing alignment to 2**29. 443 // Show what happens when changing alignment to 2**29.
367 const uint64_t Align29[] = { 444 const uint64_t Align29[] = {
368 ReplaceIndex, NaClMungedBitcode::Replace, 445 ReplaceIndex, NaClMungedBitcode::Replace,
369 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(29), Terminator, 446 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(29), Terminator,
370 }; 447 };
371 EXPECT_FALSE(Munger.runTest(ARRAY(Align29))); 448 EXPECT_FALSE(Munger.runTest(ARRAY(Align29)));
372 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 30>\n", 449 EXPECT_EQ("\t.type\t__Sz_block_profile_info,@object\n"
450 "\t.section\t.rodata,\"a\",@progbits\n"
451 "\t.globl\t__Sz_block_profile_info\n"
452 "\t.align\t8"
453 "\n__Sz_block_profile_info:\n"
454 "\t.zero\t8\n"
455 "\t.size\t__Sz_block_profile_info, 8\n"
456 "Error(62:4): Invalid function record: <24 2 1 30>\n",
373 Munger.getTestResults()); 457 Munger.getTestResults());
374 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align29))); 458 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align29)));
375 EXPECT_EQ( 459 EXPECT_EQ(
376 " store float %p1, float* %p0, align 536870912;\n" 460 " store float %p1, float* %p0, align 536870912;\n"
377 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", 461 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n",
378 DumpMunger.getLinesWithSubstring("store")); 462 DumpMunger.getLinesWithSubstring("store"));
379 463
380 const uint64_t Align30[] = { 464 const uint64_t Align30[] = {
381 ReplaceIndex, NaClMungedBitcode::Replace, 465 ReplaceIndex, NaClMungedBitcode::Replace,
382 // Note: alignment stored as 0 or log2(Alignment)+1. 466 // Note: alignment stored as 0 or log2(Alignment)+1.
383 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(30), Terminator, 467 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(30), Terminator,
384 }; 468 };
385 EXPECT_FALSE(Munger.runTest(ARRAY(Align30))); 469 EXPECT_FALSE(Munger.runTest(ARRAY(Align30)));
386 EXPECT_EQ("Error(62:4): Invalid function record: <24 2 1 31>\n", 470 EXPECT_EQ("\t.type\t__Sz_block_profile_info,@object\n"
471 "\t.section\t.rodata,\"a\",@progbits\n"
472 "\t.globl\t__Sz_block_profile_info\n"
473 "\t.align\t8"
474 "\n__Sz_block_profile_info:\n"
475 "\t.zero\t8\n"
476 "\t.size\t__Sz_block_profile_info, 8\n"
477 "Error(62:4): Invalid function record: <24 2 1 31>\n",
387 Munger.getTestResults()); 478 Munger.getTestResults());
388 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30))); 479 EXPECT_FALSE(DumpMunger.runTestForAssembly(ARRAY(Align30)));
389 EXPECT_EQ( 480 EXPECT_EQ(
390 " store float %p1, float* %p0, align 0;\n" 481 " store float %p1, float* %p0, align 0;\n"
391 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n", 482 "Error(62:4): store: Illegal alignment for float. Expects: 1 or 4\n",
392 DumpMunger.getLinesWithSubstring("store")); 483 DumpMunger.getLinesWithSubstring("store"));
393 } 484 }
394 485
395 } // end of anonymous namespace 486 } // 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