1 ; RUN: opt -mtriple=x86_64-apple-darwin -mcpu=core2 -cost-model -analyze < %s | FileCheck --check-prefix=SSE2 %s 2 3 define <2 x double> @sitofpv2i8v2double(<2 x i8> %a) { 4 ; SSE2: sitofpv2i8v2double 5 ; SSE2: cost of 20 {{.*}} sitofp 6 %1 = sitofp <2 x i8> %a to <2 x double> 7 ret <2 x double> %1 8 } 9 10 define <4 x double> @sitofpv4i8v4double(<4 x i8> %a) { 11 ; SSE2: sitofpv4i8v4double 12 ; SSE2: cost of 40 {{.*}} sitofp 13 %1 = sitofp <4 x i8> %a to <4 x double> 14 ret <4 x double> %1 15 } 16 17 define <8 x double> @sitofpv8i8v8double(<8 x i8> %a) { 18 ; SSE2: sitofpv8i8v8double 19 ; SSE2: cost of 80 {{.*}} sitofp 20 %1 = sitofp <8 x i8> %a to <8 x double> 21 ret <8 x double> %1 22 } 23 24 define <16 x double> @sitofpv16i8v16double(<16 x i8> %a) { 25 ; SSE2: sitofpv16i8v16double 26 ; SSE2: cost of 160 {{.*}} sitofp 27 %1 = sitofp <16 x i8> %a to <16 x double> 28 ret <16 x double> %1 29 } 30 31 define <32 x double> @sitofpv32i8v32double(<32 x i8> %a) { 32 ; SSE2: sitofpv32i8v32double 33 ; SSE2: cost of 320 {{.*}} sitofp 34 %1 = sitofp <32 x i8> %a to <32 x double> 35 ret <32 x double> %1 36 } 37 38 define <2 x double> @sitofpv2i16v2double(<2 x i16> %a) { 39 ; SSE2: sitofpv2i16v2double 40 ; SSE2: cost of 20 {{.*}} sitofp 41 %1 = sitofp <2 x i16> %a to <2 x double> 42 ret <2 x double> %1 43 } 44 45 define <4 x double> @sitofpv4i16v4double(<4 x i16> %a) { 46 ; SSE2: sitofpv4i16v4double 47 ; SSE2: cost of 40 {{.*}} sitofp 48 %1 = sitofp <4 x i16> %a to <4 x double> 49 ret <4 x double> %1 50 } 51 52 define <8 x double> @sitofpv8i16v8double(<8 x i16> %a) { 53 ; SSE2: sitofpv8i16v8double 54 ; SSE2: cost of 80 {{.*}} sitofp 55 %1 = sitofp <8 x i16> %a to <8 x double> 56 ret <8 x double> %1 57 } 58 59 define <16 x double> @sitofpv16i16v16double(<16 x i16> %a) { 60 ; SSE2: sitofpv16i16v16double 61 ; SSE2: cost of 160 {{.*}} sitofp 62 %1 = sitofp <16 x i16> %a to <16 x double> 63 ret <16 x double> %1 64 } 65 66 define <32 x double> @sitofpv32i16v32double(<32 x i16> %a) { 67 ; SSE2: sitofpv32i16v32double 68 ; SSE2: cost of 320 {{.*}} sitofp 69 %1 = sitofp <32 x i16> %a to <32 x double> 70 ret <32 x double> %1 71 } 72 73 define <2 x double> @sitofpv2i32v2double(<2 x i32> %a) { 74 ; SSE2: sitofpv2i32v2double 75 ; SSE2: cost of 20 {{.*}} sitofp 76 %1 = sitofp <2 x i32> %a to <2 x double> 77 ret <2 x double> %1 78 } 79 80 define <4 x double> @sitofpv4i32v4double(<4 x i32> %a) { 81 ; SSE2: sitofpv4i32v4double 82 ; SSE2: cost of 40 {{.*}} sitofp 83 %1 = sitofp <4 x i32> %a to <4 x double> 84 ret <4 x double> %1 85 } 86 87 define <8 x double> @sitofpv8i32v8double(<8 x i32> %a) { 88 ; SSE2: sitofpv8i32v8double 89 ; SSE2: cost of 80 {{.*}} sitofp 90 %1 = sitofp <8 x i32> %a to <8 x double> 91 ret <8 x double> %1 92 } 93 94 define <16 x double> @sitofpv16i32v16double(<16 x i32> %a) { 95 ; SSE2: sitofpv16i32v16double 96 ; SSE2: cost of 160 {{.*}} sitofp 97 %1 = sitofp <16 x i32> %a to <16 x double> 98 ret <16 x double> %1 99 } 100 101 define <32 x double> @sitofpv32i32v32double(<32 x i32> %a) { 102 ; SSE2: sitofpv32i32v32double 103 ; SSE2: cost of 320 {{.*}} sitofp 104 %1 = sitofp <32 x i32> %a to <32 x double> 105 ret <32 x double> %1 106 } 107 108 define <2 x double> @sitofpv2i64v2double(<2 x i64> %a) { 109 ; SSE2: sitofpv2i64v2double 110 ; SSE2: cost of 20 {{.*}} sitofp 111 %1 = sitofp <2 x i64> %a to <2 x double> 112 ret <2 x double> %1 113 } 114 115 define <4 x double> @sitofpv4i64v4double(<4 x i64> %a) { 116 ; SSE2: sitofpv4i64v4double 117 ; SSE2: cost of 40 {{.*}} sitofp 118 %1 = sitofp <4 x i64> %a to <4 x double> 119 ret <4 x double> %1 120 } 121 122 define <8 x double> @sitofpv8i64v8double(<8 x i64> %a) { 123 %1 = sitofp <8 x i64> %a to <8 x double> 124 ; SSE2: sitofpv8i64v8double 125 ; SSE2: cost of 80 {{.*}} sitofp 126 ret <8 x double> %1 127 } 128 129 define <16 x double> @sitofpv16i64v16double(<16 x i64> %a) { 130 ; SSE2: sitofpv16i64v16double 131 ; SSE2: cost of 160 {{.*}} sitofp 132 %1 = sitofp <16 x i64> %a to <16 x double> 133 ret <16 x double> %1 134 } 135 136 define <32 x double> @sitofpv32i64v32double(<32 x i64> %a) { 137 ; SSE2: sitofpv32i64v32double 138 ; SSE2: cost of 320 {{.*}} sitofp 139 %1 = sitofp <32 x i64> %a to <32 x double> 140 ret <32 x double> %1 141 } 142 143 define <2 x float> @sitofpv2i8v2float(<2 x i8> %a) { 144 ; SSE2: sitofpv2i8v2float 145 ; SSE2: cost of 15 {{.*}} sitofp 146 %1 = sitofp <2 x i8> %a to <2 x float> 147 ret <2 x float> %1 148 } 149 150 define <4 x float> @sitofpv4i8v4float(<4 x i8> %a) { 151 ; SSE2: sitofpv4i8v4float 152 ; SSE2: cost of 15 {{.*}} sitofp 153 %1 = sitofp <4 x i8> %a to <4 x float> 154 ret <4 x float> %1 155 } 156 157 define <8 x float> @sitofpv8i8v8float(<8 x i8> %a) { 158 ; SSE2: sitofpv8i8v8float 159 ; SSE2: cost of 15 {{.*}} sitofp 160 %1 = sitofp <8 x i8> %a to <8 x float> 161 ret <8 x float> %1 162 } 163 164 define <16 x float> @sitofpv16i8v16float(<16 x i8> %a) { 165 ; SSE2: sitofpv16i8v16float 166 ; SSE2: cost of 8 {{.*}} sitofp 167 %1 = sitofp <16 x i8> %a to <16 x float> 168 ret <16 x float> %1 169 } 170 171 define <32 x float> @sitofpv32i8v32float(<32 x i8> %a) { 172 ; SSE2: sitofpv32i8v32float 173 ; SSE2: cost of 16 {{.*}} sitofp 174 %1 = sitofp <32 x i8> %a to <32 x float> 175 ret <32 x float> %1 176 } 177 178 define <2 x float> @sitofpv2i16v2float(<2 x i16> %a) { 179 ; SSE2: sitofpv2i16v2float 180 ; SSE2: cost of 15 {{.*}} sitofp 181 %1 = sitofp <2 x i16> %a to <2 x float> 182 ret <2 x float> %1 183 } 184 185 define <4 x float> @sitofpv4i16v4float(<4 x i16> %a) { 186 ; SSE2: sitofpv4i16v4float 187 ; SSE2: cost of 15 {{.*}} sitofp 188 %1 = sitofp <4 x i16> %a to <4 x float> 189 ret <4 x float> %1 190 } 191 192 define <8 x float> @sitofpv8i16v8float(<8 x i16> %a) { 193 ; SSE2: sitofpv8i16v8float 194 ; SSE2: cost of 15 {{.*}} sitofp 195 %1 = sitofp <8 x i16> %a to <8 x float> 196 ret <8 x float> %1 197 } 198 199 define <16 x float> @sitofpv16i16v16float(<16 x i16> %a) { 200 ; SSE2: sitofpv16i16v16float 201 ; SSE2: cost of 30 {{.*}} sitofp 202 %1 = sitofp <16 x i16> %a to <16 x float> 203 ret <16 x float> %1 204 } 205 206 define <32 x float> @sitofpv32i16v32float(<32 x i16> %a) { 207 ; SSE2: sitofpv32i16v32float 208 ; SSE2: cost of 60 {{.*}} sitofp 209 %1 = sitofp <32 x i16> %a to <32 x float> 210 ret <32 x float> %1 211 } 212 213 define <2 x float> @sitofpv2i32v2float(<2 x i32> %a) { 214 ; SSE2: sitofpv2i32v2float 215 ; SSE2: cost of 15 {{.*}} sitofp 216 %1 = sitofp <2 x i32> %a to <2 x float> 217 ret <2 x float> %1 218 } 219 220 define <4 x float> @sitofpv4i32v4float(<4 x i32> %a) { 221 ; SSE2: sitofpv4i32v4float 222 ; SSE2: cost of 15 {{.*}} sitofp 223 %1 = sitofp <4 x i32> %a to <4 x float> 224 ret <4 x float> %1 225 } 226 227 define <8 x float> @sitofpv8i32v8float(<8 x i32> %a) { 228 ; SSE2: sitofpv8i32v8float 229 ; SSE2: cost of 30 {{.*}} sitofp 230 %1 = sitofp <8 x i32> %a to <8 x float> 231 ret <8 x float> %1 232 } 233 234 define <16 x float> @sitofpv16i32v16float(<16 x i32> %a) { 235 ; SSE2: sitofpv16i32v16float 236 ; SSE2: cost of 60 {{.*}} sitofp 237 %1 = sitofp <16 x i32> %a to <16 x float> 238 ret <16 x float> %1 239 } 240 241 define <32 x float> @sitofpv32i32v32float(<32 x i32> %a) { 242 ; SSE2: sitofpv32i32v32float 243 ; SSE2: cost of 120 {{.*}} sitofp 244 %1 = sitofp <32 x i32> %a to <32 x float> 245 ret <32 x float> %1 246 } 247 248 define <2 x float> @sitofpv2i64v2float(<2 x i64> %a) { 249 ; SSE2: sitofpv2i64v2float 250 ; SSE2: cost of 15 {{.*}} sitofp 251 %1 = sitofp <2 x i64> %a to <2 x float> 252 ret <2 x float> %1 253 } 254 255 define <4 x float> @sitofpv4i64v4float(<4 x i64> %a) { 256 ; SSE2: sitofpv4i64v4float 257 ; SSE2: cost of 30 {{.*}} sitofp 258 %1 = sitofp <4 x i64> %a to <4 x float> 259 ret <4 x float> %1 260 } 261 262 define <8 x float> @sitofpv8i64v8float(<8 x i64> %a) { 263 ; SSE2: sitofpv8i64v8float 264 ; SSE2: cost of 60 {{.*}} sitofp 265 %1 = sitofp <8 x i64> %a to <8 x float> 266 ret <8 x float> %1 267 } 268 269 define <16 x float> @sitofpv16i64v16float(<16 x i64> %a) { 270 ; SSE2: sitofpv16i64v16float 271 ; SSE2: cost of 120 {{.*}} sitofp 272 %1 = sitofp <16 x i64> %a to <16 x float> 273 ret <16 x float> %1 274 } 275 276 define <32 x float> @sitofpv32i64v32float(<32 x i64> %a) { 277 ; SSE2: sitofpv32i64v32float 278 ; SSE2: cost of 240 {{.*}} sitofp 279 %1 = sitofp <32 x i64> %a to <32 x float> 280 ret <32 x float> %1 281 } 282