Index: src/IceClFlags.cpp |
diff --git a/src/IceClFlags.cpp b/src/IceClFlags.cpp |
index cbacd8bfad540facb3dfb4b97631960a84c1a915..272d36ce575923d8d00ce4ddc9d3bc695d45c86f 100644 |
--- a/src/IceClFlags.cpp |
+++ b/src/IceClFlags.cpp |
@@ -288,6 +288,12 @@ cl::opt<uint32_t> RandomizeAndPoolImmediatesThreshold( |
cl::desc("The threshold for immediates randomization and pooling"), |
cl::init(0xffff)); |
+// Command line option for turning on basic block shuffling. |
+cl::opt<bool> ReorderBasicBlocks( |
+ "reorder-basic-blocks", |
+ cl::desc("Shuffle the layout of basic blocks in each functions"), |
+ cl::init(false)); |
+ |
// Command line option for turning on function layout reordering. |
cl::opt<bool> ReorderFunctions( |
"reorder-functions", |
@@ -345,6 +351,7 @@ void ClFlags::resetClFlags(ClFlags &OutFlags) { |
OutFlags.PhiEdgeSplit = false; |
OutFlags.RandomNopInsertion = false; |
OutFlags.RandomRegAlloc = false; |
+ OutFlags.ReorderBasicBlocks = false; |
OutFlags.ReorderFunctions = false; |
OutFlags.ReorderGlobalVariables = false; |
OutFlags.ReorderPooledConstants = false; |
@@ -403,8 +410,17 @@ void ClFlags::getParsedClFlags(ClFlags &OutFlags) { |
OutFlags.setOptLevel(::OLevel); |
OutFlags.setPhiEdgeSplit(::EnablePhiEdgeSplit); |
OutFlags.setRandomSeed(::RandomSeed); |
+ OutFlags.setRandomizeAndPoolImmediatesOption( |
+ ::RandomizeAndPoolImmediatesOption); |
+ OutFlags.setRandomizeAndPoolImmediatesThreshold( |
+ ::RandomizeAndPoolImmediatesThreshold); |
+ OutFlags.setReorderFunctionsWindowSize(::ReorderFunctionsWindowSize); |
+ OutFlags.setShouldReorderBasicBlocks(::ReorderBasicBlocks); |
OutFlags.setShouldDoNopInsertion(::ShouldDoNopInsertion); |
OutFlags.setShouldRandomizeRegAlloc(::RandomizeRegisterAllocation); |
+ OutFlags.setShouldReorderFunctions(::ReorderFunctions); |
+ OutFlags.setShouldReorderGlobalVariables(::ReorderGlobalVariables); |
+ OutFlags.setShouldReorderPooledConstants(::ReorderPooledConstants); |
OutFlags.setSkipUnimplemented(::SkipUnimplemented); |
OutFlags.setSubzeroTimingEnabled(::SubzeroTimingEnabled); |
OutFlags.setTargetArch(::TargetArch); |
@@ -420,22 +436,6 @@ void ClFlags::getParsedClFlags(ClFlags &OutFlags) { |
OutFlags.setMaxNopsPerInstruction(::MaxNopsPerInstruction); |
OutFlags.setNopProbabilityAsPercentage(::NopProbabilityAsPercentage); |
OutFlags.setVerbose(VMask); |
- |
- // Set for immediates randomization or pooling option. |
- OutFlags.setRandomizeAndPoolImmediatesOption( |
- ::RandomizeAndPoolImmediatesOption); |
- OutFlags.setRandomizeAndPoolImmediatesThreshold( |
- ::RandomizeAndPoolImmediatesThreshold); |
- |
- // Set for function reordering options. |
- OutFlags.setShouldReorderFunctions(::ReorderFunctions); |
- OutFlags.setReorderFunctionsWindowSize(::ReorderFunctionsWindowSize); |
- |
- // Set for global variable reordering option. |
- OutFlags.setShouldReorderGlobalVariables(::ReorderGlobalVariables); |
- |
- // Set for pooled constant reordering option. |
- OutFlags.setShouldReorderPooledConstants(::ReorderPooledConstants); |
} |
void ClFlags::getParsedClFlagsExtra(ClFlagsExtra &OutFlagsExtra) { |