# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py # RUN: llvm-mca -mtriple=riscv64 -mcpu=sifive-u74 -mattr=+c -timeline \ # RUN: -timeline-max-cycles=1000 -iterations=1 < %s | FileCheck %s c.lui a0, 1 c.add a0, a0 c.addi a0, 1 c.addw a0, a0 c.addiw a0, 1 c.sub a0, a0 c.subw a0, a0 c.and a0, a0 c.andi a0, 1 c.or a0, a0 c.xor a0, a0 c.slli a0, 1 c.srli a0, 1 c.srai a0, 1 c.add a0, a0 beqz a0, 1f 1: c.add a0, a0 bnez a0, 1f 1: c.add a0, a0 c.jr a0 # CHECK: Iterations: 1 # CHECK-NEXT: Instructions: 20 # CHECK-NEXT: Total Cycles: 21 # CHECK-NEXT: Total uOps: 20 # CHECK: Dispatch Width: 2 # CHECK-NEXT: uOps Per Cycle: 0.95 # CHECK-NEXT: IPC: 0.95 # CHECK-NEXT: Block RThroughput: 10.0 # CHECK: Instruction Info: # CHECK-NEXT: [1]: #uOps # CHECK-NEXT: [2]: Latency # CHECK-NEXT: [3]: RThroughput # CHECK-NEXT: [4]: MayLoad # CHECK-NEXT: [5]: MayStore # CHECK-NEXT: [6]: HasSideEffects (U) # CHECK: [1] [2] [3] [4] [5] [6] Instructions: # CHECK-NEXT: 1 3 0.50 lui a0, 1 # CHECK-NEXT: 1 3 0.50 add a0, a0, a0 # CHECK-NEXT: 1 3 0.50 addi a0, a0, 1 # CHECK-NEXT: 1 3 0.50 addw a0, a0, a0 # CHECK-NEXT: 1 3 0.50 addiw a0, a0, 1 # CHECK-NEXT: 1 3 0.50 sub a0, a0, a0 # CHECK-NEXT: 1 3 0.50 subw a0, a0, a0 # CHECK-NEXT: 1 3 0.50 and a0, a0, a0 # CHECK-NEXT: 1 3 0.50 andi a0, a0, 1 # CHECK-NEXT: 1 3 0.50 or a0, a0, a0 # CHECK-NEXT: 1 3 0.50 xor a0, a0, a0 # CHECK-NEXT: 1 3 0.50 slli a0, a0, 1 # CHECK-NEXT: 1 3 0.50 srli a0, a0, 1 # CHECK-NEXT: 1 3 0.50 srai a0, a0, 1 # CHECK-NEXT: 1 3 0.50 add a0, a0, a0 # CHECK-NEXT: 1 3 1.00 beqz a0, .Ltmp0 # CHECK-NEXT: 1 3 0.50 add a0, a0, a0 # CHECK-NEXT: 1 3 1.00 bnez a0, .Ltmp1 # CHECK-NEXT: 1 3 0.50 add a0, a0, a0 # CHECK-NEXT: 1 3 1.00 jr a0 # CHECK: Resources: # CHECK-NEXT: [0] - SiFive7FDiv # CHECK-NEXT: [1] - SiFive7IDiv # CHECK-NEXT: [2] - SiFive7PipeA # CHECK-NEXT: [3] - SiFive7PipeB # CHECK-NEXT: [4] - SiFive7VA # CHECK-NEXT: [5] - SiFive7VCQ # CHECK-NEXT: [6] - SiFive7VL # CHECK-NEXT: [7] - SiFive7VS # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] # CHECK-NEXT: - - 9.00 11.00 - - - - # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] Instructions: # CHECK-NEXT: - - - 1.00 - - - - lui a0, 1 # CHECK-NEXT: - - 1.00 - - - - - add a0, a0, a0 # CHECK-NEXT: - - - 1.00 - - - - addi a0, a0, 1 # CHECK-NEXT: - - 1.00 - - - - - addw a0, a0, a0 # CHECK-NEXT: - - - 1.00 - - - - addiw a0, a0, 1 # CHECK-NEXT: - - 1.00 - - - - - sub a0, a0, a0 # CHECK-NEXT: - - - 1.00 - - - - subw a0, a0, a0 # CHECK-NEXT: - - 1.00 - - - - - and a0, a0, a0 # CHECK-NEXT: - - - 1.00 - - - - andi a0, a0, 1 # CHECK-NEXT: - - 1.00 - - - - - or a0, a0, a0 # CHECK-NEXT: - - - 1.00 - - - - xor a0, a0, a0 # CHECK-NEXT: - - 1.00 - - - - - slli a0, a0, 1 # CHECK-NEXT: - - - 1.00 - - - - srli a0, a0, 1 # CHECK-NEXT: - - 1.00 - - - - - srai a0, a0, 1 # CHECK-NEXT: - - - 1.00 - - - - add a0, a0, a0 # CHECK-NEXT: - - - 1.00 - - - - beqz a0, .Ltmp0 # CHECK-NEXT: - - 1.00 - - - - - add a0, a0, a0 # CHECK-NEXT: - - - 1.00 - - - - bnez a0, .Ltmp1 # CHECK-NEXT: - - 1.00 - - - - - add a0, a0, a0 # CHECK-NEXT: - - - 1.00 - - - - jr a0 # CHECK: Timeline view: # CHECK-NEXT: 0123456789 # CHECK-NEXT: Index 0123456789 0 # CHECK: [0,0] DeeE . . . . lui a0, 1 # CHECK-NEXT: [0,1] .DeeE. . . . add a0, a0, a0 # CHECK-NEXT: [0,2] . DeeE . . . addi a0, a0, 1 # CHECK-NEXT: [0,3] . DeeE . . . addw a0, a0, a0 # CHECK-NEXT: [0,4] . DeeE . . . addiw a0, a0, 1 # CHECK-NEXT: [0,5] . DeeE . . . sub a0, a0, a0 # CHECK-NEXT: [0,6] . .DeeE. . . subw a0, a0, a0 # CHECK-NEXT: [0,7] . . DeeE . . and a0, a0, a0 # CHECK-NEXT: [0,8] . . DeeE . . andi a0, a0, 1 # CHECK-NEXT: [0,9] . . DeeE . . or a0, a0, a0 # CHECK-NEXT: [0,10] . . DeeE . . xor a0, a0, a0 # CHECK-NEXT: [0,11] . . .DeeE. . slli a0, a0, 1 # CHECK-NEXT: [0,12] . . . DeeE . srli a0, a0, 1 # CHECK-NEXT: [0,13] . . . DeeE . srai a0, a0, 1 # CHECK-NEXT: [0,14] . . . DeeE . add a0, a0, a0 # CHECK-NEXT: [0,15] . . . DeeE . beqz a0, .Ltmp0 # CHECK-NEXT: [0,16] . . . DeeE . add a0, a0, a0 # CHECK-NEXT: [0,17] . . . .DeeE. bnez a0, .Ltmp1 # CHECK-NEXT: [0,18] . . . .DeeE. add a0, a0, a0 # CHECK-NEXT: [0,19] . . . . DeeE jr a0 # CHECK: Average Wait times (based on the timeline view): # CHECK-NEXT: [0]: Executions # CHECK-NEXT: [1]: Average time spent waiting in a scheduler's queue # CHECK-NEXT: [2]: Average time spent waiting in a scheduler's queue while ready # CHECK-NEXT: [3]: Average time elapsed from WB until retire stage # CHECK: [0] [1] [2] [3] # CHECK-NEXT: 0. 1 0.0 0.0 0.0 lui a0, 1 # CHECK-NEXT: 1. 1 0.0 0.0 0.0 add a0, a0, a0 # CHECK-NEXT: 2. 1 0.0 0.0 0.0 addi a0, a0, 1 # CHECK-NEXT: 3. 1 0.0 0.0 0.0 addw a0, a0, a0 # CHECK-NEXT: 4. 1 0.0 0.0 0.0 addiw a0, a0, 1 # CHECK-NEXT: 5. 1 0.0 0.0 0.0 sub a0, a0, a0 # CHECK-NEXT: 6. 1 0.0 0.0 0.0 subw a0, a0, a0 # CHECK-NEXT: 7. 1 0.0 0.0 0.0 and a0, a0, a0 # CHECK-NEXT: 8. 1 0.0 0.0 0.0 andi a0, a0, 1 # CHECK-NEXT: 9. 1 0.0 0.0 0.0 or a0, a0, a0 # CHECK-NEXT: 10. 1 0.0 0.0 0.0 xor a0, a0, a0 # CHECK-NEXT: 11. 1 0.0 0.0 0.0 slli a0, a0, 1 # CHECK-NEXT: 12. 1 0.0 0.0 0.0 srli a0, a0, 1 # CHECK-NEXT: 13. 1 0.0 0.0 0.0 srai a0, a0, 1 # CHECK-NEXT: 14. 1 0.0 0.0 0.0 add a0, a0, a0 # CHECK-NEXT: 15. 1 0.0 0.0 0.0 beqz a0, .Ltmp0 # CHECK-NEXT: 16. 1 0.0 0.0 0.0 add a0, a0, a0 # CHECK-NEXT: 17. 1 0.0 0.0 0.0 bnez a0, .Ltmp1 # CHECK-NEXT: 18. 1 0.0 0.0 0.0 add a0, a0, a0 # CHECK-NEXT: 19. 1 0.0 0.0 0.0 jr a0 # CHECK-NEXT: 1 0.0 0.0 0.0