forked from OSchip/llvm-project
[CostModel][X86] Split select cost kinds tests
It's going to be much easier to maintain these tests (and all the check prefix combinations) if we don't mix cost kinds in the same file.
This commit is contained in:
parent
19cbe4e365
commit
0de2c3d7e4
|
@ -0,0 +1,187 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=code-size -mtriple=x86_64-- -mattr=+sse2 | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=code-size -mtriple=x86_64-- -mattr=+sse4.1 | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=code-size -mtriple=x86_64-- -mattr=+avx | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=code-size -mtriple=x86_64-- -mattr=+avx2 | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=code-size -mtriple=x86_64-- -mattr=+avx512f,+avx512vl | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=code-size -mtriple=x86_64-- -mattr=+avx512bw,+avx512vl | FileCheck %s
|
||||
;
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=code-size -mtriple=x86_64-- -mcpu=slm | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=code-size -mtriple=x86_64-- -mcpu=goldmont | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=code-size -mtriple=x86_64-- -mcpu=btver2 | FileCheck %s
|
||||
|
||||
; Verify the cost of vector select instructions.
|
||||
|
||||
define i32 @test_select() {
|
||||
; CHECK-LABEL: 'test_select'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I64 = select i1 undef, i64 undef, i64 undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V2I64 = select <2 x i1> undef, <2 x i64> undef, <2 x i64> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4I64 = select <4 x i1> undef, <4 x i64> undef, <4 x i64> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I64 = select <8 x i1> undef, <8 x i64> undef, <8 x i64> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I32 = select i1 undef, i32 undef, i32 undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4I32 = select <4 x i1> undef, <4 x i32> undef, <4 x i32> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I32 = select <8 x i1> undef, <8 x i32> undef, <8 x i32> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I32 = select <16 x i1> undef, <16 x i32> undef, <16 x i32> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I16 = select i1 undef, i16 undef, i16 undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I16 = select <8 x i1> undef, <8 x i16> undef, <8 x i16> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I16 = select <16 x i1> undef, <16 x i16> undef, <16 x i16> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V32I16 = select <32 x i1> undef, <32 x i16> undef, <32 x i16> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I8 = select i1 undef, i8 undef, i8 undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I8 = select <16 x i1> undef, <16 x i8> undef, <16 x i8> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V32I8 = select <32 x i1> undef, <32 x i8> undef, <32 x i8> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V64I8 = select <64 x i1> undef, <64 x i8> undef, <64 x i8> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
|
||||
;
|
||||
%I64 = select i1 undef, i64 undef, i64 undef
|
||||
%V2I64 = select <2 x i1> undef, <2 x i64> undef, <2 x i64> undef
|
||||
%V4I64 = select <4 x i1> undef, <4 x i64> undef, <4 x i64> undef
|
||||
%V8I64 = select <8 x i1> undef, <8 x i64> undef, <8 x i64> undef
|
||||
|
||||
%I32 = select i1 undef, i32 undef, i32 undef
|
||||
%V4I32 = select <4 x i1> undef, <4 x i32> undef, <4 x i32> undef
|
||||
%V8I32 = select <8 x i1> undef, <8 x i32> undef, <8 x i32> undef
|
||||
%V16I32 = select <16 x i1> undef, <16 x i32> undef, <16 x i32> undef
|
||||
|
||||
%I16 = select i1 undef, i16 undef, i16 undef
|
||||
%V8I16 = select <8 x i1> undef, <8 x i16> undef, <8 x i16> undef
|
||||
%V16I16 = select <16 x i1> undef, <16 x i16> undef, <16 x i16> undef
|
||||
%V32I16 = select <32 x i1> undef, <32 x i16> undef, <32 x i16> undef
|
||||
|
||||
%I8 = select i1 undef, i8 undef, i8 undef
|
||||
%V16I8 = select <16 x i1> undef, <16 x i8> undef, <16 x i8> undef
|
||||
%V32I8 = select <32 x i1> undef, <32 x i8> undef, <32 x i8> undef
|
||||
%V64I8 = select <64 x i1> undef, <64 x i8> undef, <64 x i8> undef
|
||||
|
||||
ret i32 undef
|
||||
}
|
||||
|
||||
define i32 @test_select_fp() {
|
||||
; CHECK-LABEL: 'test_select_fp'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %F64 = select i1 undef, double undef, double undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V2F64 = select <2 x i1> undef, <2 x double> undef, <2 x double> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4F64 = select <4 x i1> undef, <4 x double> undef, <4 x double> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8F64 = select <8 x i1> undef, <8 x double> undef, <8 x double> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %F32 = select i1 undef, float undef, float undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4F32 = select <4 x i1> undef, <4 x float> undef, <4 x float> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8F32 = select <8 x i1> undef, <8 x float> undef, <8 x float> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16F32 = select <16 x i1> undef, <16 x float> undef, <16 x float> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
|
||||
;
|
||||
%F64 = select i1 undef, double undef, double undef
|
||||
%V2F64 = select <2 x i1> undef, <2 x double> undef, <2 x double> undef
|
||||
%V4F64 = select <4 x i1> undef, <4 x double> undef, <4 x double> undef
|
||||
%V8F64 = select <8 x i1> undef, <8 x double> undef, <8 x double> undef
|
||||
|
||||
%F32 = select i1 undef, float undef, float undef
|
||||
%V4F32 = select <4 x i1> undef, <4 x float> undef, <4 x float> undef
|
||||
%V8F32 = select <8 x i1> undef, <8 x float> undef, <8 x float> undef
|
||||
%V16F32 = select <16 x i1> undef, <16 x float> undef, <16 x float> undef
|
||||
|
||||
ret i32 undef
|
||||
}
|
||||
|
||||
; Immediate blend instructions for <2 x double> and <4 x float> added at SSE41.
|
||||
; Integers of the same size should also use those instructions.
|
||||
|
||||
define <2 x i64> @test_2i64(<2 x i64> %a, <2 x i64> %b) {
|
||||
; CHECK-LABEL: 'test_2i64'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <2 x i1> <i1 true, i1 false>, <2 x i64> %a, <2 x i64> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %sel
|
||||
;
|
||||
%sel = select <2 x i1> <i1 true, i1 false>, <2 x i64> %a, <2 x i64> %b
|
||||
ret <2 x i64> %sel
|
||||
}
|
||||
|
||||
define <2 x double> @test_2double(<2 x double> %a, <2 x double> %b) {
|
||||
; CHECK-LABEL: 'test_2double'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <2 x i1> <i1 true, i1 false>, <2 x double> %a, <2 x double> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <2 x double> %sel
|
||||
;
|
||||
%sel = select <2 x i1> <i1 true, i1 false>, <2 x double> %a, <2 x double> %b
|
||||
ret <2 x double> %sel
|
||||
}
|
||||
|
||||
define <4 x i32> @test_4i32(<4 x i32> %a, <4 x i32> %b) {
|
||||
; CHECK-LABEL: 'test_4i32'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x i32> %a, <4 x i32> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %sel
|
||||
;
|
||||
%sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x i32> %a, <4 x i32> %b
|
||||
ret <4 x i32> %sel
|
||||
}
|
||||
|
||||
define <4 x float> @test_4float(<4 x float> %a, <4 x float> %b) {
|
||||
; CHECK-LABEL: 'test_4float'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x float> %a, <4 x float> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x float> %sel
|
||||
;
|
||||
%sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x float> %a, <4 x float> %b
|
||||
ret <4 x float> %sel
|
||||
}
|
||||
|
||||
define <16 x i8> @test_16i8(<16 x i8> %a, <16 x i8> %b) {
|
||||
; CHECK-LABEL: 'test_16i8'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <16 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <16 x i8> %a, <16 x i8> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %sel
|
||||
;
|
||||
%sel = select <16 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <16 x i8> %a, <16 x i8> %b
|
||||
ret <16 x i8> %sel
|
||||
}
|
||||
|
||||
; Immediate blend instructions for <4 x double> and <8 x float> added at AVX.
|
||||
; Integers of the same size should also use those instructions.
|
||||
|
||||
define <4 x i64> @test_4i64(<4 x i64> %a, <4 x i64> %b) {
|
||||
; CHECK-LABEL: 'test_4i64'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 false, i1 true>, <4 x i64> %a, <4 x i64> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %sel
|
||||
;
|
||||
%sel = select <4 x i1> <i1 true, i1 false, i1 false, i1 true>, <4 x i64> %a, <4 x i64> %b
|
||||
ret <4 x i64> %sel
|
||||
}
|
||||
|
||||
define <4 x double> @test_4double(<4 x double> %a, <4 x double> %b) {
|
||||
; CHECK-LABEL: 'test_4double'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x double> %a, <4 x double> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x double> %sel
|
||||
;
|
||||
%sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x double> %a, <4 x double> %b
|
||||
ret <4 x double> %sel
|
||||
}
|
||||
|
||||
define <8 x i32> @test_8i32(<8 x i32> %a, <8 x i32> %b) {
|
||||
; CHECK-LABEL: 'test_8i32'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <8 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 false>, <8 x i32> %a, <8 x i32> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %sel
|
||||
;
|
||||
%sel = select <8 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 false>, <8 x i32> %a, <8 x i32> %b
|
||||
ret <8 x i32> %sel
|
||||
}
|
||||
|
||||
define <8 x float> @test_8float(<8 x float> %a, <8 x float> %b) {
|
||||
; CHECK-LABEL: 'test_8float'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <8 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <8 x float> %a, <8 x float> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <8 x float> %sel
|
||||
;
|
||||
%sel = select <8 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <8 x float> %a, <8 x float> %b
|
||||
ret <8 x float> %sel
|
||||
}
|
||||
|
||||
define <16 x i16> @test_16i16(<16 x i16> %a, <16 x i16> %b) {
|
||||
; CHECK-LABEL: 'test_16i16'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <16 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <16 x i16> %a, <16 x i16> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %sel
|
||||
;
|
||||
%sel = select <16 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <16 x i16> %a, <16 x i16> %b
|
||||
ret <16 x i16> %sel
|
||||
}
|
||||
|
||||
define <32 x i8> @test_32i8(<32 x i8> %a, <32 x i8> %b) {
|
||||
; CHECK-LABEL: 'test_32i8'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <32 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <32 x i8> %a, <32 x i8> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %sel
|
||||
;
|
||||
%sel = select <32 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <32 x i8> %a, <32 x i8> %b
|
||||
ret <32 x i8> %sel
|
||||
}
|
||||
|
|
@ -1,352 +0,0 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mattr=+sse2 -cost-kind=latency < %s | FileCheck %s --check-prefixes=LATE
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mattr=+sse2 -cost-kind=code-size < %s | FileCheck %s --check-prefixes=SIZE
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mattr=+sse2 -cost-kind=size-latency < %s | FileCheck %s --check-prefixes=SIZE_LATE
|
||||
;
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mattr=+avx -cost-kind=latency < %s | FileCheck %s --check-prefixes=LATE
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mattr=+avx -cost-kind=code-size < %s | FileCheck %s --check-prefixes=SIZE
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mattr=+avx -cost-kind=size-latency < %s | FileCheck %s --check-prefixes=SIZE_LATE
|
||||
;
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mattr=+avx2 -cost-kind=latency < %s | FileCheck %s --check-prefixes=LATE
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mattr=+avx2 -cost-kind=code-size < %s | FileCheck %s --check-prefixes=SIZE
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mattr=+avx2 -cost-kind=size-latency < %s | FileCheck %s --check-prefixes=SIZE_LATE
|
||||
;
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mattr=+avx512f,+avx512vl -cost-kind=latency < %s | FileCheck %s --check-prefixes=LATE
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mattr=+avx512f,+avx512vl -cost-kind=code-size < %s | FileCheck %s --check-prefixes=SIZE
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mattr=+avx512f,+avx512vl -cost-kind=size-latency < %s | FileCheck %s --check-prefixes=SIZE_LATE
|
||||
;
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mattr=+avx512bw,+avx512vl -cost-kind=latency < %s | FileCheck %s --check-prefixes=LATE
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mattr=+avx512bw,+avx512vl -cost-kind=code-size < %s | FileCheck %s --check-prefixes=SIZE
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mattr=+avx512bw,+avx512vl -cost-kind=size-latency < %s | FileCheck %s --check-prefixes=SIZE_LATE
|
||||
;
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mcpu=slm -cost-kind=latency < %s | FileCheck %s --check-prefixes=LATE
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mcpu=slm -cost-kind=code-size < %s | FileCheck %s --check-prefixes=SIZE
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mcpu=slm -cost-kind=size-latency < %s | FileCheck %s --check-prefixes=SIZE_LATE
|
||||
;
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mcpu=goldmont -cost-kind=latency < %s | FileCheck %s --check-prefixes=LATE
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mcpu=goldmont -cost-kind=code-size < %s | FileCheck %s --check-prefixes=SIZE
|
||||
; RUN: opt -mtriple=x86_64-- -passes="print<cost-model>" 2>&1 -disable-output -mcpu=goldmont -cost-kind=size-latency < %s | FileCheck %s --check-prefixes=SIZE_LATE
|
||||
|
||||
; Verify the cost of vector select instructions.
|
||||
|
||||
define i32 @test_select() {
|
||||
; LATE-LABEL: 'test_select'
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I64 = select i1 undef, i64 undef, i64 undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V2I64 = select <2 x i1> undef, <2 x i64> undef, <2 x i64> undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4I64 = select <4 x i1> undef, <4 x i64> undef, <4 x i64> undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I64 = select <8 x i1> undef, <8 x i64> undef, <8 x i64> undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I32 = select i1 undef, i32 undef, i32 undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4I32 = select <4 x i1> undef, <4 x i32> undef, <4 x i32> undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I32 = select <8 x i1> undef, <8 x i32> undef, <8 x i32> undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I32 = select <16 x i1> undef, <16 x i32> undef, <16 x i32> undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I16 = select i1 undef, i16 undef, i16 undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I16 = select <8 x i1> undef, <8 x i16> undef, <8 x i16> undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I16 = select <16 x i1> undef, <16 x i16> undef, <16 x i16> undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V32I16 = select <32 x i1> undef, <32 x i16> undef, <32 x i16> undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I8 = select i1 undef, i8 undef, i8 undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I8 = select <16 x i1> undef, <16 x i8> undef, <16 x i8> undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V32I8 = select <32 x i1> undef, <32 x i8> undef, <32 x i8> undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V64I8 = select <64 x i1> undef, <64 x i8> undef, <64 x i8> undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
|
||||
;
|
||||
; SIZE-LABEL: 'test_select'
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I64 = select i1 undef, i64 undef, i64 undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V2I64 = select <2 x i1> undef, <2 x i64> undef, <2 x i64> undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4I64 = select <4 x i1> undef, <4 x i64> undef, <4 x i64> undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I64 = select <8 x i1> undef, <8 x i64> undef, <8 x i64> undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I32 = select i1 undef, i32 undef, i32 undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4I32 = select <4 x i1> undef, <4 x i32> undef, <4 x i32> undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I32 = select <8 x i1> undef, <8 x i32> undef, <8 x i32> undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I32 = select <16 x i1> undef, <16 x i32> undef, <16 x i32> undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I16 = select i1 undef, i16 undef, i16 undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I16 = select <8 x i1> undef, <8 x i16> undef, <8 x i16> undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I16 = select <16 x i1> undef, <16 x i16> undef, <16 x i16> undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V32I16 = select <32 x i1> undef, <32 x i16> undef, <32 x i16> undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I8 = select i1 undef, i8 undef, i8 undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I8 = select <16 x i1> undef, <16 x i8> undef, <16 x i8> undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V32I8 = select <32 x i1> undef, <32 x i8> undef, <32 x i8> undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V64I8 = select <64 x i1> undef, <64 x i8> undef, <64 x i8> undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
|
||||
;
|
||||
; SIZE_LATE-LABEL: 'test_select'
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I64 = select i1 undef, i64 undef, i64 undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V2I64 = select <2 x i1> undef, <2 x i64> undef, <2 x i64> undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4I64 = select <4 x i1> undef, <4 x i64> undef, <4 x i64> undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I64 = select <8 x i1> undef, <8 x i64> undef, <8 x i64> undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I32 = select i1 undef, i32 undef, i32 undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4I32 = select <4 x i1> undef, <4 x i32> undef, <4 x i32> undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I32 = select <8 x i1> undef, <8 x i32> undef, <8 x i32> undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I32 = select <16 x i1> undef, <16 x i32> undef, <16 x i32> undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I16 = select i1 undef, i16 undef, i16 undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I16 = select <8 x i1> undef, <8 x i16> undef, <8 x i16> undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I16 = select <16 x i1> undef, <16 x i16> undef, <16 x i16> undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V32I16 = select <32 x i1> undef, <32 x i16> undef, <32 x i16> undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I8 = select i1 undef, i8 undef, i8 undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I8 = select <16 x i1> undef, <16 x i8> undef, <16 x i8> undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V32I8 = select <32 x i1> undef, <32 x i8> undef, <32 x i8> undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V64I8 = select <64 x i1> undef, <64 x i8> undef, <64 x i8> undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
|
||||
;
|
||||
%I64 = select i1 undef, i64 undef, i64 undef
|
||||
%V2I64 = select <2 x i1> undef, <2 x i64> undef, <2 x i64> undef
|
||||
%V4I64 = select <4 x i1> undef, <4 x i64> undef, <4 x i64> undef
|
||||
%V8I64 = select <8 x i1> undef, <8 x i64> undef, <8 x i64> undef
|
||||
|
||||
%I32 = select i1 undef, i32 undef, i32 undef
|
||||
%V4I32 = select <4 x i1> undef, <4 x i32> undef, <4 x i32> undef
|
||||
%V8I32 = select <8 x i1> undef, <8 x i32> undef, <8 x i32> undef
|
||||
%V16I32 = select <16 x i1> undef, <16 x i32> undef, <16 x i32> undef
|
||||
|
||||
%I16 = select i1 undef, i16 undef, i16 undef
|
||||
%V8I16 = select <8 x i1> undef, <8 x i16> undef, <8 x i16> undef
|
||||
%V16I16 = select <16 x i1> undef, <16 x i16> undef, <16 x i16> undef
|
||||
%V32I16 = select <32 x i1> undef, <32 x i16> undef, <32 x i16> undef
|
||||
|
||||
%I8 = select i1 undef, i8 undef, i8 undef
|
||||
%V16I8 = select <16 x i1> undef, <16 x i8> undef, <16 x i8> undef
|
||||
%V32I8 = select <32 x i1> undef, <32 x i8> undef, <32 x i8> undef
|
||||
%V64I8 = select <64 x i1> undef, <64 x i8> undef, <64 x i8> undef
|
||||
|
||||
ret i32 undef
|
||||
}
|
||||
|
||||
define i32 @test_select_fp() {
|
||||
; LATE-LABEL: 'test_select_fp'
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %F64 = select i1 undef, double undef, double undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %V2F64 = select <2 x i1> undef, <2 x double> undef, <2 x double> undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %V4F64 = select <4 x i1> undef, <4 x double> undef, <4 x double> undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %V8F64 = select <8 x i1> undef, <8 x double> undef, <8 x double> undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %F32 = select i1 undef, float undef, float undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %V4F32 = select <4 x i1> undef, <4 x float> undef, <4 x float> undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %V8F32 = select <8 x i1> undef, <8 x float> undef, <8 x float> undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %V16F32 = select <16 x i1> undef, <16 x float> undef, <16 x float> undef
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
|
||||
;
|
||||
; SIZE-LABEL: 'test_select_fp'
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %F64 = select i1 undef, double undef, double undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V2F64 = select <2 x i1> undef, <2 x double> undef, <2 x double> undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4F64 = select <4 x i1> undef, <4 x double> undef, <4 x double> undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8F64 = select <8 x i1> undef, <8 x double> undef, <8 x double> undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %F32 = select i1 undef, float undef, float undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4F32 = select <4 x i1> undef, <4 x float> undef, <4 x float> undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8F32 = select <8 x i1> undef, <8 x float> undef, <8 x float> undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16F32 = select <16 x i1> undef, <16 x float> undef, <16 x float> undef
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
|
||||
;
|
||||
; SIZE_LATE-LABEL: 'test_select_fp'
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %F64 = select i1 undef, double undef, double undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V2F64 = select <2 x i1> undef, <2 x double> undef, <2 x double> undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4F64 = select <4 x i1> undef, <4 x double> undef, <4 x double> undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8F64 = select <8 x i1> undef, <8 x double> undef, <8 x double> undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %F32 = select i1 undef, float undef, float undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4F32 = select <4 x i1> undef, <4 x float> undef, <4 x float> undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8F32 = select <8 x i1> undef, <8 x float> undef, <8 x float> undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16F32 = select <16 x i1> undef, <16 x float> undef, <16 x float> undef
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
|
||||
;
|
||||
%F64 = select i1 undef, double undef, double undef
|
||||
%V2F64 = select <2 x i1> undef, <2 x double> undef, <2 x double> undef
|
||||
%V4F64 = select <4 x i1> undef, <4 x double> undef, <4 x double> undef
|
||||
%V8F64 = select <8 x i1> undef, <8 x double> undef, <8 x double> undef
|
||||
|
||||
%F32 = select i1 undef, float undef, float undef
|
||||
%V4F32 = select <4 x i1> undef, <4 x float> undef, <4 x float> undef
|
||||
%V8F32 = select <8 x i1> undef, <8 x float> undef, <8 x float> undef
|
||||
%V16F32 = select <16 x i1> undef, <16 x float> undef, <16 x float> undef
|
||||
|
||||
ret i32 undef
|
||||
}
|
||||
|
||||
; Immediate blend instructions for <2 x double> and <4 x float> added at SSE41.
|
||||
; Integers of the same size should also use those instructions.
|
||||
|
||||
define <2 x i64> @test_2i64(<2 x i64> %a, <2 x i64> %b) {
|
||||
; LATE-LABEL: 'test_2i64'
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <2 x i1> <i1 true, i1 false>, <2 x i64> %a, <2 x i64> %b
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %sel
|
||||
;
|
||||
; SIZE-LABEL: 'test_2i64'
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <2 x i1> <i1 true, i1 false>, <2 x i64> %a, <2 x i64> %b
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %sel
|
||||
;
|
||||
; SIZE_LATE-LABEL: 'test_2i64'
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <2 x i1> <i1 true, i1 false>, <2 x i64> %a, <2 x i64> %b
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %sel
|
||||
;
|
||||
%sel = select <2 x i1> <i1 true, i1 false>, <2 x i64> %a, <2 x i64> %b
|
||||
ret <2 x i64> %sel
|
||||
}
|
||||
|
||||
define <2 x double> @test_2double(<2 x double> %a, <2 x double> %b) {
|
||||
; LATE-LABEL: 'test_2double'
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %sel = select <2 x i1> <i1 true, i1 false>, <2 x double> %a, <2 x double> %b
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <2 x double> %sel
|
||||
;
|
||||
; SIZE-LABEL: 'test_2double'
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <2 x i1> <i1 true, i1 false>, <2 x double> %a, <2 x double> %b
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <2 x double> %sel
|
||||
;
|
||||
; SIZE_LATE-LABEL: 'test_2double'
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <2 x i1> <i1 true, i1 false>, <2 x double> %a, <2 x double> %b
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <2 x double> %sel
|
||||
;
|
||||
%sel = select <2 x i1> <i1 true, i1 false>, <2 x double> %a, <2 x double> %b
|
||||
ret <2 x double> %sel
|
||||
}
|
||||
|
||||
define <4 x i32> @test_4i32(<4 x i32> %a, <4 x i32> %b) {
|
||||
; LATE-LABEL: 'test_4i32'
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x i32> %a, <4 x i32> %b
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %sel
|
||||
;
|
||||
; SIZE-LABEL: 'test_4i32'
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x i32> %a, <4 x i32> %b
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %sel
|
||||
;
|
||||
; SIZE_LATE-LABEL: 'test_4i32'
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x i32> %a, <4 x i32> %b
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %sel
|
||||
;
|
||||
%sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x i32> %a, <4 x i32> %b
|
||||
ret <4 x i32> %sel
|
||||
}
|
||||
|
||||
define <4 x float> @test_4float(<4 x float> %a, <4 x float> %b) {
|
||||
; LATE-LABEL: 'test_4float'
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x float> %a, <4 x float> %b
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x float> %sel
|
||||
;
|
||||
; SIZE-LABEL: 'test_4float'
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x float> %a, <4 x float> %b
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x float> %sel
|
||||
;
|
||||
; SIZE_LATE-LABEL: 'test_4float'
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x float> %a, <4 x float> %b
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x float> %sel
|
||||
;
|
||||
%sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x float> %a, <4 x float> %b
|
||||
ret <4 x float> %sel
|
||||
}
|
||||
|
||||
define <16 x i8> @test_16i8(<16 x i8> %a, <16 x i8> %b) {
|
||||
; LATE-LABEL: 'test_16i8'
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <16 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <16 x i8> %a, <16 x i8> %b
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %sel
|
||||
;
|
||||
; SIZE-LABEL: 'test_16i8'
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <16 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <16 x i8> %a, <16 x i8> %b
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %sel
|
||||
;
|
||||
; SIZE_LATE-LABEL: 'test_16i8'
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <16 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <16 x i8> %a, <16 x i8> %b
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %sel
|
||||
;
|
||||
%sel = select <16 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <16 x i8> %a, <16 x i8> %b
|
||||
ret <16 x i8> %sel
|
||||
}
|
||||
|
||||
; Immediate blend instructions for <4 x double> and <8 x float> added at AVX.
|
||||
; Integers of the same size should also use those instructions.
|
||||
|
||||
define <4 x i64> @test_4i64(<4 x i64> %a, <4 x i64> %b) {
|
||||
; LATE-LABEL: 'test_4i64'
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 false, i1 true>, <4 x i64> %a, <4 x i64> %b
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %sel
|
||||
;
|
||||
; SIZE-LABEL: 'test_4i64'
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 false, i1 true>, <4 x i64> %a, <4 x i64> %b
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %sel
|
||||
;
|
||||
; SIZE_LATE-LABEL: 'test_4i64'
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 false, i1 true>, <4 x i64> %a, <4 x i64> %b
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %sel
|
||||
;
|
||||
%sel = select <4 x i1> <i1 true, i1 false, i1 false, i1 true>, <4 x i64> %a, <4 x i64> %b
|
||||
ret <4 x i64> %sel
|
||||
}
|
||||
|
||||
define <4 x double> @test_4double(<4 x double> %a, <4 x double> %b) {
|
||||
; LATE-LABEL: 'test_4double'
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x double> %a, <4 x double> %b
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x double> %sel
|
||||
;
|
||||
; SIZE-LABEL: 'test_4double'
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x double> %a, <4 x double> %b
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x double> %sel
|
||||
;
|
||||
; SIZE_LATE-LABEL: 'test_4double'
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x double> %a, <4 x double> %b
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x double> %sel
|
||||
;
|
||||
%sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x double> %a, <4 x double> %b
|
||||
ret <4 x double> %sel
|
||||
}
|
||||
|
||||
define <8 x i32> @test_8i32(<8 x i32> %a, <8 x i32> %b) {
|
||||
; LATE-LABEL: 'test_8i32'
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <8 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 false>, <8 x i32> %a, <8 x i32> %b
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %sel
|
||||
;
|
||||
; SIZE-LABEL: 'test_8i32'
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <8 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 false>, <8 x i32> %a, <8 x i32> %b
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %sel
|
||||
;
|
||||
; SIZE_LATE-LABEL: 'test_8i32'
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <8 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 false>, <8 x i32> %a, <8 x i32> %b
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %sel
|
||||
;
|
||||
%sel = select <8 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 false>, <8 x i32> %a, <8 x i32> %b
|
||||
ret <8 x i32> %sel
|
||||
}
|
||||
|
||||
define <8 x float> @test_8float(<8 x float> %a, <8 x float> %b) {
|
||||
; LATE-LABEL: 'test_8float'
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %sel = select <8 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <8 x float> %a, <8 x float> %b
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <8 x float> %sel
|
||||
;
|
||||
; SIZE-LABEL: 'test_8float'
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <8 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <8 x float> %a, <8 x float> %b
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <8 x float> %sel
|
||||
;
|
||||
; SIZE_LATE-LABEL: 'test_8float'
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <8 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <8 x float> %a, <8 x float> %b
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <8 x float> %sel
|
||||
;
|
||||
%sel = select <8 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <8 x float> %a, <8 x float> %b
|
||||
ret <8 x float> %sel
|
||||
}
|
||||
|
||||
define <16 x i16> @test_16i16(<16 x i16> %a, <16 x i16> %b) {
|
||||
; LATE-LABEL: 'test_16i16'
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <16 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <16 x i16> %a, <16 x i16> %b
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %sel
|
||||
;
|
||||
; SIZE-LABEL: 'test_16i16'
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <16 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <16 x i16> %a, <16 x i16> %b
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %sel
|
||||
;
|
||||
; SIZE_LATE-LABEL: 'test_16i16'
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <16 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <16 x i16> %a, <16 x i16> %b
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %sel
|
||||
;
|
||||
%sel = select <16 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <16 x i16> %a, <16 x i16> %b
|
||||
ret <16 x i16> %sel
|
||||
}
|
||||
|
||||
define <32 x i8> @test_32i8(<32 x i8> %a, <32 x i8> %b) {
|
||||
; LATE-LABEL: 'test_32i8'
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <32 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <32 x i8> %a, <32 x i8> %b
|
||||
; LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %sel
|
||||
;
|
||||
; SIZE-LABEL: 'test_32i8'
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <32 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <32 x i8> %a, <32 x i8> %b
|
||||
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %sel
|
||||
;
|
||||
; SIZE_LATE-LABEL: 'test_32i8'
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <32 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <32 x i8> %a, <32 x i8> %b
|
||||
; SIZE_LATE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %sel
|
||||
;
|
||||
%sel = select <32 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <32 x i8> %a, <32 x i8> %b
|
||||
ret <32 x i8> %sel
|
||||
}
|
||||
|
|
@ -0,0 +1,187 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency -mtriple=x86_64-- -mattr=+sse2 | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency -mtriple=x86_64-- -mattr=+sse4.1 | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency -mtriple=x86_64-- -mattr=+avx | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency -mtriple=x86_64-- -mattr=+avx2 | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency -mtriple=x86_64-- -mattr=+avx512f,+avx512vl | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency -mtriple=x86_64-- -mattr=+avx512bw,+avx512vl | FileCheck %s
|
||||
;
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency -mtriple=x86_64-- -mcpu=slm | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency -mtriple=x86_64-- -mcpu=goldmont | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency -mtriple=x86_64-- -mcpu=btver2 | FileCheck %s
|
||||
|
||||
; Verify the cost of vector select instructions.
|
||||
|
||||
define i32 @test_select() {
|
||||
; CHECK-LABEL: 'test_select'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I64 = select i1 undef, i64 undef, i64 undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V2I64 = select <2 x i1> undef, <2 x i64> undef, <2 x i64> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4I64 = select <4 x i1> undef, <4 x i64> undef, <4 x i64> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I64 = select <8 x i1> undef, <8 x i64> undef, <8 x i64> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I32 = select i1 undef, i32 undef, i32 undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4I32 = select <4 x i1> undef, <4 x i32> undef, <4 x i32> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I32 = select <8 x i1> undef, <8 x i32> undef, <8 x i32> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I32 = select <16 x i1> undef, <16 x i32> undef, <16 x i32> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I16 = select i1 undef, i16 undef, i16 undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I16 = select <8 x i1> undef, <8 x i16> undef, <8 x i16> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I16 = select <16 x i1> undef, <16 x i16> undef, <16 x i16> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V32I16 = select <32 x i1> undef, <32 x i16> undef, <32 x i16> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I8 = select i1 undef, i8 undef, i8 undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I8 = select <16 x i1> undef, <16 x i8> undef, <16 x i8> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V32I8 = select <32 x i1> undef, <32 x i8> undef, <32 x i8> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V64I8 = select <64 x i1> undef, <64 x i8> undef, <64 x i8> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
|
||||
;
|
||||
%I64 = select i1 undef, i64 undef, i64 undef
|
||||
%V2I64 = select <2 x i1> undef, <2 x i64> undef, <2 x i64> undef
|
||||
%V4I64 = select <4 x i1> undef, <4 x i64> undef, <4 x i64> undef
|
||||
%V8I64 = select <8 x i1> undef, <8 x i64> undef, <8 x i64> undef
|
||||
|
||||
%I32 = select i1 undef, i32 undef, i32 undef
|
||||
%V4I32 = select <4 x i1> undef, <4 x i32> undef, <4 x i32> undef
|
||||
%V8I32 = select <8 x i1> undef, <8 x i32> undef, <8 x i32> undef
|
||||
%V16I32 = select <16 x i1> undef, <16 x i32> undef, <16 x i32> undef
|
||||
|
||||
%I16 = select i1 undef, i16 undef, i16 undef
|
||||
%V8I16 = select <8 x i1> undef, <8 x i16> undef, <8 x i16> undef
|
||||
%V16I16 = select <16 x i1> undef, <16 x i16> undef, <16 x i16> undef
|
||||
%V32I16 = select <32 x i1> undef, <32 x i16> undef, <32 x i16> undef
|
||||
|
||||
%I8 = select i1 undef, i8 undef, i8 undef
|
||||
%V16I8 = select <16 x i1> undef, <16 x i8> undef, <16 x i8> undef
|
||||
%V32I8 = select <32 x i1> undef, <32 x i8> undef, <32 x i8> undef
|
||||
%V64I8 = select <64 x i1> undef, <64 x i8> undef, <64 x i8> undef
|
||||
|
||||
ret i32 undef
|
||||
}
|
||||
|
||||
define i32 @test_select_fp() {
|
||||
; CHECK-LABEL: 'test_select_fp'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %F64 = select i1 undef, double undef, double undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %V2F64 = select <2 x i1> undef, <2 x double> undef, <2 x double> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %V4F64 = select <4 x i1> undef, <4 x double> undef, <4 x double> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %V8F64 = select <8 x i1> undef, <8 x double> undef, <8 x double> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %F32 = select i1 undef, float undef, float undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %V4F32 = select <4 x i1> undef, <4 x float> undef, <4 x float> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %V8F32 = select <8 x i1> undef, <8 x float> undef, <8 x float> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %V16F32 = select <16 x i1> undef, <16 x float> undef, <16 x float> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
|
||||
;
|
||||
%F64 = select i1 undef, double undef, double undef
|
||||
%V2F64 = select <2 x i1> undef, <2 x double> undef, <2 x double> undef
|
||||
%V4F64 = select <4 x i1> undef, <4 x double> undef, <4 x double> undef
|
||||
%V8F64 = select <8 x i1> undef, <8 x double> undef, <8 x double> undef
|
||||
|
||||
%F32 = select i1 undef, float undef, float undef
|
||||
%V4F32 = select <4 x i1> undef, <4 x float> undef, <4 x float> undef
|
||||
%V8F32 = select <8 x i1> undef, <8 x float> undef, <8 x float> undef
|
||||
%V16F32 = select <16 x i1> undef, <16 x float> undef, <16 x float> undef
|
||||
|
||||
ret i32 undef
|
||||
}
|
||||
|
||||
; Immediate blend instructions for <2 x double> and <4 x float> added at SSE41.
|
||||
; Integers of the same size should also use those instructions.
|
||||
|
||||
define <2 x i64> @test_2i64(<2 x i64> %a, <2 x i64> %b) {
|
||||
; CHECK-LABEL: 'test_2i64'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <2 x i1> <i1 true, i1 false>, <2 x i64> %a, <2 x i64> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %sel
|
||||
;
|
||||
%sel = select <2 x i1> <i1 true, i1 false>, <2 x i64> %a, <2 x i64> %b
|
||||
ret <2 x i64> %sel
|
||||
}
|
||||
|
||||
define <2 x double> @test_2double(<2 x double> %a, <2 x double> %b) {
|
||||
; CHECK-LABEL: 'test_2double'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %sel = select <2 x i1> <i1 true, i1 false>, <2 x double> %a, <2 x double> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <2 x double> %sel
|
||||
;
|
||||
%sel = select <2 x i1> <i1 true, i1 false>, <2 x double> %a, <2 x double> %b
|
||||
ret <2 x double> %sel
|
||||
}
|
||||
|
||||
define <4 x i32> @test_4i32(<4 x i32> %a, <4 x i32> %b) {
|
||||
; CHECK-LABEL: 'test_4i32'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x i32> %a, <4 x i32> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %sel
|
||||
;
|
||||
%sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x i32> %a, <4 x i32> %b
|
||||
ret <4 x i32> %sel
|
||||
}
|
||||
|
||||
define <4 x float> @test_4float(<4 x float> %a, <4 x float> %b) {
|
||||
; CHECK-LABEL: 'test_4float'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x float> %a, <4 x float> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x float> %sel
|
||||
;
|
||||
%sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x float> %a, <4 x float> %b
|
||||
ret <4 x float> %sel
|
||||
}
|
||||
|
||||
define <16 x i8> @test_16i8(<16 x i8> %a, <16 x i8> %b) {
|
||||
; CHECK-LABEL: 'test_16i8'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <16 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <16 x i8> %a, <16 x i8> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %sel
|
||||
;
|
||||
%sel = select <16 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <16 x i8> %a, <16 x i8> %b
|
||||
ret <16 x i8> %sel
|
||||
}
|
||||
|
||||
; Immediate blend instructions for <4 x double> and <8 x float> added at AVX.
|
||||
; Integers of the same size should also use those instructions.
|
||||
|
||||
define <4 x i64> @test_4i64(<4 x i64> %a, <4 x i64> %b) {
|
||||
; CHECK-LABEL: 'test_4i64'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 false, i1 true>, <4 x i64> %a, <4 x i64> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %sel
|
||||
;
|
||||
%sel = select <4 x i1> <i1 true, i1 false, i1 false, i1 true>, <4 x i64> %a, <4 x i64> %b
|
||||
ret <4 x i64> %sel
|
||||
}
|
||||
|
||||
define <4 x double> @test_4double(<4 x double> %a, <4 x double> %b) {
|
||||
; CHECK-LABEL: 'test_4double'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x double> %a, <4 x double> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x double> %sel
|
||||
;
|
||||
%sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x double> %a, <4 x double> %b
|
||||
ret <4 x double> %sel
|
||||
}
|
||||
|
||||
define <8 x i32> @test_8i32(<8 x i32> %a, <8 x i32> %b) {
|
||||
; CHECK-LABEL: 'test_8i32'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <8 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 false>, <8 x i32> %a, <8 x i32> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %sel
|
||||
;
|
||||
%sel = select <8 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 false>, <8 x i32> %a, <8 x i32> %b
|
||||
ret <8 x i32> %sel
|
||||
}
|
||||
|
||||
define <8 x float> @test_8float(<8 x float> %a, <8 x float> %b) {
|
||||
; CHECK-LABEL: 'test_8float'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %sel = select <8 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <8 x float> %a, <8 x float> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <8 x float> %sel
|
||||
;
|
||||
%sel = select <8 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <8 x float> %a, <8 x float> %b
|
||||
ret <8 x float> %sel
|
||||
}
|
||||
|
||||
define <16 x i16> @test_16i16(<16 x i16> %a, <16 x i16> %b) {
|
||||
; CHECK-LABEL: 'test_16i16'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <16 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <16 x i16> %a, <16 x i16> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %sel
|
||||
;
|
||||
%sel = select <16 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <16 x i16> %a, <16 x i16> %b
|
||||
ret <16 x i16> %sel
|
||||
}
|
||||
|
||||
define <32 x i8> @test_32i8(<32 x i8> %a, <32 x i8> %b) {
|
||||
; CHECK-LABEL: 'test_32i8'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <32 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <32 x i8> %a, <32 x i8> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %sel
|
||||
;
|
||||
%sel = select <32 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <32 x i8> %a, <32 x i8> %b
|
||||
ret <32 x i8> %sel
|
||||
}
|
||||
|
|
@ -0,0 +1,187 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mtriple=x86_64-- -mattr=+sse2 | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mtriple=x86_64-- -mattr=+sse4.1 | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mtriple=x86_64-- -mattr=+avx | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mtriple=x86_64-- -mattr=+avx2 | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mtriple=x86_64-- -mattr=+avx512f,+avx512vl | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mtriple=x86_64-- -mattr=+avx512bw,+avx512vl | FileCheck %s
|
||||
;
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mtriple=x86_64-- -mcpu=slm | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mtriple=x86_64-- -mcpu=goldmont | FileCheck %s
|
||||
; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mtriple=x86_64-- -mcpu=btver2 | FileCheck %s
|
||||
|
||||
; Verify the cost of vector select instructions.
|
||||
|
||||
define i32 @test_select() {
|
||||
; CHECK-LABEL: 'test_select'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I64 = select i1 undef, i64 undef, i64 undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V2I64 = select <2 x i1> undef, <2 x i64> undef, <2 x i64> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4I64 = select <4 x i1> undef, <4 x i64> undef, <4 x i64> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I64 = select <8 x i1> undef, <8 x i64> undef, <8 x i64> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I32 = select i1 undef, i32 undef, i32 undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4I32 = select <4 x i1> undef, <4 x i32> undef, <4 x i32> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I32 = select <8 x i1> undef, <8 x i32> undef, <8 x i32> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I32 = select <16 x i1> undef, <16 x i32> undef, <16 x i32> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I16 = select i1 undef, i16 undef, i16 undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8I16 = select <8 x i1> undef, <8 x i16> undef, <8 x i16> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I16 = select <16 x i1> undef, <16 x i16> undef, <16 x i16> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V32I16 = select <32 x i1> undef, <32 x i16> undef, <32 x i16> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %I8 = select i1 undef, i8 undef, i8 undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16I8 = select <16 x i1> undef, <16 x i8> undef, <16 x i8> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V32I8 = select <32 x i1> undef, <32 x i8> undef, <32 x i8> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V64I8 = select <64 x i1> undef, <64 x i8> undef, <64 x i8> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
|
||||
;
|
||||
%I64 = select i1 undef, i64 undef, i64 undef
|
||||
%V2I64 = select <2 x i1> undef, <2 x i64> undef, <2 x i64> undef
|
||||
%V4I64 = select <4 x i1> undef, <4 x i64> undef, <4 x i64> undef
|
||||
%V8I64 = select <8 x i1> undef, <8 x i64> undef, <8 x i64> undef
|
||||
|
||||
%I32 = select i1 undef, i32 undef, i32 undef
|
||||
%V4I32 = select <4 x i1> undef, <4 x i32> undef, <4 x i32> undef
|
||||
%V8I32 = select <8 x i1> undef, <8 x i32> undef, <8 x i32> undef
|
||||
%V16I32 = select <16 x i1> undef, <16 x i32> undef, <16 x i32> undef
|
||||
|
||||
%I16 = select i1 undef, i16 undef, i16 undef
|
||||
%V8I16 = select <8 x i1> undef, <8 x i16> undef, <8 x i16> undef
|
||||
%V16I16 = select <16 x i1> undef, <16 x i16> undef, <16 x i16> undef
|
||||
%V32I16 = select <32 x i1> undef, <32 x i16> undef, <32 x i16> undef
|
||||
|
||||
%I8 = select i1 undef, i8 undef, i8 undef
|
||||
%V16I8 = select <16 x i1> undef, <16 x i8> undef, <16 x i8> undef
|
||||
%V32I8 = select <32 x i1> undef, <32 x i8> undef, <32 x i8> undef
|
||||
%V64I8 = select <64 x i1> undef, <64 x i8> undef, <64 x i8> undef
|
||||
|
||||
ret i32 undef
|
||||
}
|
||||
|
||||
define i32 @test_select_fp() {
|
||||
; CHECK-LABEL: 'test_select_fp'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %F64 = select i1 undef, double undef, double undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V2F64 = select <2 x i1> undef, <2 x double> undef, <2 x double> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4F64 = select <4 x i1> undef, <4 x double> undef, <4 x double> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8F64 = select <8 x i1> undef, <8 x double> undef, <8 x double> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %F32 = select i1 undef, float undef, float undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V4F32 = select <4 x i1> undef, <4 x float> undef, <4 x float> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V8F32 = select <8 x i1> undef, <8 x float> undef, <8 x float> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %V16F32 = select <16 x i1> undef, <16 x float> undef, <16 x float> undef
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
|
||||
;
|
||||
%F64 = select i1 undef, double undef, double undef
|
||||
%V2F64 = select <2 x i1> undef, <2 x double> undef, <2 x double> undef
|
||||
%V4F64 = select <4 x i1> undef, <4 x double> undef, <4 x double> undef
|
||||
%V8F64 = select <8 x i1> undef, <8 x double> undef, <8 x double> undef
|
||||
|
||||
%F32 = select i1 undef, float undef, float undef
|
||||
%V4F32 = select <4 x i1> undef, <4 x float> undef, <4 x float> undef
|
||||
%V8F32 = select <8 x i1> undef, <8 x float> undef, <8 x float> undef
|
||||
%V16F32 = select <16 x i1> undef, <16 x float> undef, <16 x float> undef
|
||||
|
||||
ret i32 undef
|
||||
}
|
||||
|
||||
; Immediate blend instructions for <2 x double> and <4 x float> added at SSE41.
|
||||
; Integers of the same size should also use those instructions.
|
||||
|
||||
define <2 x i64> @test_2i64(<2 x i64> %a, <2 x i64> %b) {
|
||||
; CHECK-LABEL: 'test_2i64'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <2 x i1> <i1 true, i1 false>, <2 x i64> %a, <2 x i64> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %sel
|
||||
;
|
||||
%sel = select <2 x i1> <i1 true, i1 false>, <2 x i64> %a, <2 x i64> %b
|
||||
ret <2 x i64> %sel
|
||||
}
|
||||
|
||||
define <2 x double> @test_2double(<2 x double> %a, <2 x double> %b) {
|
||||
; CHECK-LABEL: 'test_2double'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <2 x i1> <i1 true, i1 false>, <2 x double> %a, <2 x double> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <2 x double> %sel
|
||||
;
|
||||
%sel = select <2 x i1> <i1 true, i1 false>, <2 x double> %a, <2 x double> %b
|
||||
ret <2 x double> %sel
|
||||
}
|
||||
|
||||
define <4 x i32> @test_4i32(<4 x i32> %a, <4 x i32> %b) {
|
||||
; CHECK-LABEL: 'test_4i32'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x i32> %a, <4 x i32> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %sel
|
||||
;
|
||||
%sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x i32> %a, <4 x i32> %b
|
||||
ret <4 x i32> %sel
|
||||
}
|
||||
|
||||
define <4 x float> @test_4float(<4 x float> %a, <4 x float> %b) {
|
||||
; CHECK-LABEL: 'test_4float'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x float> %a, <4 x float> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x float> %sel
|
||||
;
|
||||
%sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x float> %a, <4 x float> %b
|
||||
ret <4 x float> %sel
|
||||
}
|
||||
|
||||
define <16 x i8> @test_16i8(<16 x i8> %a, <16 x i8> %b) {
|
||||
; CHECK-LABEL: 'test_16i8'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <16 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <16 x i8> %a, <16 x i8> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %sel
|
||||
;
|
||||
%sel = select <16 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <16 x i8> %a, <16 x i8> %b
|
||||
ret <16 x i8> %sel
|
||||
}
|
||||
|
||||
; Immediate blend instructions for <4 x double> and <8 x float> added at AVX.
|
||||
; Integers of the same size should also use those instructions.
|
||||
|
||||
define <4 x i64> @test_4i64(<4 x i64> %a, <4 x i64> %b) {
|
||||
; CHECK-LABEL: 'test_4i64'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 false, i1 true>, <4 x i64> %a, <4 x i64> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %sel
|
||||
;
|
||||
%sel = select <4 x i1> <i1 true, i1 false, i1 false, i1 true>, <4 x i64> %a, <4 x i64> %b
|
||||
ret <4 x i64> %sel
|
||||
}
|
||||
|
||||
define <4 x double> @test_4double(<4 x double> %a, <4 x double> %b) {
|
||||
; CHECK-LABEL: 'test_4double'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x double> %a, <4 x double> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <4 x double> %sel
|
||||
;
|
||||
%sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x double> %a, <4 x double> %b
|
||||
ret <4 x double> %sel
|
||||
}
|
||||
|
||||
define <8 x i32> @test_8i32(<8 x i32> %a, <8 x i32> %b) {
|
||||
; CHECK-LABEL: 'test_8i32'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <8 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 false>, <8 x i32> %a, <8 x i32> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %sel
|
||||
;
|
||||
%sel = select <8 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 false>, <8 x i32> %a, <8 x i32> %b
|
||||
ret <8 x i32> %sel
|
||||
}
|
||||
|
||||
define <8 x float> @test_8float(<8 x float> %a, <8 x float> %b) {
|
||||
; CHECK-LABEL: 'test_8float'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <8 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <8 x float> %a, <8 x float> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <8 x float> %sel
|
||||
;
|
||||
%sel = select <8 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <8 x float> %a, <8 x float> %b
|
||||
ret <8 x float> %sel
|
||||
}
|
||||
|
||||
define <16 x i16> @test_16i16(<16 x i16> %a, <16 x i16> %b) {
|
||||
; CHECK-LABEL: 'test_16i16'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <16 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <16 x i16> %a, <16 x i16> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %sel
|
||||
;
|
||||
%sel = select <16 x i1> <i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false>, <16 x i16> %a, <16 x i16> %b
|
||||
ret <16 x i16> %sel
|
||||
}
|
||||
|
||||
define <32 x i8> @test_32i8(<32 x i8> %a, <32 x i8> %b) {
|
||||
; CHECK-LABEL: 'test_32i8'
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sel = select <32 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <32 x i8> %a, <32 x i8> %b
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %sel
|
||||
;
|
||||
%sel = select <32 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true>, <32 x i8> %a, <32 x i8> %b
|
||||
ret <32 x i8> %sel
|
||||
}
|
||||
|
Loading…
Reference in New Issue