147 lines
8.5 KiB
LLVM
147 lines
8.5 KiB
LLVM
; RUN: opt -cost-model -analyze -mtriple=aarch64--linux-gnu -mattr=+sve < %s 2>%t | FileCheck %s
|
|
|
|
; RUN: FileCheck --check-prefix=WARN --allow-empty %s <%t
|
|
|
|
; If this check fails please read test/CodeGen/AArch64/README for instructions on how to resolve it.
|
|
; WARN-NOT: warning
|
|
|
|
; Check icmp for legal integer vectors.
|
|
define void @cmp_legal_int() {
|
|
; CHECK-LABEL: 'cmp_legal_int'
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %1 = icmp ne <vscale x 2 x i64> undef, undef
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %2 = icmp ne <vscale x 4 x i32> undef, undef
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %3 = icmp ne <vscale x 8 x i16> undef, undef
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %4 = icmp ne <vscale x 16 x i8> undef, undef
|
|
%1 = icmp ne <vscale x 2 x i64> undef, undef
|
|
%2 = icmp ne <vscale x 4 x i32> undef, undef
|
|
%3 = icmp ne <vscale x 8 x i16> undef, undef
|
|
%4 = icmp ne <vscale x 16 x i8> undef, undef
|
|
ret void
|
|
}
|
|
|
|
; Check icmp for an illegal integer vector.
|
|
define <vscale x 4 x i1> @cmp_nxv4i64() {
|
|
; CHECK-LABEL: 'cmp_nxv4i64'
|
|
; CHECK: Cost Model: Found an estimated cost of 2 for instruction: %res = icmp ne <vscale x 4 x i64> undef, undef
|
|
; CHECK: Cost Model: Found an estimated cost of 0 for instruction: ret <vscale x 4 x i1> %res
|
|
%res = icmp ne <vscale x 4 x i64> undef, undef
|
|
ret <vscale x 4 x i1> %res
|
|
}
|
|
|
|
; Check icmp for legal predicate vectors.
|
|
define void @cmp_legal_pred() {
|
|
; CHECK-LABEL: 'cmp_legal_pred'
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %1 = icmp ne <vscale x 2 x i1> undef, undef
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %2 = icmp ne <vscale x 4 x i1> undef, undef
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %3 = icmp ne <vscale x 8 x i1> undef, undef
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %4 = icmp ne <vscale x 16 x i1> undef, undef
|
|
%1 = icmp ne <vscale x 2 x i1> undef, undef
|
|
%2 = icmp ne <vscale x 4 x i1> undef, undef
|
|
%3 = icmp ne <vscale x 8 x i1> undef, undef
|
|
%4 = icmp ne <vscale x 16 x i1> undef, undef
|
|
ret void
|
|
}
|
|
|
|
; Check icmp for an illegal predicate vector.
|
|
define <vscale x 32 x i1> @cmp_nxv32i1() {
|
|
; CHECK-LABEL: 'cmp_nxv32i1'
|
|
; CHECK: Cost Model: Found an estimated cost of 2 for instruction: %res = icmp ne <vscale x 32 x i1> undef, undef
|
|
; CHECK: Cost Model: Found an estimated cost of 0 for instruction: ret <vscale x 32 x i1> %res
|
|
%res = icmp ne <vscale x 32 x i1> undef, undef
|
|
ret <vscale x 32 x i1> %res
|
|
}
|
|
|
|
; Check fcmp for legal FP vectors
|
|
define void @cmp_legal_fp() #0 {
|
|
; CHECK-LABEL: 'cmp_legal_fp'
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %1 = fcmp oge <vscale x 2 x double> undef, undef
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %2 = fcmp oge <vscale x 4 x float> undef, undef
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %3 = fcmp oge <vscale x 8 x half> undef, undef
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %4 = fcmp oge <vscale x 8 x bfloat> undef, undef
|
|
%1 = fcmp oge <vscale x 2 x double> undef, undef
|
|
%2 = fcmp oge <vscale x 4 x float> undef, undef
|
|
%3 = fcmp oge <vscale x 8 x half> undef, undef
|
|
%4 = fcmp oge <vscale x 8 x bfloat> undef, undef
|
|
ret void
|
|
}
|
|
|
|
; Check fcmp for an illegal FP vector
|
|
define <vscale x 16 x i1> @cmp_nxv16f16() {
|
|
; CHECK-LABEL: 'cmp_nxv16f16'
|
|
; CHECK: Cost Model: Found an estimated cost of 2 for instruction: %res = fcmp oge <vscale x 16 x half> undef, undef
|
|
; CHECK: Cost Model: Found an estimated cost of 0 for instruction: ret <vscale x 16 x i1> %res
|
|
%res = fcmp oge <vscale x 16 x half> undef, undef
|
|
ret <vscale x 16 x i1> %res
|
|
}
|
|
|
|
; Check select for legal integer vectors
|
|
define void @sel_legal_int() {
|
|
; CHECK-LABEL: 'sel_legal_int'
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %1 = select <vscale x 2 x i1> undef, <vscale x 2 x i64> undef, <vscale x 2 x i64> undef
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %2 = select <vscale x 4 x i1> undef, <vscale x 4 x i32> undef, <vscale x 4 x i32> undef
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %3 = select <vscale x 8 x i1> undef, <vscale x 8 x i16> undef, <vscale x 8 x i16> undef
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %4 = select <vscale x 16 x i1> undef, <vscale x 16 x i8> undef, <vscale x 16 x i8> undef
|
|
%1 = select <vscale x 2 x i1> undef, <vscale x 2 x i64> undef, <vscale x 2 x i64> undef
|
|
%2 = select <vscale x 4 x i1> undef, <vscale x 4 x i32> undef, <vscale x 4 x i32> undef
|
|
%3 = select <vscale x 8 x i1> undef, <vscale x 8 x i16> undef, <vscale x 8 x i16> undef
|
|
%4 = select <vscale x 16 x i1> undef, <vscale x 16 x i8> undef, <vscale x 16 x i8> undef
|
|
ret void
|
|
}
|
|
|
|
; Check select for an illegal integer vector
|
|
define <vscale x 16 x i16> @sel_nxv16i16() {
|
|
; CHECK-LABEL: 'sel_nxv16i16'
|
|
; CHECK: Cost Model: Found an estimated cost of 2 for instruction: %res = select <vscale x 16 x i1> undef, <vscale x 16 x i16> undef, <vscale x 16 x i16> undef
|
|
; CHECK: Cost Model: Found an estimated cost of 0 for instruction: ret <vscale x 16 x i16> %res
|
|
%res = select <vscale x 16 x i1> undef, <vscale x 16 x i16> undef, <vscale x 16 x i16> undef
|
|
ret <vscale x 16 x i16> %res
|
|
}
|
|
|
|
; Check select for a legal FP vector
|
|
define void @sel_legal_fp() #0 {
|
|
; CHECK-LABEL: 'sel_legal_fp'
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %1 = select <vscale x 2 x i1> undef, <vscale x 2 x double> undef, <vscale x 2 x double> undef
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %2 = select <vscale x 4 x i1> undef, <vscale x 4 x float> undef, <vscale x 4 x float> undef
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %3 = select <vscale x 8 x i1> undef, <vscale x 8 x half> undef, <vscale x 8 x half> undef
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %4 = select <vscale x 8 x i1> undef, <vscale x 8 x bfloat> undef, <vscale x 8 x bfloat> undef
|
|
%1 = select <vscale x 2 x i1> undef, <vscale x 2 x double> undef, <vscale x 2 x double> undef
|
|
%2 = select <vscale x 4 x i1> undef, <vscale x 4 x float> undef, <vscale x 4 x float> undef
|
|
%3 = select <vscale x 8 x i1> undef, <vscale x 8 x half> undef, <vscale x 8 x half> undef
|
|
%4 = select <vscale x 8 x i1> undef, <vscale x 8 x bfloat> undef, <vscale x 8 x bfloat> undef
|
|
ret void
|
|
}
|
|
|
|
; Check select for an illegal FP vector
|
|
define <vscale x 8 x float> @sel_nxv8f32() {
|
|
; CHECK-LABEL: 'sel_nxv8f32'
|
|
; CHECK: Cost Model: Found an estimated cost of 2 for instruction: %res = select <vscale x 8 x i1> undef, <vscale x 8 x float> undef, <vscale x 8 x float> undef
|
|
; CHECK: Cost Model: Found an estimated cost of 0 for instruction: ret <vscale x 8 x float> %res
|
|
%res = select <vscale x 8 x i1> undef, <vscale x 8 x float> undef, <vscale x 8 x float> undef
|
|
ret <vscale x 8 x float> %res
|
|
}
|
|
|
|
; Check select for a legal predicate vector
|
|
define void @sel_legal_pred() {
|
|
; CHECK-LABEL: 'sel_legal_pred'
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %1 = select <vscale x 2 x i1> undef, <vscale x 2 x i1> undef, <vscale x 2 x i1> undef
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %2 = select <vscale x 4 x i1> undef, <vscale x 4 x i1> undef, <vscale x 4 x i1> undef
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %3 = select <vscale x 8 x i1> undef, <vscale x 8 x i1> undef, <vscale x 8 x i1> undef
|
|
; CHECK: Cost Model: Found an estimated cost of 1 for instruction: %4 = select <vscale x 16 x i1> undef, <vscale x 16 x i1> undef, <vscale x 16 x i1> undef
|
|
%1 = select <vscale x 2 x i1> undef, <vscale x 2 x i1> undef, <vscale x 2 x i1> undef
|
|
%2 = select <vscale x 4 x i1> undef, <vscale x 4 x i1> undef, <vscale x 4 x i1> undef
|
|
%3 = select <vscale x 8 x i1> undef, <vscale x 8 x i1> undef, <vscale x 8 x i1> undef
|
|
%4 = select <vscale x 16 x i1> undef, <vscale x 16 x i1> undef, <vscale x 16 x i1> undef
|
|
ret void
|
|
}
|
|
|
|
; Check select for an illegal predicate vector
|
|
define <vscale x 32 x i1> @sel_nxv32i1() {
|
|
; CHECK-LABEL: 'sel_nxv32i1'
|
|
; CHECK: Cost Model: Found an estimated cost of 2 for instruction: %res = select <vscale x 32 x i1> undef, <vscale x 32 x i1> undef, <vscale x 32 x i1> undef
|
|
; CHECK: Cost Model: Found an estimated cost of 0 for instruction: ret <vscale x 32 x i1> %res
|
|
%res = select <vscale x 32 x i1> undef, <vscale x 32 x i1> undef, <vscale x 32 x i1> undef
|
|
ret <vscale x 32 x i1> %res
|
|
}
|
|
|
|
attributes #0 = { "target-features"="+sve,+bf16" }
|