From 456faeef871d55d77935e4797bca4e04f247cf1c Mon Sep 17 00:00:00 2001 From: clc5q <clc5q@git.zephyr-software.com> Date: Sun, 31 Mar 2013 23:40:53 +0000 Subject: [PATCH] Enable aggressive signedness propagation, stage 1. --- SMPFunction.cpp | 2 +- SMPInstr.cpp | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/SMPFunction.cpp b/SMPFunction.cpp index d876acd4..699b4d88 100644 --- a/SMPFunction.cpp +++ b/SMPFunction.cpp @@ -89,7 +89,7 @@ using namespace std; #define SMP_DECLARE_INDIRECT_TARGETS_UNSAFE 1 #define SMP_AUDIT_STACK_POINTER_DELTAS 0 #define SMP_COMPARE_IDA_STARS_STACK_POINTER_DELTAS 1 -#define STARS_AGGRESSIVE_SIGNEDNESS_PROPAGATION 0 +#define STARS_AGGRESSIVE_SIGNEDNESS_PROPAGATION 1 // Compute LVA/SSA or not? Turn it off for NICECAP demo on 31-JAN-2008 #define SMP_COMPUTE_LVA_SSA 1 diff --git a/SMPInstr.cpp b/SMPInstr.cpp index c3b905f0..60197861 100644 --- a/SMPInstr.cpp +++ b/SMPInstr.cpp @@ -5370,6 +5370,13 @@ bool SMPInstr::UpdateDefOpFGInfo(op_t DefOp, struct FineGrainedInfo NewFG) { // Get old FG info from function level. OldFG = this->BasicBlock->GetFunc()->GetDefFGInfo(DefHashValue); } + + // Get rid of stack access bits being passed around in InferOperatorFGInfo() + // for register operands in RTLs. + if (o_reg == DefOp.type) { + NewFG.SignMiscInfo &= FG_MASK_SIGNEDNESS_BITS; + } + UnionFG.SignMiscInfo = OldFG.SignMiscInfo | NewFG.SignMiscInfo; UnionFG.SizeInfo = OldFG.SizeInfo | NewFG.SizeInfo; if ((OldFG.SignMiscInfo != UnionFG.SignMiscInfo) || (OldFG.SizeInfo != UnionFG.SizeInfo)) { @@ -5403,6 +5410,13 @@ bool SMPInstr::UpdateUseOpFGInfo(op_t UseOp, struct FineGrainedInfo NewFG) { // Get old FG info from function level. OldFG = this->BasicBlock->GetFunc()->GetUseFGInfo(UseHashValue); } + + // Get rid of stack access bits being passed around in InferOperatorFGInfo() + // for register operands in RTLs. + if (o_reg == UseOp.type) { + NewFG.SignMiscInfo &= FG_MASK_SIGNEDNESS_BITS; + } + UnionFG.SignMiscInfo = OldFG.SignMiscInfo | NewFG.SignMiscInfo; UnionFG.SizeInfo = OldFG.SizeInfo | NewFG.SizeInfo; if ((OldFG.SignMiscInfo != UnionFG.SignMiscInfo) || (OldFG.SizeInfo != UnionFG.SizeInfo)) { -- GitLab