summary refs log tree commit diff stats
path: root/issue-2248.patch
blob: 27e40d8db3e7e219009013cb274210f6bd565464 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
diff --git a/tcg/optimize.c b/tcg/optimize.c
index f922f86a1d..a864331b69 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -2618,8 +2618,11 @@ static bool fold_shift(OptContext *ctx, TCGOp *op)
          * If the sign bit is known zero, then logical right shift
          * will not reduce the number of input sign repetitions.
          */
-        if (~z_mask & -s_mask) {
-            return fold_masks_s(ctx, op, s_mask);
+        {
+            uint64_t sign = (s_mask & -s_mask) >> 1;
+            if (!(z_mask & sign)) {
+                return fold_masks_s(ctx, op, s_mask);
+            }
         }
         break;
     default: