[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:
Simon Pilgrim 2022-08-19 10:28:04 +01:00
parent 19cbe4e365
commit 0de2c3d7e4
4 changed files with 561 additions and 352 deletions

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}