blob: 3aa7831dac58d33c9640eca0af4b7b778dd07bcf [file] [edit]
; 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)