1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -cost-model -analyze -mtriple=thumbv7-apple-ios6.0.0 -mcpu=swift | FileCheck %s 2*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32" 3*9880d681SAndroid Build Coastguard Workertarget triple = "thumbv7-apple-ios6.0.0" 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; CHECK: casts 6*9880d681SAndroid Build Coastguard Workerdefine void @casts() { 7*9880d681SAndroid Build Coastguard Worker ; Scalar values 8*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 9*9880d681SAndroid Build Coastguard Worker %v1 = select i1 undef, i8 undef, i8 undef 10*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 11*9880d681SAndroid Build Coastguard Worker %v2 = select i1 undef, i16 undef, i16 undef 12*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 13*9880d681SAndroid Build Coastguard Worker %v3 = select i1 undef, i32 undef, i32 undef 14*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 2 {{.*}} select 15*9880d681SAndroid Build Coastguard Worker %v4 = select i1 undef, i64 undef, i64 undef 16*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 17*9880d681SAndroid Build Coastguard Worker %v5 = select i1 undef, float undef, float undef 18*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 19*9880d681SAndroid Build Coastguard Worker %v6 = select i1 undef, double undef, double undef 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker ; Vector values 22*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 23*9880d681SAndroid Build Coastguard Worker %v7 = select <2 x i1> undef, <2 x i8> undef, <2 x i8> undef 24*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 25*9880d681SAndroid Build Coastguard Worker %v8 = select <4 x i1> undef, <4 x i8> undef, <4 x i8> undef 26*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 27*9880d681SAndroid Build Coastguard Worker %v9 = select <8 x i1> undef, <8 x i8> undef, <8 x i8> undef 28*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 29*9880d681SAndroid Build Coastguard Worker %v10 = select <16 x i1> undef, <16 x i8> undef, <16 x i8> undef 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 32*9880d681SAndroid Build Coastguard Worker %v11 = select <2 x i1> undef, <2 x i16> undef, <2 x i16> undef 33*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 34*9880d681SAndroid Build Coastguard Worker %v12 = select <4 x i1> undef, <4 x i16> undef, <4 x i16> undef 35*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 36*9880d681SAndroid Build Coastguard Worker %v13 = select <8 x i1> undef, <8 x i16> undef, <8 x i16> undef 37*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 2 {{.*}} select 38*9880d681SAndroid Build Coastguard Worker %v13b = select <16 x i1> undef, <16 x i16> undef, <16 x i16> undef 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 41*9880d681SAndroid Build Coastguard Worker %v14 = select <2 x i1> undef, <2 x i32> undef, <2 x i32> undef 42*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 43*9880d681SAndroid Build Coastguard Worker %v15 = select <4 x i1> undef, <4 x i32> undef, <4 x i32> undef 44*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 2 {{.*}} select 45*9880d681SAndroid Build Coastguard Worker %v15b = select <8 x i1> undef, <8 x i32> undef, <8 x i32> undef 46*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 4 {{.*}} select 47*9880d681SAndroid Build Coastguard Worker %v15c = select <16 x i1> undef, <16 x i32> undef, <16 x i32> undef 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 50*9880d681SAndroid Build Coastguard Worker %v16 = select <2 x i1> undef, <2 x i64> undef, <2 x i64> undef 51*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 19 {{.*}} select 52*9880d681SAndroid Build Coastguard Worker %v16a = select <4 x i1> undef, <4 x i64> undef, <4 x i64> undef 53*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 50 {{.*}} select 54*9880d681SAndroid Build Coastguard Worker %v16b = select <8 x i1> undef, <8 x i64> undef, <8 x i64> undef 55*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 100 {{.*}} select 56*9880d681SAndroid Build Coastguard Worker %v16c = select <16 x i1> undef, <16 x i64> undef, <16 x i64> undef 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 59*9880d681SAndroid Build Coastguard Worker %v17 = select <2 x i1> undef, <2 x float> undef, <2 x float> undef 60*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 61*9880d681SAndroid Build Coastguard Worker %v18 = select <4 x i1> undef, <4 x float> undef, <4 x float> undef 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 64*9880d681SAndroid Build Coastguard Worker %v19 = select <2 x i1> undef, <2 x double> undef, <2 x double> undef 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker ; odd vectors get legalized and should have similar costs 67*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 68*9880d681SAndroid Build Coastguard Worker %v20 = select <1 x i1> undef, <1 x i32> undef, <1 x i32> undef 69*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 1 {{.*}} select 70*9880d681SAndroid Build Coastguard Worker %v21 = select <3 x i1> undef, <3 x float> undef, <3 x float> undef 71*9880d681SAndroid Build Coastguard Worker ; CHECK: cost of 4 {{.*}} select 72*9880d681SAndroid Build Coastguard Worker %v22 = select <5 x i1> undef, <5 x double> undef, <5 x double> undef 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Worker ret void 75*9880d681SAndroid Build Coastguard Worker} 76