OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |