| ; REQUIRES: aarch64-registered-target |
| |
| ;; There shouldn't be a default -mtune. |
| ; RUN: llc < %s -mtriple=aarch64 | FileCheck %s --check-prefixes=CHECK-NOTUNE |
| |
| ; RUN: llc < %s -mtriple=aarch64 -mtune=generic | FileCheck %s --check-prefixes=CHECK-TUNE-GENERIC |
| ; RUN: llc < %s -mtriple=aarch64 -mtune=apple-m5 | FileCheck %s --check-prefixes=CHECK-TUNE-APPLE-M5 |
| |
| ;; Check interaction between mcpu and mtune. |
| ; RUN: llc < %s -mtriple=aarch64 -mcpu=apple-m5 | FileCheck %s --check-prefixes=CHECK-TUNE-APPLE-M5 |
| ; RUN: llc < %s -mtriple=aarch64 -mcpu=apple-m5 -mtune=generic | FileCheck %s --check-prefixes=CHECK-TUNE-GENERIC |
| |
| ;; Test -mtune=help |
| ; RUN: llc -mtriple=aarch64 -mtune=help 2>&1 | FileCheck %s --check-prefixes=CHECK-TUNE-HELP,CHECK-TUNE-HELP-NO-COMPILE |
| ; RUN: llc -mtriple=aarch64 -mtune=help -o %t.s 2>&1 | FileCheck %s --check-prefixes=CHECK-TUNE-HELP,CHECK-TUNE-HELP-NO-COMPILE |
| ; RUN: llc < %s -mtriple=aarch64 -mtune=help 2>&1 | FileCheck %s --check-prefixes=CHECK-TUNE-HELP,CHECK-TUNE-HELP-NO-COMPILE |
| ; RUN: llc < %s -mtriple=aarch64 -mtune=help -o %t.s 2>&1 | FileCheck %s --check-prefixes=CHECK-TUNE-HELP,CHECK-TUNE-HELP-NO-COMPILE |
| |
| ;; Using default target triple for -mtune=help |
| ; RUN: llc -mtune=help 2>&1 | FileCheck %s --check-prefixes=CHECK-TUNE-HELP,CHECK-TUNE-HELP-NO-COMPILE |
| ; RUN: llc < %s -mtune=help 2>&1 | FileCheck %s --check-prefixes=CHECK-TUNE-HELP,CHECK-TUNE-HELP-NO-COMPILE |
| |
| ; CHECK-TUNE-HELP: Available CPUs for this target: |
| ; CHECK-TUNE-HELP: Available features for this target: |
| |
| ;; To check we dont compile the file |
| ; CHECK-TUNE-HELP-NO-COMPILE-NOT: zero_cycle_regmove_FPR32: |
| |
| ;; A test case that depends on `FeatureZCRegMoveFPR128` tuning feature, to enable -mtune verification |
| ;; through codegen effects. Taken from: llvm/test/CodeGen/AArch64/arm64-zero-cycle-regmove-fpr.ll |
| define void @zero_cycle_regmove_FPR32(float %a, float %b, float %c, float %d) { |
| ; CHECK-NOTUNE-LABEL: zero_cycle_regmove_FPR32: |
| ; CHECK-NOTUNE: fmov s0, s2 |
| ; CHECK-NOTUNE-NEXT: fmov s1, s3 |
| ; CHECK-NOTUNE-NEXT: fmov s8, s3 |
| ; CHECK-NOTUNE-NEXT: fmov s9, s2 |
| ; CHECK-NOTUNE-NEXT: bl foo_float |
| ; CHECK-NOTUNE-NEXT: fmov s0, s9 |
| ; CHECK-NOTUNE-NEXT: fmov s1, s8 |
| ; CHECK-NOTUNE-NEXT: bl foo_float |
| ; |
| ; CHECK-TUNE-GENERIC-LABEL: zero_cycle_regmove_FPR32: |
| ; CHECK-TUNE-GENERIC: fmov s0, s2 |
| ; CHECK-TUNE-GENERIC-NEXT: fmov s1, s3 |
| ; CHECK-TUNE-GENERIC-NEXT: fmov s8, s3 |
| ; CHECK-TUNE-GENERIC-NEXT: fmov s9, s2 |
| ; CHECK-TUNE-GENERIC-NEXT: bl foo_float |
| ; CHECK-TUNE-GENERIC-NEXT: fmov s0, s9 |
| ; CHECK-TUNE-GENERIC-NEXT: fmov s1, s8 |
| ; CHECK-TUNE-GENERIC-NEXT: bl foo_float |
| ; |
| ; CHECK-TUNE-APPLE-M5-LABEL: zero_cycle_regmove_FPR32: |
| ; CHECK-TUNE-APPLE-M5: mov v8.16b, v3.16b |
| ; CHECK-TUNE-APPLE-M5-NEXT: mov v9.16b, v2.16b |
| ; CHECK-TUNE-APPLE-M5-NEXT: mov v0.16b, v2.16b |
| ; CHECK-TUNE-APPLE-M5-NEXT: mov v1.16b, v3.16b |
| ; CHECK-TUNE-APPLE-M5-NEXT: bl foo_float |
| ; CHECK-TUNE-APPLE-M5-NEXT: mov v0.16b, v9.16b |
| ; CHECK-TUNE-APPLE-M5-NEXT: mov v1.16b, v8.16b |
| ; CHECK-TUNE-APPLE-M5-NEXT: bl foo_float |
| entry: |
| %call = call float @foo_float(float %c, float %d) |
| %call1 = call float @foo_float(float %c, float %d) |
| unreachable |
| } |
| |
| declare float @foo_float(float, float) |