blob: 8eb64405b791116138e4869046b52bec2b5a311a [file] [log] [blame]
# 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