Chromium Code Reviews| Index: unittest/IceParseInstsTest.cpp |
| diff --git a/unittest/IceParseInstsTest.cpp b/unittest/IceParseInstsTest.cpp |
| index 898712a9e763ecd77925d0b26ece124d927798f8..416ed8de6e31126ae50ae4fc534804fdce12027c 100644 |
| --- a/unittest/IceParseInstsTest.cpp |
| +++ b/unittest/IceParseInstsTest.cpp |
| @@ -22,83 +22,115 @@ namespace { |
| static const uint64_t Terminator = 0x5768798008978675LL; |
| // Note: alignment stored as 0 or log2(Alignment)+1. |
| -uint64_t getEncAlignPower(unsigned Power) { |
| - return Power + 1; |
| -} |
| +uint64_t getEncAlignPower(unsigned Power) { return Power + 1; } |
| uint64_t getEncAlignZero() { return 0; } |
| /// Test how we report a call arg that refers to nonexistent call argument |
| TEST(IceParseInstsTest, NonexistentCallArg) { |
| const uint64_t BitcodeRecords[] = { |
| - 1, naclbitc::BLK_CODE_ENTER, naclbitc::MODULE_BLOCK_ID, 2, Terminator, |
| - 1, naclbitc::BLK_CODE_ENTER, naclbitc::TYPE_BLOCK_ID_NEW, 2, Terminator, |
| - 3, naclbitc::TYPE_CODE_NUMENTRY, 3, Terminator, |
| - 3, naclbitc::TYPE_CODE_INTEGER, 32, Terminator, |
| - 3, naclbitc::TYPE_CODE_VOID, Terminator, |
| - 3, naclbitc::TYPE_CODE_FUNCTION, 0, 1, 0, 0, Terminator, |
| - 0, naclbitc::BLK_CODE_EXIT, Terminator, |
| - 3, naclbitc::MODULE_CODE_FUNCTION, 2, 0, 1, 0, Terminator, |
| - 3, naclbitc::MODULE_CODE_FUNCTION, 2, 0, 0, 0, Terminator, |
| - 1, naclbitc::BLK_CODE_ENTER, naclbitc::FUNCTION_BLOCK_ID, 2, Terminator, |
| - 3, naclbitc::FUNC_CODE_DECLAREBLOCKS, 1, Terminator, |
| - // Note: 100 is a bad value index in next line. |
| - 3, naclbitc::FUNC_CODE_INST_CALL, 0, 4, 2, 100, Terminator, |
| - 3, naclbitc::FUNC_CODE_INST_RET, Terminator, |
| - 0, naclbitc::BLK_CODE_EXIT, Terminator, |
| - 0, naclbitc::BLK_CODE_EXIT, Terminator |
| - }; |
| + 1, naclbitc::BLK_CODE_ENTER, |
|
jvoung (off chromium)
2015/01/27 18:08:11
Hmm... these used to be arranged such that each ro
Jim Stichnoth
2015/01/27 19:24:11
Ugh. Reverting the whole file change, and quarant
|
| + naclbitc::MODULE_BLOCK_ID, 2, |
| + Terminator, 1, |
| + naclbitc::BLK_CODE_ENTER, naclbitc::TYPE_BLOCK_ID_NEW, |
| + 2, Terminator, |
| + 3, naclbitc::TYPE_CODE_NUMENTRY, |
| + 3, Terminator, |
| + 3, naclbitc::TYPE_CODE_INTEGER, |
| + 32, Terminator, |
| + 3, naclbitc::TYPE_CODE_VOID, |
| + Terminator, 3, |
| + naclbitc::TYPE_CODE_FUNCTION, 0, |
| + 1, 0, |
| + 0, Terminator, |
| + 0, naclbitc::BLK_CODE_EXIT, |
| + Terminator, 3, |
| + naclbitc::MODULE_CODE_FUNCTION, 2, |
| + 0, 1, |
| + 0, Terminator, |
| + 3, naclbitc::MODULE_CODE_FUNCTION, |
| + 2, 0, |
| + 0, 0, |
| + Terminator, 1, |
| + naclbitc::BLK_CODE_ENTER, naclbitc::FUNCTION_BLOCK_ID, |
| + 2, Terminator, |
| + 3, naclbitc::FUNC_CODE_DECLAREBLOCKS, |
| + 1, Terminator, |
| + // Note: 100 is a bad value index in next line. |
| + 3, naclbitc::FUNC_CODE_INST_CALL, |
| + 0, 4, |
| + 2, 100, |
| + Terminator, 3, |
| + naclbitc::FUNC_CODE_INST_RET, Terminator, |
| + 0, naclbitc::BLK_CODE_EXIT, |
| + Terminator, 0, |
| + naclbitc::BLK_CODE_EXIT, Terminator}; |
| // Show bitcode objdump for BitcodeRecords. |
| - NaClObjDumpMunger DumpMunger(BitcodeRecords, |
| - array_lengthof(BitcodeRecords), Terminator); |
| + NaClObjDumpMunger DumpMunger(BitcodeRecords, array_lengthof(BitcodeRecords), |
| + Terminator); |
| EXPECT_FALSE(DumpMunger.runTestForAssembly("Nonexistent call arg")); |
| - EXPECT_EQ( |
| - "module { // BlockID = 8\n" |
| - " types { // BlockID = 17\n" |
| - " count 3;\n" |
| - " @t0 = i32;\n" |
| - " @t1 = void;\n" |
| - " @t2 = void (i32, i32);\n" |
| - " }\n" |
| - " declare external void @f0(i32, i32);\n" |
| - " define external void @f1(i32, i32);\n" |
| - " function void @f1(i32 %p0, i32 %p1) { // BlockID = 12\n" |
| - " blocks 1;\n" |
| - " %b0:\n" |
| - " call void @f0(i32 %p0, i32 @f0);\n" |
| - "Error(66:4): Invalid relative value id: 100 (Must be <= 4)\n" |
| - " ret void;\n" |
| - " }\n" |
| - "}\n", |
| - DumpMunger.getTestResults()); |
| + EXPECT_EQ("module { // BlockID = 8\n" |
| + " types { // BlockID = 17\n" |
| + " count 3;\n" |
| + " @t0 = i32;\n" |
| + " @t1 = void;\n" |
| + " @t2 = void (i32, i32);\n" |
| + " }\n" |
| + " declare external void @f0(i32, i32);\n" |
| + " define external void @f1(i32, i32);\n" |
| + " function void @f1(i32 %p0, i32 %p1) { // BlockID = 12\n" |
| + " blocks 1;\n" |
| + " %b0:\n" |
| + " call void @f0(i32 %p0, i32 @f0);\n" |
| + "Error(66:4): Invalid relative value id: 100 (Must be <= 4)\n" |
| + " ret void;\n" |
| + " }\n" |
| + "}\n", |
| + DumpMunger.getTestResults()); |
| // Show that we get appropriate error when parsing in Subzero. |
| IceTest::SubzeroBitcodeMunger Munger( |
| BitcodeRecords, array_lengthof(BitcodeRecords), Terminator); |
| EXPECT_FALSE(Munger.runTest("Nonexistent call arg")); |
| - EXPECT_EQ( |
| - "Error: (66:4) Invalid function record: <34 0 4 2 100>\n", |
| - Munger.getTestResults()); |
| + EXPECT_EQ("Error: (66:4) Invalid function record: <34 0 4 2 100>\n", |
| + Munger.getTestResults()); |
| } |
| /// Test how we recognize alignments in alloca instructions. |
| TEST(IceParseInstsTests, AllocaAlignment) { |
| const uint64_t BitcodeRecords[] = { |
| - 1, naclbitc::BLK_CODE_ENTER, naclbitc::MODULE_BLOCK_ID, 2, Terminator, |
| - 1, naclbitc::BLK_CODE_ENTER, naclbitc::TYPE_BLOCK_ID_NEW, 2, Terminator, |
| - 3, naclbitc::TYPE_CODE_NUMENTRY, 4, Terminator, |
| - 3, naclbitc::TYPE_CODE_INTEGER, 32, Terminator, |
| - 3, naclbitc::TYPE_CODE_VOID, Terminator, |
| - 3, naclbitc::TYPE_CODE_FUNCTION, 0, 1, 0, Terminator, |
| - 3, naclbitc::TYPE_CODE_INTEGER, 8, Terminator, |
| - 0, naclbitc::BLK_CODE_EXIT, Terminator, |
| - 3, naclbitc::MODULE_CODE_FUNCTION, 2, 0, 0, 0, Terminator, |
| - 1, naclbitc::BLK_CODE_ENTER, naclbitc::FUNCTION_BLOCK_ID, 2, Terminator, |
| - 3, naclbitc::FUNC_CODE_DECLAREBLOCKS, 1, Terminator, |
| - 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(0), Terminator, |
| - 3, naclbitc::FUNC_CODE_INST_RET, Terminator, |
| - 0, naclbitc::BLK_CODE_EXIT, Terminator, |
| - 0, naclbitc::BLK_CODE_EXIT, Terminator}; |
| + 1, naclbitc::BLK_CODE_ENTER, |
| + naclbitc::MODULE_BLOCK_ID, 2, |
| + Terminator, 1, |
| + naclbitc::BLK_CODE_ENTER, naclbitc::TYPE_BLOCK_ID_NEW, |
| + 2, Terminator, |
| + 3, naclbitc::TYPE_CODE_NUMENTRY, |
| + 4, Terminator, |
| + 3, naclbitc::TYPE_CODE_INTEGER, |
| + 32, Terminator, |
| + 3, naclbitc::TYPE_CODE_VOID, |
| + Terminator, 3, |
| + naclbitc::TYPE_CODE_FUNCTION, 0, |
| + 1, 0, |
| + Terminator, 3, |
| + naclbitc::TYPE_CODE_INTEGER, 8, |
| + Terminator, 0, |
| + naclbitc::BLK_CODE_EXIT, Terminator, |
| + 3, naclbitc::MODULE_CODE_FUNCTION, |
| + 2, 0, |
| + 0, 0, |
| + Terminator, 1, |
| + naclbitc::BLK_CODE_ENTER, naclbitc::FUNCTION_BLOCK_ID, |
| + 2, Terminator, |
| + 3, naclbitc::FUNC_CODE_DECLAREBLOCKS, |
| + 1, Terminator, |
| + 3, naclbitc::FUNC_CODE_INST_ALLOCA, |
| + 1, getEncAlignPower(0), |
| + Terminator, 3, |
| + naclbitc::FUNC_CODE_INST_RET, Terminator, |
| + 0, naclbitc::BLK_CODE_EXIT, |
| + Terminator, 0, |
| + naclbitc::BLK_CODE_EXIT, Terminator}; |
| const uint64_t ReplaceIndex = 11; // index for FUNC_CODE_INST_ALLOCA |
| @@ -132,7 +164,9 @@ TEST(IceParseInstsTests, AllocaAlignment) { |
| // Show what happens when changing alignment to 0. |
| const uint64_t Align0[] = { |
| ReplaceIndex, NaClBitcodeMunger::Replace, |
| - 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignZero(), Terminator, |
| + 3, naclbitc::FUNC_CODE_INST_ALLOCA, |
| + 1, getEncAlignZero(), |
| + Terminator, |
| }; |
| EXPECT_TRUE(Munger.runTest("Good alloca alignment 0", Align0, |
| array_lengthof(Align0))); |
| @@ -144,7 +178,9 @@ TEST(IceParseInstsTests, AllocaAlignment) { |
| // Show what happens when changing alignment to 2**30. |
| const uint64_t Align30[] = { |
| ReplaceIndex, NaClBitcodeMunger::Replace, |
| - 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(30), Terminator, |
| + 3, naclbitc::FUNC_CODE_INST_ALLOCA, |
| + 1, getEncAlignPower(30), |
| + Terminator, |
| }; |
| EXPECT_FALSE(Munger.runTest("Bad alloca alignment 30", Align30, |
| array_lengthof(Align30))); |
| @@ -162,7 +198,9 @@ TEST(IceParseInstsTests, AllocaAlignment) { |
| // Show what happens when changing alignment to 2**29. |
| const uint64_t Align29[] = { |
| ReplaceIndex, NaClBitcodeMunger::Replace, |
| - 3, naclbitc::FUNC_CODE_INST_ALLOCA, 1, getEncAlignPower(29), Terminator, |
| + 3, naclbitc::FUNC_CODE_INST_ALLOCA, |
| + 1, getEncAlignPower(29), |
| + Terminator, |
| }; |
| EXPECT_TRUE(Munger.runTest("Good alloca alignment 29", Align29, |
| array_lengthof(Align29))); |
| @@ -175,19 +213,36 @@ TEST(IceParseInstsTests, AllocaAlignment) { |
| // Test how we recognize alignments in load i32 instructions. |
| TEST(IceParseInstsTests, LoadI32Alignment) { |
| const uint64_t BitcodeRecords[] = { |
| - 1, naclbitc::BLK_CODE_ENTER, naclbitc::MODULE_BLOCK_ID, 2, Terminator, |
| - 1, naclbitc::BLK_CODE_ENTER, naclbitc::TYPE_BLOCK_ID_NEW, 2, Terminator, |
| - 3, naclbitc::TYPE_CODE_NUMENTRY, 2, Terminator, |
| - 3, naclbitc::TYPE_CODE_INTEGER, 32, Terminator, |
| - 3, naclbitc::TYPE_CODE_FUNCTION, 0, 0, 0, Terminator, |
| - 0, naclbitc::BLK_CODE_EXIT, Terminator, |
| - 3, naclbitc::MODULE_CODE_FUNCTION, 1, 0, 0, 0, Terminator, |
| - 1, naclbitc::BLK_CODE_ENTER, naclbitc::FUNCTION_BLOCK_ID, 2, Terminator, |
| - 3, naclbitc::FUNC_CODE_DECLAREBLOCKS, 1, Terminator, |
| - 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(0), 0, Terminator, |
| - 3, naclbitc::FUNC_CODE_INST_RET, 1, Terminator, |
| - 0, naclbitc::BLK_CODE_EXIT, Terminator, |
| - 0, naclbitc::BLK_CODE_EXIT, Terminator}; |
| + 1, naclbitc::BLK_CODE_ENTER, |
| + naclbitc::MODULE_BLOCK_ID, 2, |
| + Terminator, 1, |
| + naclbitc::BLK_CODE_ENTER, naclbitc::TYPE_BLOCK_ID_NEW, |
| + 2, Terminator, |
| + 3, naclbitc::TYPE_CODE_NUMENTRY, |
| + 2, Terminator, |
| + 3, naclbitc::TYPE_CODE_INTEGER, |
| + 32, Terminator, |
| + 3, naclbitc::TYPE_CODE_FUNCTION, |
| + 0, 0, |
| + 0, Terminator, |
| + 0, naclbitc::BLK_CODE_EXIT, |
| + Terminator, 3, |
| + naclbitc::MODULE_CODE_FUNCTION, 1, |
| + 0, 0, |
| + 0, Terminator, |
| + 1, naclbitc::BLK_CODE_ENTER, |
| + naclbitc::FUNCTION_BLOCK_ID, 2, |
| + Terminator, 3, |
| + naclbitc::FUNC_CODE_DECLAREBLOCKS, 1, |
| + Terminator, 3, |
| + naclbitc::FUNC_CODE_INST_LOAD, 1, |
| + getEncAlignPower(0), 0, |
| + Terminator, 3, |
| + naclbitc::FUNC_CODE_INST_RET, 1, |
| + Terminator, 0, |
| + naclbitc::BLK_CODE_EXIT, Terminator, |
| + 0, naclbitc::BLK_CODE_EXIT, |
| + Terminator}; |
| const uint64_t ReplaceIndex = 9; // index for FUNC_CODE_INST_LOAD |
| @@ -217,7 +272,9 @@ TEST(IceParseInstsTests, LoadI32Alignment) { |
| // Show what happens when changing alignment to 0. |
| const uint64_t Align0[] = { |
| ReplaceIndex, NaClBitcodeMunger::Replace, |
| - 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignZero(), 0, Terminator, |
| + 3, naclbitc::FUNC_CODE_INST_LOAD, |
| + 1, getEncAlignZero(), |
| + 0, Terminator, |
| }; |
| EXPECT_FALSE(Munger.runTest("Bad load i32 alignment 0", Align0, |
| array_lengthof(Align0))); |
| @@ -232,7 +289,9 @@ TEST(IceParseInstsTests, LoadI32Alignment) { |
| // Show what happens when changing alignment to 4. |
| const uint64_t Align4[] = { |
| ReplaceIndex, NaClBitcodeMunger::Replace, |
| - 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(2), 0, Terminator, |
| + 3, naclbitc::FUNC_CODE_INST_LOAD, |
| + 1, getEncAlignPower(2), |
| + 0, Terminator, |
| }; |
| EXPECT_FALSE(Munger.runTest("Bad load i32 alignment 4", Align4, |
| array_lengthof(Align4))); |
| @@ -247,7 +306,9 @@ TEST(IceParseInstsTests, LoadI32Alignment) { |
| // Show what happens when changing alignment to 2**29. |
| const uint64_t Align29[] = { |
| ReplaceIndex, NaClBitcodeMunger::Replace, |
| - 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(29), 0, Terminator, |
| + 3, naclbitc::FUNC_CODE_INST_LOAD, |
| + 1, getEncAlignPower(29), |
| + 0, Terminator, |
| }; |
| EXPECT_FALSE(Munger.runTest("Bad load i32 alignment 29", Align29, |
| array_lengthof(Align29))); |
| @@ -262,7 +323,9 @@ TEST(IceParseInstsTests, LoadI32Alignment) { |
| // Show what happens when changing alignment to 2**30. |
| const uint64_t Align30[] = { |
| ReplaceIndex, NaClBitcodeMunger::Replace, |
| - 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator, |
| + 3, naclbitc::FUNC_CODE_INST_LOAD, |
| + 1, getEncAlignPower(30), |
| + 0, Terminator, |
| }; |
| EXPECT_FALSE(Munger.runTest("Bad load i32 alignment 30", Align30, |
| array_lengthof(Align30))); |
| @@ -278,20 +341,37 @@ TEST(IceParseInstsTests, LoadI32Alignment) { |
| // Test how we recognize alignments in load float instructions. |
| TEST(IceParseInstsTests, LoadFloatAlignment) { |
| const uint64_t BitcodeRecords[] = { |
| - 1, naclbitc::BLK_CODE_ENTER, naclbitc::MODULE_BLOCK_ID, 2, Terminator, |
| - 1, naclbitc::BLK_CODE_ENTER, naclbitc::TYPE_BLOCK_ID_NEW, 2, Terminator, |
| - 3, naclbitc::TYPE_CODE_NUMENTRY, 3, Terminator, |
| - 3, naclbitc::TYPE_CODE_FLOAT, Terminator, |
| - 3, naclbitc::TYPE_CODE_INTEGER, 32, Terminator, |
| - 3, naclbitc::TYPE_CODE_FUNCTION, 0, 0, 1, Terminator, |
| - 0, naclbitc::BLK_CODE_EXIT, Terminator, |
| - 3, naclbitc::MODULE_CODE_FUNCTION, 2, 0, 0, 0, Terminator, |
| - 1, naclbitc::BLK_CODE_ENTER, naclbitc::FUNCTION_BLOCK_ID, 2, Terminator, |
| - 3, naclbitc::FUNC_CODE_DECLAREBLOCKS, 1, Terminator, |
| - 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(0), 0, Terminator, |
| - 3, naclbitc::FUNC_CODE_INST_RET, 1, Terminator, |
| - 0, naclbitc::BLK_CODE_EXIT, Terminator, |
| - 0, naclbitc::BLK_CODE_EXIT, Terminator}; |
| + 1, naclbitc::BLK_CODE_ENTER, |
| + naclbitc::MODULE_BLOCK_ID, 2, |
| + Terminator, 1, |
| + naclbitc::BLK_CODE_ENTER, naclbitc::TYPE_BLOCK_ID_NEW, |
| + 2, Terminator, |
| + 3, naclbitc::TYPE_CODE_NUMENTRY, |
| + 3, Terminator, |
| + 3, naclbitc::TYPE_CODE_FLOAT, |
| + Terminator, 3, |
| + naclbitc::TYPE_CODE_INTEGER, 32, |
| + Terminator, 3, |
| + naclbitc::TYPE_CODE_FUNCTION, 0, |
| + 0, 1, |
| + Terminator, 0, |
| + naclbitc::BLK_CODE_EXIT, Terminator, |
| + 3, naclbitc::MODULE_CODE_FUNCTION, |
| + 2, 0, |
| + 0, 0, |
| + Terminator, 1, |
| + naclbitc::BLK_CODE_ENTER, naclbitc::FUNCTION_BLOCK_ID, |
| + 2, Terminator, |
| + 3, naclbitc::FUNC_CODE_DECLAREBLOCKS, |
| + 1, Terminator, |
| + 3, naclbitc::FUNC_CODE_INST_LOAD, |
| + 1, getEncAlignPower(0), |
| + 0, Terminator, |
| + 3, naclbitc::FUNC_CODE_INST_RET, |
| + 1, Terminator, |
| + 0, naclbitc::BLK_CODE_EXIT, |
| + Terminator, 0, |
| + naclbitc::BLK_CODE_EXIT, Terminator}; |
| const uint64_t ReplaceIndex = 10; // index for FUNC_CODE_INST_LOAD |
| @@ -322,7 +402,9 @@ TEST(IceParseInstsTests, LoadFloatAlignment) { |
| // Show what happens when changing alignment to 0. |
| const uint64_t Align0[] = { |
| ReplaceIndex, NaClBitcodeMunger::Replace, |
| - 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignZero(), 0, Terminator, |
| + 3, naclbitc::FUNC_CODE_INST_LOAD, |
| + 1, getEncAlignZero(), |
| + 0, Terminator, |
| }; |
| EXPECT_FALSE(Munger.runTest("Bad load float alignment 0", Align0, |
| array_lengthof(Align0))); |
| @@ -330,15 +412,16 @@ TEST(IceParseInstsTests, LoadFloatAlignment) { |
| Munger.getTestResults()); |
| EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad load float alignment 0", |
| Align0, array_lengthof(Align0))); |
| - EXPECT_EQ( |
| - " %v0 = load float* %p0, align 0;\n" |
| - "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n", |
| - DumpMunger.getLinesWithSubstring("load")); |
| + EXPECT_EQ(" %v0 = load float* %p0, align 0;\n" |
| + "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n", |
| + DumpMunger.getLinesWithSubstring("load")); |
| // Show what happens when changing alignment to 4. |
| const uint64_t Align4[] = { |
| ReplaceIndex, NaClBitcodeMunger::Replace, |
| - 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(2), 0, Terminator, |
| + 3, naclbitc::FUNC_CODE_INST_LOAD, |
| + 1, getEncAlignPower(2), |
| + 0, Terminator, |
| }; |
| EXPECT_TRUE(Munger.runTest("Good load float alignment 4", Align4, |
| array_lengthof(Align4))); |
| @@ -349,7 +432,9 @@ TEST(IceParseInstsTests, LoadFloatAlignment) { |
| const uint64_t Align29[] = { |
| ReplaceIndex, NaClBitcodeMunger::Replace, |
| - 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(29), 0, Terminator, |
| + 3, naclbitc::FUNC_CODE_INST_LOAD, |
| + 1, getEncAlignPower(29), |
| + 0, Terminator, |
| }; |
| EXPECT_FALSE(Munger.runTest("Bad load float alignment 29", Align29, |
| array_lengthof(Align29))); |
| @@ -357,15 +442,16 @@ TEST(IceParseInstsTests, LoadFloatAlignment) { |
| Munger.getTestResults()); |
| EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad load float alignment 29", |
| Align29, array_lengthof(Align29))); |
| - EXPECT_EQ( |
| - " %v0 = load float* %p0, align 536870912;\n" |
| - "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n", |
| - DumpMunger.getLinesWithSubstring("load")); |
| + EXPECT_EQ(" %v0 = load float* %p0, align 536870912;\n" |
| + "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n", |
| + DumpMunger.getLinesWithSubstring("load")); |
| // Show what happens when changing alignment to 2**30. |
| const uint64_t Align30[] = { |
| ReplaceIndex, NaClBitcodeMunger::Replace, |
| - 3, naclbitc::FUNC_CODE_INST_LOAD, 1, getEncAlignPower(30), 0, Terminator, |
| + 3, naclbitc::FUNC_CODE_INST_LOAD, |
| + 1, getEncAlignPower(30), |
| + 0, Terminator, |
| }; |
| EXPECT_FALSE(Munger.runTest("Bad load float alignment 30", Align30, |
| array_lengthof(Align30))); |
| @@ -373,29 +459,46 @@ TEST(IceParseInstsTests, LoadFloatAlignment) { |
| Munger.getTestResults()); |
| EXPECT_FALSE(DumpMunger.runTestForAssembly("Bad load float alignment 30", |
| Align30, array_lengthof(Align30))); |
| - EXPECT_EQ( |
| - " %v0 = load float* %p0, align 0;\n" |
| - "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n", |
| - DumpMunger.getLinesWithSubstring("load")); |
| + EXPECT_EQ(" %v0 = load float* %p0, align 0;\n" |
| + "Error(58:4): load: Illegal alignment for float. Expects: 1 or 4\n", |
| + DumpMunger.getLinesWithSubstring("load")); |
| } |
| // Test how we recognize alignments in store instructions. |
| TEST(NaClParseInstsTests, StoreAlignment) { |
| const uint64_t BitcodeRecords[] = { |
| - 1, naclbitc::BLK_CODE_ENTER, naclbitc::MODULE_BLOCK_ID, 2, Terminator, |
| - 1, naclbitc::BLK_CODE_ENTER, naclbitc::TYPE_BLOCK_ID_NEW, 2, Terminator, |
| - 3, naclbitc::TYPE_CODE_NUMENTRY, 3, Terminator, |
| - 3, naclbitc::TYPE_CODE_FLOAT, Terminator, |
| - 3, naclbitc::TYPE_CODE_INTEGER, 32, Terminator, |
| - 3, naclbitc::TYPE_CODE_FUNCTION, 0, 0, 1, 0, Terminator, |
| - 0, naclbitc::BLK_CODE_EXIT, Terminator, |
| - 3, naclbitc::MODULE_CODE_FUNCTION, 2, 0, 0, 0, Terminator, |
| - 1, naclbitc::BLK_CODE_ENTER, naclbitc::FUNCTION_BLOCK_ID, 2, Terminator, |
| - 3, naclbitc::FUNC_CODE_DECLAREBLOCKS, 1, Terminator, |
| - 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(0), Terminator, |
| - 3, naclbitc::FUNC_CODE_INST_RET, 1, Terminator, |
| - 0, naclbitc::BLK_CODE_EXIT, Terminator, |
| - 0, naclbitc::BLK_CODE_EXIT, Terminator}; |
| + 1, naclbitc::BLK_CODE_ENTER, |
| + naclbitc::MODULE_BLOCK_ID, 2, |
| + Terminator, 1, |
| + naclbitc::BLK_CODE_ENTER, naclbitc::TYPE_BLOCK_ID_NEW, |
| + 2, Terminator, |
| + 3, naclbitc::TYPE_CODE_NUMENTRY, |
| + 3, Terminator, |
| + 3, naclbitc::TYPE_CODE_FLOAT, |
| + Terminator, 3, |
| + naclbitc::TYPE_CODE_INTEGER, 32, |
| + Terminator, 3, |
| + naclbitc::TYPE_CODE_FUNCTION, 0, |
| + 0, 1, |
| + 0, Terminator, |
| + 0, naclbitc::BLK_CODE_EXIT, |
| + Terminator, 3, |
| + naclbitc::MODULE_CODE_FUNCTION, 2, |
| + 0, 0, |
| + 0, Terminator, |
| + 1, naclbitc::BLK_CODE_ENTER, |
| + naclbitc::FUNCTION_BLOCK_ID, 2, |
| + Terminator, 3, |
| + naclbitc::FUNC_CODE_DECLAREBLOCKS, 1, |
| + Terminator, 3, |
| + naclbitc::FUNC_CODE_INST_STORE, 2, |
| + 1, getEncAlignPower(0), |
| + Terminator, 3, |
| + naclbitc::FUNC_CODE_INST_RET, 1, |
| + Terminator, 0, |
| + naclbitc::BLK_CODE_EXIT, Terminator, |
| + 0, naclbitc::BLK_CODE_EXIT, |
| + Terminator}; |
| const uint64_t ReplaceIndex = 10; // index for FUNC_CODE_INST_STORE |
| @@ -425,8 +528,9 @@ TEST(NaClParseInstsTests, StoreAlignment) { |
| // Show what happens when changing alignment to 0. |
| const uint64_t Align0[] = { |
| - ReplaceIndex, NaClBitcodeMunger::Replace, |
| - 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignZero(), Terminator, |
| + ReplaceIndex, NaClBitcodeMunger::Replace, 3, |
| + naclbitc::FUNC_CODE_INST_STORE, 2, 1, |
| + getEncAlignZero(), Terminator, |
| }; |
| EXPECT_FALSE( |
| Munger.runTest("Bad store alignment 0", Align0, array_lengthof(Align0))); |
| @@ -441,8 +545,9 @@ TEST(NaClParseInstsTests, StoreAlignment) { |
| // Show what happens when changing alignment to 4. |
| const uint64_t Align4[] = { |
| - ReplaceIndex, NaClBitcodeMunger::Replace, |
| - 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(2), Terminator, |
| + ReplaceIndex, NaClBitcodeMunger::Replace, 3, |
| + naclbitc::FUNC_CODE_INST_STORE, 2, 1, |
| + getEncAlignPower(2), Terminator, |
| }; |
| EXPECT_TRUE( |
| Munger.runTest("Bad store alignment 4", Align4, array_lengthof(Align4))); |
| @@ -451,8 +556,9 @@ TEST(NaClParseInstsTests, StoreAlignment) { |
| // Show what happens when changing alignment to 8. |
| const uint64_t Align8[] = { |
| - ReplaceIndex, NaClBitcodeMunger::Replace, |
| - 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(3), Terminator, |
| + ReplaceIndex, NaClBitcodeMunger::Replace, 3, |
| + naclbitc::FUNC_CODE_INST_STORE, 2, 1, |
| + getEncAlignPower(3), Terminator, |
| }; |
| EXPECT_FALSE( |
| Munger.runTest("Bad store alignment 8", Align8, array_lengthof(Align8))); |
| @@ -467,8 +573,9 @@ TEST(NaClParseInstsTests, StoreAlignment) { |
| // Show what happens when changing alignment to 2**29. |
| const uint64_t Align29[] = { |
| - ReplaceIndex, NaClBitcodeMunger::Replace, |
| - 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(29), Terminator, |
| + ReplaceIndex, NaClBitcodeMunger::Replace, 3, |
| + naclbitc::FUNC_CODE_INST_STORE, 2, 1, |
| + getEncAlignPower(29), Terminator, |
| }; |
| EXPECT_FALSE(Munger.runTest("Bad store alignment 29", Align29, |
| array_lengthof(Align29))); |
| @@ -484,7 +591,8 @@ TEST(NaClParseInstsTests, StoreAlignment) { |
| const uint64_t Align30[] = { |
| ReplaceIndex, NaClBitcodeMunger::Replace, |
| // Note: alignment stored as 0 or log2(Alignment)+1. |
| - 3, naclbitc::FUNC_CODE_INST_STORE, 2, 1, getEncAlignPower(30), Terminator, |
| + 3, naclbitc::FUNC_CODE_INST_STORE, 2, |
| + 1, getEncAlignPower(30), Terminator, |
| }; |
| EXPECT_FALSE(Munger.runTest("Bad store alignment 30", Align30, |
| array_lengthof(Align30))); |