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