| # NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py |
| # RUN: llvm-mca -mtriple=riscv64 -mcpu=sifive-p550 -iterations=1 < %s | FileCheck %s |
| |
| fmin.s ft0, fa0, fa1 |
| fmax.s ft1, fa0, fa1 |
| fmadd.s fs0, fs0, fs8, fs9 |
| fmsub.s fs1, fs1, fs8, fs9 |
| fmul.s fs3, fs3, fs4 |
| fadd.s fs4, fs4, fs5 |
| fdiv.s fs2, fs3, fs4 |
| fsqrt.s ft1, fa2 |
| |
| fcvt.s.w ft2, a0 |
| fcvt.s.l ft3, a1 |
| fcvt.s.wu ft2, a0 |
| fcvt.s.lu ft3, a1 |
| fcvt.w.s a0, ft2 |
| fcvt.l.s a1, fs2 |
| fcvt.wu.s a0, ft2 |
| fcvt.lu.s a1, fs2 |
| |
| feq.s a2, fa0, fa1 |
| fclass.s a3, fa2 |
| |
| fmin.d ft2, ft4, ft5 |
| fmax.d ft3, ft4, ft5 |
| fmadd.d fs0, fs0, fs8, fs9 |
| fmsub.d fs1, fs1, fs8, fs9 |
| fmul.d ft4, ft4, ft5 |
| fadd.d ft4, ft5, ft6 |
| fdiv.d fs4, fa3, ft5 |
| fsqrt.d ft2, fa3 |
| |
| fcvt.d.w ft2, a0 |
| fcvt.d.l ft3, a1 |
| fcvt.d.w ft2, a0 |
| fcvt.d.l ft3, a1 |
| fcvt.w.d a0, ft2 |
| fcvt.l.d a1, fs2 |
| |
| feq.d a2, fa0, fa1 |
| fclass.d a3, fa2 |
| |
| fcvt.d.s ft1, ft2 |
| fcvt.s.d ft3, ft4 |
| |
| # CHECK: Iterations: 1 |
| # CHECK-NEXT: Instructions: 36 |
| # CHECK-NEXT: Total Cycles: 106 |
| # CHECK-NEXT: Total uOps: 36 |
| |
| # CHECK: Dispatch Width: 3 |
| # CHECK-NEXT: uOps Per Cycle: 0.34 |
| # CHECK-NEXT: IPC: 0.34 |
| # CHECK-NEXT: Block RThroughput: 99.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 2 0.50 fmin.s ft0, fa0, fa1 |
| # CHECK-NEXT: 1 2 0.50 fmax.s ft1, fa0, fa1 |
| # CHECK-NEXT: 1 4 0.50 fmadd.s fs0, fs0, fs8, fs9 |
| # CHECK-NEXT: 1 4 0.50 fmsub.s fs1, fs1, fs8, fs9 |
| # CHECK-NEXT: 1 4 0.50 fmul.s fs3, fs3, fs4 |
| # CHECK-NEXT: 1 4 0.50 fadd.s fs4, fs4, fs5 |
| # CHECK-NEXT: 1 19 18.00 fdiv.s fs2, fs3, fs4 |
| # CHECK-NEXT: 1 18 17.00 fsqrt.s ft1, fa2 |
| # CHECK-NEXT: 1 2 1.00 fcvt.s.w ft2, a0 |
| # CHECK-NEXT: 1 2 1.00 fcvt.s.l ft3, a1 |
| # CHECK-NEXT: 1 2 1.00 fcvt.s.wu ft2, a0 |
| # CHECK-NEXT: 1 2 1.00 fcvt.s.lu ft3, a1 |
| # CHECK-NEXT: 1 2 1.00 fcvt.w.s a0, ft2 |
| # CHECK-NEXT: 1 2 1.00 fcvt.l.s a1, fs2 |
| # CHECK-NEXT: 1 2 1.00 fcvt.wu.s a0, ft2 |
| # CHECK-NEXT: 1 2 1.00 fcvt.lu.s a1, fs2 |
| # CHECK-NEXT: 1 2 1.00 feq.s a2, fa0, fa1 |
| # CHECK-NEXT: 1 2 1.00 fclass.s a3, fa2 |
| # CHECK-NEXT: 1 2 0.50 fmin.d ft2, ft4, ft5 |
| # CHECK-NEXT: 1 2 0.50 fmax.d ft3, ft4, ft5 |
| # CHECK-NEXT: 1 4 0.50 fmadd.d fs0, fs0, fs8, fs9 |
| # CHECK-NEXT: 1 4 0.50 fmsub.d fs1, fs1, fs8, fs9 |
| # CHECK-NEXT: 1 4 0.50 fmul.d ft4, ft4, ft5 |
| # CHECK-NEXT: 1 4 0.50 fadd.d ft4, ft5, ft6 |
| # CHECK-NEXT: 1 33 32.00 fdiv.d fs4, fa3, ft5 |
| # CHECK-NEXT: 1 33 32.00 fsqrt.d ft2, fa3 |
| # CHECK-NEXT: 1 2 1.00 fcvt.d.w ft2, a0 |
| # CHECK-NEXT: 1 2 1.00 fcvt.d.l ft3, a1 |
| # CHECK-NEXT: 1 2 1.00 fcvt.d.w ft2, a0 |
| # CHECK-NEXT: 1 2 1.00 fcvt.d.l ft3, a1 |
| # CHECK-NEXT: 1 2 1.00 fcvt.w.d a0, ft2 |
| # CHECK-NEXT: 1 2 1.00 fcvt.l.d a1, fs2 |
| # CHECK-NEXT: 1 2 1.00 feq.d a2, fa0, fa1 |
| # CHECK-NEXT: 1 2 1.00 fclass.d a3, fa2 |
| # CHECK-NEXT: 1 2 0.50 fcvt.d.s ft1, ft2 |
| # CHECK-NEXT: 1 2 0.50 fcvt.s.d ft3, ft4 |
| |
| # CHECK: Resources: |
| # CHECK-NEXT: [0] - SiFiveP500Div |
| # CHECK-NEXT: [1] - SiFiveP500FEXQ0 |
| # CHECK-NEXT: [2] - SiFiveP500FEXQ1 |
| # CHECK-NEXT: [3] - SiFiveP500FloatDiv |
| # CHECK-NEXT: [4] - SiFiveP500IEXQ0 |
| # CHECK-NEXT: [5] - SiFiveP500IEXQ1 |
| # CHECK-NEXT: [6] - SiFiveP500IEXQ2 |
| # CHECK-NEXT: [7] - SiFiveP500Load |
| # CHECK-NEXT: [8] - SiFiveP500Store |
| |
| # CHECK: Resource pressure per iteration: |
| # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] |
| # CHECK-NEXT: - 14.00 14.00 99.00 - - 8.00 - - |
| |
| # CHECK: Resource pressure by instruction: |
| # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] Instructions: |
| # CHECK-NEXT: - - 1.00 - - - - - - fmin.s ft0, fa0, fa1 |
| # CHECK-NEXT: - 1.00 - - - - - - - fmax.s ft1, fa0, fa1 |
| # CHECK-NEXT: - - 1.00 - - - - - - fmadd.s fs0, fs0, fs8, fs9 |
| # CHECK-NEXT: - 1.00 - - - - - - - fmsub.s fs1, fs1, fs8, fs9 |
| # CHECK-NEXT: - - 1.00 - - - - - - fmul.s fs3, fs3, fs4 |
| # CHECK-NEXT: - 1.00 - - - - - - - fadd.s fs4, fs4, fs5 |
| # CHECK-NEXT: - - 1.00 18.00 - - - - - fdiv.s fs2, fs3, fs4 |
| # CHECK-NEXT: - - 1.00 17.00 - - - - - fsqrt.s ft1, fa2 |
| # CHECK-NEXT: - - - - - - 1.00 - - fcvt.s.w ft2, a0 |
| # CHECK-NEXT: - - - - - - 1.00 - - fcvt.s.l ft3, a1 |
| # CHECK-NEXT: - - - - - - 1.00 - - fcvt.s.wu ft2, a0 |
| # CHECK-NEXT: - - - - - - 1.00 - - fcvt.s.lu ft3, a1 |
| # CHECK-NEXT: - 1.00 - - - - - - - fcvt.w.s a0, ft2 |
| # CHECK-NEXT: - 1.00 - - - - - - - fcvt.l.s a1, fs2 |
| # CHECK-NEXT: - 1.00 - - - - - - - fcvt.wu.s a0, ft2 |
| # CHECK-NEXT: - 1.00 - - - - - - - fcvt.lu.s a1, fs2 |
| # CHECK-NEXT: - 1.00 - - - - - - - feq.s a2, fa0, fa1 |
| # CHECK-NEXT: - 1.00 - - - - - - - fclass.s a3, fa2 |
| # CHECK-NEXT: - - 1.00 - - - - - - fmin.d ft2, ft4, ft5 |
| # CHECK-NEXT: - - 1.00 - - - - - - fmax.d ft3, ft4, ft5 |
| # CHECK-NEXT: - - 1.00 - - - - - - fmadd.d fs0, fs0, fs8, fs9 |
| # CHECK-NEXT: - - 1.00 - - - - - - fmsub.d fs1, fs1, fs8, fs9 |
| # CHECK-NEXT: - 1.00 - - - - - - - fmul.d ft4, ft4, ft5 |
| # CHECK-NEXT: - - 1.00 - - - - - - fadd.d ft4, ft5, ft6 |
| # CHECK-NEXT: - - 1.00 32.00 - - - - - fdiv.d fs4, fa3, ft5 |
| # CHECK-NEXT: - - 1.00 32.00 - - - - - fsqrt.d ft2, fa3 |
| # CHECK-NEXT: - - - - - - 1.00 - - fcvt.d.w ft2, a0 |
| # CHECK-NEXT: - - - - - - 1.00 - - fcvt.d.l ft3, a1 |
| # CHECK-NEXT: - - - - - - 1.00 - - fcvt.d.w ft2, a0 |
| # CHECK-NEXT: - - - - - - 1.00 - - fcvt.d.l ft3, a1 |
| # CHECK-NEXT: - 1.00 - - - - - - - fcvt.w.d a0, ft2 |
| # CHECK-NEXT: - 1.00 - - - - - - - fcvt.l.d a1, fs2 |
| # CHECK-NEXT: - 1.00 - - - - - - - feq.d a2, fa0, fa1 |
| # CHECK-NEXT: - 1.00 - - - - - - - fclass.d a3, fa2 |
| # CHECK-NEXT: - - 1.00 - - - - - - fcvt.d.s ft1, ft2 |
| # CHECK-NEXT: - - 1.00 - - - - - - fcvt.s.d ft3, ft4 |