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))); |