| Index: bench/MatrixBench.cpp
|
| diff --git a/bench/MatrixBench.cpp b/bench/MatrixBench.cpp
|
| index 7258ff579ddf0d04400d55e1d6739876c98db733..fa19fc8157aa59aa01b55bf251c1cf85bca26da8 100644
|
| --- a/bench/MatrixBench.cpp
|
| +++ b/bench/MatrixBench.cpp
|
| @@ -41,17 +41,6 @@ private:
|
| typedef SkBenchmark INHERITED;
|
| };
|
|
|
| -// we want to stop the compiler from eliminating code that it thinks is a no-op
|
| -// so we have a non-static global we increment, hoping that will convince the
|
| -// compiler to execute everything
|
| -int gMatrixBench_NonStaticGlobal;
|
| -
|
| -#define always_do(pred) \
|
| - do { \
|
| - if (pred) { \
|
| - ++gMatrixBench_NonStaticGlobal; \
|
| - } \
|
| - } while (0)
|
|
|
| class EqualsMatrixBench : public MatrixBench {
|
| public:
|
| @@ -63,9 +52,12 @@ protected:
|
| m0.reset();
|
| m1.reset();
|
| m2.reset();
|
| - always_do(m0 == m1);
|
| - always_do(m1 == m2);
|
| - always_do(m2 == m0);
|
| +
|
| + // xor into a volatile prevents these comparisons from being optimized away.
|
| + volatile bool junk = false;
|
| + junk ^= (m0 == m1);
|
| + junk ^= (m1 == m2);
|
| + junk ^= (m2 == m0);
|
| }
|
| private:
|
| typedef MatrixBench INHERITED;
|
| @@ -243,21 +235,23 @@ protected:
|
| fMatrix.setAll(fArray[0], fArray[1], fArray[2],
|
| fArray[3], fArray[4], fArray[5],
|
| fArray[6], fArray[7], fArray[8]);
|
| - always_do(fMatrix.getType());
|
| + // xoring into a volatile prevents the compiler from optimizing these away
|
| + volatile int junk = 0;
|
| + junk ^= (fMatrix.getType());
|
| fMatrix.dirtyMatrixTypeCache();
|
| - always_do(fMatrix.getType());
|
| + junk ^= (fMatrix.getType());
|
| fMatrix.dirtyMatrixTypeCache();
|
| - always_do(fMatrix.getType());
|
| + junk ^= (fMatrix.getType());
|
| fMatrix.dirtyMatrixTypeCache();
|
| - always_do(fMatrix.getType());
|
| + junk ^= (fMatrix.getType());
|
| fMatrix.dirtyMatrixTypeCache();
|
| - always_do(fMatrix.getType());
|
| + junk ^= (fMatrix.getType());
|
| fMatrix.dirtyMatrixTypeCache();
|
| - always_do(fMatrix.getType());
|
| + junk ^= (fMatrix.getType());
|
| fMatrix.dirtyMatrixTypeCache();
|
| - always_do(fMatrix.getType());
|
| + junk ^= (fMatrix.getType());
|
| fMatrix.dirtyMatrixTypeCache();
|
| - always_do(fMatrix.getType());
|
| + junk ^= (fMatrix.getType());
|
| }
|
| private:
|
| SkMatrix fMatrix;
|
|
|