Skip to content

Commit

Permalink
Add the option to turn off inverted branch condition checking
Browse files Browse the repository at this point in the history
  • Loading branch information
zacikpa committed Jul 21, 2023
1 parent bee54b7 commit 4e30de2
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 6 deletions.
3 changes: 2 additions & 1 deletion diffkemp/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,8 @@ def make_argument_parser():
"numerical-macros",
"relocations",
"type-casts",
"control-flow-only",]
"control-flow-only",
"inverse-conditions"]

# Semantic patterns options.
compare_ap.add_argument("--enable-pattern",
Expand Down
8 changes: 8 additions & 0 deletions diffkemp/simpll/Config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,10 @@ BuiltinPatterns parseBuiltinPatternArgs(const builtin_pattern_args &Args) {
Patterns.KernelPrints = true;
Patterns.DeadCode = true;
Patterns.NumericalMacros = true;
Patterns.Relocations = true;
Patterns.TypeCasts = true;
Patterns.ControlFlowOnly = true;
Patterns.InverseConditions = true;
}
if (Args.DisableAll) {
Patterns.StructAlignment = false;
Expand All @@ -110,8 +112,10 @@ BuiltinPatterns parseBuiltinPatternArgs(const builtin_pattern_args &Args) {
Patterns.KernelPrints = false;
Patterns.DeadCode = false;
Patterns.NumericalMacros = false;
Patterns.Relocations = true;
Patterns.TypeCasts = false;
Patterns.ControlFlowOnly = false;
Patterns.InverseConditions = false;
}
if (Args.EnableStructAlignment)
Patterns.StructAlignment = true;
Expand Down Expand Up @@ -152,6 +156,10 @@ BuiltinPatterns parseBuiltinPatternArgs(const builtin_pattern_args &Args) {
}
if (Args.DisableControlFlowOnly)
Patterns.ControlFlowOnly = false;
if (Args.EnableInverseConditions)
Patterns.InverseConditions = true;
if (Args.DisableInverseConditions)
Patterns.InverseConditions = false;

return Patterns;
}
5 changes: 4 additions & 1 deletion diffkemp/simpll/Config.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ struct BuiltinPatterns {
bool Relocations;
bool TypeCasts;
bool ControlFlowOnly;
bool InverseConditions;
};

const BuiltinPatterns DEFAULT_BUILTIN_PATTERNS = {
Expand All @@ -61,7 +62,9 @@ const BuiltinPatterns DEFAULT_BUILTIN_PATTERNS = {
// Changes in type casts
.TypeCasts = false,
// Ignore all changes except those in control-flow
.ControlFlowOnly = false};
.ControlFlowOnly = false,
// Inverted branch conditions
.InverseConditions = true};

BuiltinPatterns parseBuiltinPatternArgs(const builtin_pattern_args &args);

Expand Down
3 changes: 2 additions & 1 deletion diffkemp/simpll/DifferentialFunctionComparator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,8 @@ int DifferentialFunctionComparator::cmpOperations(
#endif
}
// Record inverse conditions
if (isa<CmpInst>(L) && isa<CmpInst>(R)) {
if (config.BuiltinPatterns.InverseConditions && isa<CmpInst>(L)
&& isa<CmpInst>(R)) {
auto CmpL = dyn_cast<CmpInst>(L);
auto CmpR = dyn_cast<CmpInst>(R);

Expand Down
15 changes: 12 additions & 3 deletions diffkemp/simpll/SimpLL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,11 +131,11 @@ cl::opt<bool> DisablePatternNumericalMacros(
" macro as semantically different"));
cl::opt<bool> EnablePatternRelocations(
"enable-pattern-relocations",
cl::desc("Treat suitable differences caused by instruction relocation"
cl::desc("Treat suitable differences caused by instruction relocation "
"as semantically equal"));
cl::opt<bool> DisablePatternRelocations(
"disable-pattern-relocations",
cl::desc("Treat suitable differences caused by instruction relocation"
cl::desc("Treat suitable differences caused by instruction relocation "
"as semantically different"));
cl::opt<bool> EnablePatternTypeCasts(
"enable-pattern-type-casts",
Expand All @@ -151,6 +151,14 @@ cl::opt<bool> DisablePatternControlFlowOnly(
"disable-pattern-control-flow-only",
cl::desc("Treat differences not caused by control flow related "
"operations as semantically different"));
cl::opt<bool> EnablePatternInverseConditions(
"enable-pattern-inverse-conditions",
cl::desc("Treat suitable differences caused by inverted "
"branch conditions as semantically equal"));
cl::opt<bool> DisablePatterInverseConditions(
"disable-pattern-inverse conditions",
cl::desc("Treat suitable differences caused by inverted "
"branch conditions as semantically different"));

/// Add suffix to the file name.
/// \param File Original file name.
Expand Down Expand Up @@ -209,7 +217,8 @@ int main(int argc, const char **argv) {
.DisableTypeCasts = DisablePatternTypeCasts,
.EnableControlFlowOnly = EnablePatternControlFlowOnly,
.DisableControlFlowOnly = DisablePatternControlFlowOnly,
};
.EnableInverseConditions = EnablePatternInverseConditions,
.DisableInverseConditions = DisablePatterInverseConditions};

// Parse --fun option
auto FunName = parseFunOption();
Expand Down
2 changes: 2 additions & 0 deletions diffkemp/simpll/library/FFI.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ struct builtin_pattern_args {
int DisableTypeCasts;
int EnableControlFlowOnly;
int DisableControlFlowOnly;
int EnableInverseConditions;
int DisableInverseConditions;
};

struct config {
Expand Down
8 changes: 8 additions & 0 deletions diffkemp/simpll/simpll.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ def run_simpll(first, second, fun_first, fun_second, var, config, suffix=None,
"numerical-macros" in config.enabled_patterns
builtin_pattern_args.DisableNumericalMacros = \
"numerical-macros" in config.disabled_patterns
builtin_pattern_args.EnableRelocations = \
"relocations" in config.enabled_patterns
builtin_pattern_args.DisableRelocations = \
"relocations" in config.disabled_patterns
builtin_pattern_args.EnableTypeCasts = \
"type-casts" in config.enabled_patterns
builtin_pattern_args.DisableTypeCasts = \
Expand All @@ -74,6 +78,10 @@ def run_simpll(first, second, fun_first, fun_second, var, config, suffix=None,
"control-flow-only" in config.enabled_patterns
builtin_pattern_args.DisableControlFlowOnly = \
"control-flow-only" in config.disabled_patterns
builtin_pattern_args.EnableInverseConditions = \
"inverse-conditions" in config.enabled_patterns
builtin_pattern_args.DisableInverseConditions = \
"inverse-conditions" in config.disabled_patterns

# Preload module if in modules_to_cache
if modules_to_cache is None:
Expand Down

0 comments on commit 4e30de2

Please sign in to comment.