@@ -60,11 +60,13 @@ struct Properties {
6060 if (auto * outer = curr->dynCast <Binary>()) {
6161 if (outer->op == ShrSInt32) {
6262 if (auto * outerConst = outer->right ->dynCast <Const>()) {
63- if (auto * inner = outer->left ->dynCast <Binary>()) {
64- if (inner->op == ShlInt32) {
65- if (auto * innerConst = inner->right ->dynCast <Const>()) {
66- if (outerConst->value == innerConst->value ) {
67- return inner->left ;
63+ if (outerConst->value .geti32 () != 0 ) {
64+ if (auto * inner = outer->left ->dynCast <Binary>()) {
65+ if (inner->op == ShlInt32) {
66+ if (auto * innerConst = inner->right ->dynCast <Const>()) {
67+ if (outerConst->value == innerConst->value ) {
68+ return inner->left ;
69+ }
6870 }
6971 }
7072 }
@@ -87,11 +89,13 @@ struct Properties {
8789 if (auto * outer = curr->dynCast <Binary>()) {
8890 if (outer->op == ShrSInt32) {
8991 if (auto * outerConst = outer->right ->dynCast <Const>()) {
90- if (auto * inner = outer->left ->dynCast <Binary>()) {
91- if (inner->op == ShlInt32) {
92- if (auto * innerConst = inner->right ->dynCast <Const>()) {
93- if (outerConst->value .leU (innerConst->value ).geti32 ()) {
94- return inner->left ;
92+ if (outerConst->value .geti32 () != 0 ) {
93+ if (auto * inner = outer->left ->dynCast <Binary>()) {
94+ if (inner->op == ShlInt32) {
95+ if (auto * innerConst = inner->right ->dynCast <Const>()) {
96+ if (outerConst->value .leU (innerConst->value ).geti32 ()) {
97+ return inner->left ;
98+ }
9599 }
96100 }
97101 }
0 commit comments