Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
  • This project
    • Loading...
  • Sign in / Register
B
benchmark
  • Project
    • Overview
    • Details
    • Activity
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 0
    • Issues 0
    • List
    • Board
    • Labels
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • Chen Yisong
  • benchmark
  • Repository

Switch branch/tag
  • benchmark
  • test
  • state_assembly_test.cc
Find file
BlameHistoryPermalink
  • Roman Lebedev's avatar
    Iteration counts should be `uint64_t` globally. (#817) · f92903cc
    Roman Lebedev authored May 13, 2019
    This is a shameless rip-off of https://github.com/google/benchmark/pull/646
    I did promise to look into why that proposed PR was producing
    so much worse assembly, and so i finally did.
    
    The reason is - that diff changes `size_t` (unsigned) to `int64_t` (signed).
    
    There is this nice little `assert`:
    https://github.com/google/benchmark/blob/7a1c37028359ca9d386d719a6ad527743cf1b753/include/benchmark/benchmark.h#L744
    It ensures that we didn't magically decide to advance our iterator
    when we should have finished benchmarking.
    
    When `cached_` was unsigned, the `assert` was `cached_ UGT 0`.
    But we only ever get to that `assert` if `cached_ NE 0`,
    and naturally if `cached_` is not `0`, then it is bigger than `0`,
    so the `assert` is tautological, and gets folded away.
    
    But now that `cached_` became signed, the assert became `cached_ SGT 0`.
    And we still only know that `cached_ NE 0`, so the assert can't be
    optimized out, or at least it doesn't currently.
    
    Regardless of whether or not that is a bug in itself,
    that particular diff would have regressed the normal 64-bit systems,
    by halving the maximal iteration space (since we go from unsigned counter
    to signed one, of the same bit-width), which seems like a bug.
    And just so it happens, fixing *this* bug, fixes the other bug.
    
    This produces fully (bit-by-bit) identical state_assembly_test.s
    The filecheck change is actually needed regardless of this patch,
    else this test does not pass for me even without this diff.
    f92903cc
state_assembly_test.cc 1.75 KB
EditWeb IDE
×

Replace state_assembly_test.cc

Attach a file by drag & drop or click to upload


Cancel
A new branch will be created in your fork and a new merge request will be started.