
Utilize common API in PPCTargetParser (https://github.com/llvm/llvm-project/pull/97541) to set default CPU with same interfaces for LLC. This will update AIX default CPU to pwr7 and LoP powerppc64 default CPU to ppc64.
243 lines
7.4 KiB
LLVM
243 lines
7.4 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s |\
|
|
; RUN: FileCheck %s --check-prefix=CHECK-PWR8
|
|
; RUN: llc -verify-machineinstrs -mcpu=ppc -mtriple=powerpc64-unknown-linux-gnu \
|
|
; RUN: -mattr=-vsx < %s | FileCheck %s --check-prefix=CHECK-NOVSX
|
|
; RUN: llc -verify-machineinstrs -mcpu=ppc -mtriple=powerpc64-unknown-linux-gnu \
|
|
; RUN: -mcpu=pwr7 < %s | FileCheck %s --check-prefix=CHECK-PWR7
|
|
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix -mcpu=pwr7 \
|
|
; RUN: < %s | FileCheck %s --check-prefix=CHECK-PWR7
|
|
; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-aix -mcpu=pwr8 < %s |\
|
|
; RUN: FileCheck %s --check-prefix=CHECK-PWR8
|
|
|
|
define dso_local double @fmsub_t0(double %d, double %d2, double %d3) {
|
|
; CHECK-PWR8-LABEL: fmsub_t0:
|
|
; CHECK-PWR8: # %bb.0: # %entry
|
|
; CHECK-PWR8-NEXT: xsmsubmdp 1, 2, 3
|
|
; CHECK-PWR8-NEXT: blr
|
|
;
|
|
; CHECK-NOVSX-LABEL: fmsub_t0:
|
|
; CHECK-NOVSX: # %bb.0: # %entry
|
|
; CHECK-NOVSX-NEXT: fmsub 1, 1, 2, 3
|
|
; CHECK-NOVSX-NEXT: blr
|
|
;
|
|
; CHECK-PWR7-LABEL: fmsub_t0:
|
|
; CHECK-PWR7: # %bb.0: # %entry
|
|
; CHECK-PWR7-NEXT: xsmsubmdp 1, 2, 3
|
|
; CHECK-PWR7-NEXT: blr
|
|
entry:
|
|
%0 = tail call double @llvm.ppc.fmsub(double %d, double %d2, double %d3)
|
|
ret double %0
|
|
}
|
|
|
|
declare double @llvm.ppc.fmsub(double, double, double)
|
|
|
|
define dso_local float @fmsubs_t0(float %f, float %f2, float %f3) {
|
|
; CHECK-PWR8-LABEL: fmsubs_t0:
|
|
; CHECK-PWR8: # %bb.0: # %entry
|
|
; CHECK-PWR8-NEXT: xsmsubmsp 1, 2, 3
|
|
; CHECK-PWR8-NEXT: blr
|
|
;
|
|
; CHECK-NOVSX-LABEL: fmsubs_t0:
|
|
; CHECK-NOVSX: # %bb.0: # %entry
|
|
; CHECK-NOVSX-NEXT: fmsubs 1, 1, 2, 3
|
|
; CHECK-NOVSX-NEXT: blr
|
|
;
|
|
; CHECK-PWR7-LABEL: fmsubs_t0:
|
|
; CHECK-PWR7: # %bb.0: # %entry
|
|
; CHECK-PWR7-NEXT: fmsubs 1, 1, 2, 3
|
|
; CHECK-PWR7-NEXT: blr
|
|
entry:
|
|
%0 = tail call float @llvm.ppc.fmsubs(float %f, float %f2, float %f3)
|
|
ret float %0
|
|
}
|
|
|
|
declare float @llvm.ppc.fmsubs(float, float, float)
|
|
|
|
define dso_local double @fnmadd_t0(double %d, double %d2, double %d3) {
|
|
; CHECK-PWR8-LABEL: fnmadd_t0:
|
|
; CHECK-PWR8: # %bb.0: # %entry
|
|
; CHECK-PWR8-NEXT: xsnmaddmdp 1, 2, 3
|
|
; CHECK-PWR8-NEXT: blr
|
|
;
|
|
; CHECK-NOVSX-LABEL: fnmadd_t0:
|
|
; CHECK-NOVSX: # %bb.0: # %entry
|
|
; CHECK-NOVSX-NEXT: fnmadd 1, 1, 2, 3
|
|
; CHECK-NOVSX-NEXT: blr
|
|
;
|
|
; CHECK-PWR7-LABEL: fnmadd_t0:
|
|
; CHECK-PWR7: # %bb.0: # %entry
|
|
; CHECK-PWR7-NEXT: xsnmaddmdp 1, 2, 3
|
|
; CHECK-PWR7-NEXT: blr
|
|
entry:
|
|
%0 = tail call double @llvm.ppc.fnmadd(double %d, double %d2, double %d3)
|
|
ret double %0
|
|
}
|
|
|
|
declare double @llvm.ppc.fnmadd(double, double, double)
|
|
|
|
define dso_local float @fnmadds_t0(float %f, float %f2, float %f3) {
|
|
; CHECK-PWR8-LABEL: fnmadds_t0:
|
|
; CHECK-PWR8: # %bb.0: # %entry
|
|
; CHECK-PWR8-NEXT: xsnmaddmsp 1, 2, 3
|
|
; CHECK-PWR8-NEXT: blr
|
|
;
|
|
; CHECK-NOVSX-LABEL: fnmadds_t0:
|
|
; CHECK-NOVSX: # %bb.0: # %entry
|
|
; CHECK-NOVSX-NEXT: fnmadds 1, 1, 2, 3
|
|
; CHECK-NOVSX-NEXT: blr
|
|
;
|
|
; CHECK-PWR7-LABEL: fnmadds_t0:
|
|
; CHECK-PWR7: # %bb.0: # %entry
|
|
; CHECK-PWR7-NEXT: fnmadds 1, 1, 2, 3
|
|
; CHECK-PWR7-NEXT: blr
|
|
entry:
|
|
%0 = tail call float @llvm.ppc.fnmadds(float %f, float %f2, float %f3)
|
|
ret float %0
|
|
}
|
|
|
|
declare float @llvm.ppc.fnmadds(float, float, float)
|
|
|
|
define dso_local float @fnmsub_f32(float %f, float %f2, float %f3) {
|
|
; CHECK-PWR8-LABEL: fnmsub_f32:
|
|
; CHECK-PWR8: # %bb.0: # %entry
|
|
; CHECK-PWR8-NEXT: xsnmsubasp 3, 1, 2
|
|
; CHECK-PWR8-NEXT: fmr 1, 3
|
|
; CHECK-PWR8-NEXT: blr
|
|
;
|
|
; CHECK-NOVSX-LABEL: fnmsub_f32:
|
|
; CHECK-NOVSX: # %bb.0: # %entry
|
|
; CHECK-NOVSX-NEXT: fnmsubs 1, 1, 2, 3
|
|
; CHECK-NOVSX-NEXT: blr
|
|
;
|
|
; CHECK-PWR7-LABEL: fnmsub_f32:
|
|
; CHECK-PWR7: # %bb.0: # %entry
|
|
; CHECK-PWR7-NEXT: fnmsubs 1, 1, 2, 3
|
|
; CHECK-PWR7-NEXT: blr
|
|
entry:
|
|
%0 = tail call float @llvm.ppc.fnmsub.f32(float %f, float %f2, float %f3)
|
|
ret float %0
|
|
}
|
|
|
|
declare float @llvm.ppc.fnmsub.f32(float, float, float)
|
|
|
|
define dso_local double @fnmsub_f64(double %f, double %f2, double %f3) {
|
|
; CHECK-PWR8-LABEL: fnmsub_f64:
|
|
; CHECK-PWR8: # %bb.0: # %entry
|
|
; CHECK-PWR8-NEXT: xsnmsubadp 3, 1, 2
|
|
; CHECK-PWR8-NEXT: fmr 1, 3
|
|
; CHECK-PWR8-NEXT: blr
|
|
;
|
|
; CHECK-NOVSX-LABEL: fnmsub_f64:
|
|
; CHECK-NOVSX: # %bb.0: # %entry
|
|
; CHECK-NOVSX-NEXT: fnmsub 1, 1, 2, 3
|
|
; CHECK-NOVSX-NEXT: blr
|
|
;
|
|
; CHECK-PWR7-LABEL: fnmsub_f64:
|
|
; CHECK-PWR7: # %bb.0: # %entry
|
|
; CHECK-PWR7-NEXT: xsnmsubadp 3, 1, 2
|
|
; CHECK-PWR7-NEXT: fmr 1, 3
|
|
; CHECK-PWR7-NEXT: blr
|
|
entry:
|
|
%0 = tail call double @llvm.ppc.fnmsub.f64(double %f, double %f2, double %f3)
|
|
ret double %0
|
|
}
|
|
|
|
declare double @llvm.ppc.fnmsub.f64(double, double, double)
|
|
|
|
define dso_local <4 x float> @fnmsub_v4f32(<4 x float> %f, <4 x float> %f2, <4 x float> %f3) {
|
|
; CHECK-PWR8-LABEL: fnmsub_v4f32:
|
|
; CHECK-PWR8: # %bb.0: # %entry
|
|
; CHECK-PWR8-NEXT: xvnmsubasp 36, 34, 35
|
|
; CHECK-PWR8-NEXT: vmr 2, 4
|
|
; CHECK-PWR8-NEXT: blr
|
|
;
|
|
; CHECK-NOVSX-LABEL: fnmsub_v4f32:
|
|
; CHECK-NOVSX: # %bb.0: # %entry
|
|
; CHECK-NOVSX-NEXT: fnmsubs 1, 1, 5, 9
|
|
; CHECK-NOVSX-NEXT: fnmsubs 2, 2, 6, 10
|
|
; CHECK-NOVSX-NEXT: fnmsubs 3, 3, 7, 11
|
|
; CHECK-NOVSX-NEXT: fnmsubs 4, 4, 8, 12
|
|
; CHECK-NOVSX-NEXT: blr
|
|
;
|
|
; CHECK-PWR7-LABEL: fnmsub_v4f32:
|
|
; CHECK-PWR7: # %bb.0: # %entry
|
|
; CHECK-PWR7-NEXT: xvnmsubasp 36, 34, 35
|
|
; CHECK-PWR7-NEXT: vmr 2, 4
|
|
; CHECK-PWR7-NEXT: blr
|
|
entry:
|
|
%0 = tail call <4 x float> @llvm.ppc.fnmsub.v4f32(<4 x float> %f, <4 x float> %f2, <4 x float> %f3)
|
|
ret <4 x float> %0
|
|
}
|
|
|
|
declare <4 x float> @llvm.ppc.fnmsub.v4f32(<4 x float>, <4 x float>, <4 x float>)
|
|
|
|
define dso_local <2 x double> @fnmsub_v2f64(<2 x double> %f, <2 x double> %f2, <2 x double> %f3) {
|
|
; CHECK-PWR8-LABEL: fnmsub_v2f64:
|
|
; CHECK-PWR8: # %bb.0: # %entry
|
|
; CHECK-PWR8-NEXT: xvnmsubadp 36, 34, 35
|
|
; CHECK-PWR8-NEXT: vmr 2, 4
|
|
; CHECK-PWR8-NEXT: blr
|
|
;
|
|
; CHECK-NOVSX-LABEL: fnmsub_v2f64:
|
|
; CHECK-NOVSX: # %bb.0: # %entry
|
|
; CHECK-NOVSX-NEXT: fnmsub 1, 1, 3, 5
|
|
; CHECK-NOVSX-NEXT: fnmsub 2, 2, 4, 6
|
|
; CHECK-NOVSX-NEXT: blr
|
|
;
|
|
; CHECK-PWR7-LABEL: fnmsub_v2f64:
|
|
; CHECK-PWR7: # %bb.0: # %entry
|
|
; CHECK-PWR7-NEXT: xvnmsubadp 36, 34, 35
|
|
; CHECK-PWR7-NEXT: vmr 2, 4
|
|
; CHECK-PWR7-NEXT: blr
|
|
entry:
|
|
%0 = tail call <2 x double> @llvm.ppc.fnmsub.v2f64(<2 x double> %f, <2 x double> %f2, <2 x double> %f3)
|
|
ret <2 x double> %0
|
|
}
|
|
|
|
declare <2 x double> @llvm.ppc.fnmsub.v2f64(<2 x double>, <2 x double>, <2 x double>)
|
|
|
|
define dso_local double @fre(double %d) {
|
|
; CHECK-PWR8-LABEL: fre:
|
|
; CHECK-PWR8: # %bb.0: # %entry
|
|
; CHECK-PWR8-NEXT: xsredp 1, 1
|
|
; CHECK-PWR8-NEXT: blr
|
|
;
|
|
; CHECK-NOVSX-LABEL: fre:
|
|
; CHECK-NOVSX: # %bb.0: # %entry
|
|
; CHECK-NOVSX-NEXT: fre 1, 1
|
|
; CHECK-NOVSX-NEXT: blr
|
|
;
|
|
; CHECK-PWR7-LABEL: fre:
|
|
; CHECK-PWR7: # %bb.0: # %entry
|
|
; CHECK-PWR7-NEXT: xsredp 1, 1
|
|
; CHECK-PWR7-NEXT: blr
|
|
entry:
|
|
%0 = tail call double @llvm.ppc.fre(double %d)
|
|
ret double %0
|
|
}
|
|
|
|
declare double @llvm.ppc.fre(double)
|
|
|
|
define dso_local float @fres(float %f) {
|
|
; CHECK-PWR8-LABEL: fres:
|
|
; CHECK-PWR8: # %bb.0: # %entry
|
|
; CHECK-PWR8-NEXT: xsresp 1, 1
|
|
; CHECK-PWR8-NEXT: blr
|
|
;
|
|
; CHECK-NOVSX-LABEL: fres:
|
|
; CHECK-NOVSX: # %bb.0: # %entry
|
|
; CHECK-NOVSX-NEXT: fres 1, 1
|
|
; CHECK-NOVSX-NEXT: blr
|
|
;
|
|
; CHECK-PWR7-LABEL: fres:
|
|
; CHECK-PWR7: # %bb.0: # %entry
|
|
; CHECK-PWR7-NEXT: fres 1, 1
|
|
; CHECK-PWR7-NEXT: blr
|
|
entry:
|
|
%0 = tail call float @llvm.ppc.fres(float %f)
|
|
ret float %0
|
|
}
|
|
|
|
declare float @llvm.ppc.fres(float)
|