diff options
| -rw-r--r-- | issue-2248.patch | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/issue-2248.patch b/issue-2248.patch new file mode 100644 index 0000000000..27e40d8db3 --- /dev/null +++ b/issue-2248.patch @@ -0,0 +1,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: |