| From 25738bb9c75f94b451201acfd6bcab13bdeee512 Mon Sep 17 00:00:00 2001 |
| From: Roy Li <rongqing.li@windriver.com> |
| Date: Thu, 5 May 2016 09:52:01 +0800 |
| Subject: [PATCH] [PATCH] avoid gcc optimize-away the loops |
| |
| Upstream-Status: pending |
| |
| Change expression used in do_integer_mul and do_uint64_mul |
| benchmarks so GCC doesn't optimize-away the loops, other |
| things are same: |
| - TEN(r *= s;); r -= t; |
| + i = 0; |
| + while ( i++ < 10) |
| + r *= s; |
| + r -= t; |
| |
| and TEN is macro: |
| #define TEN(a) a a a a a a a a a a |
| |
| Signed-off-by: Roy Li <rongqing.li@windriver.com> |
| |
| --- |
| src/lat_ops.c | 30 +++++++++++++++++++++++++----- |
| 1 file changed, 25 insertions(+), 5 deletions(-) |
| |
| diff --git a/src/lat_ops.c b/src/lat_ops.c |
| index d343ff3..457072b 100644 |
| --- a/src/lat_ops.c |
| +++ b/src/lat_ops.c |
| @@ -126,11 +126,23 @@ do_integer_mul(iter_t iterations, void* cookie) |
| struct _state *pState = (struct _state*)cookie; |
| register int r = pState->N + 37431; |
| register int s = pState->N + 4; |
| - register int t = r * s * s * s * s * s * s * s * s * s * s - r; |
| + register int t = r; |
| + int i = 0; |
| + |
| + while ( i++ < 10) |
| + t *= s; |
| + t -= r; |
| |
| while (iterations-- > 0) { |
| - TEN(r *= s;); r -= t; |
| - TEN(r *= s;); r -= t; |
| + i = 0; |
| + while ( i++ < 10) |
| + r *= s; |
| + r -= t; |
| + |
| + i = 0; |
| + while ( i++ < 10) |
| + r *= s; |
| + r -= t; |
| } |
| use_int(r); |
| } |
| @@ -207,13 +219,21 @@ do_int64_mul(iter_t iterations, void* cookie) |
| register int64 r = (int64)pState->N + 37420; |
| register int64 s = (int64)pState->N + 4; |
| register int64 t; |
| + int i = 0; |
| |
| r += (int64)(pState->N + 6)<<32; |
| t = r * s * s * s * s * s * s * s * s * s * s - r; |
| |
| while (iterations-- > 0) { |
| - TEN(r *= s;); r -= t; |
| - TEN(r *= s;); r -= t; |
| + i = 0; |
| + while ( i++ < 10) |
| + r *= s; |
| + r -= t; |
| + |
| + i = 0; |
| + while ( i++ < 10) |
| + r *= s; |
| + r -= t; |
| } |
| use_int((int)r); |
| } |