summaryrefslogtreecommitdiffstats
path: root/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench/0001-avoid-gcc-optimize-away-the-loops.patch
blob: b964bef1f08e384996ae4f4bdcf8e90e24225a8e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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);
 }
OpenPOWER on IntegriCloud