1; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -mtriple=systemz-unknown -mcpu=zEC12 | FileCheck %s 2; 3; Check the cost values for older subtargets that use an IPM sequence for 4; extension of a compare result. 5 6define i8 @fun0(i8 %val1, i8 %val2) { 7 %cmp = icmp eq i8 %val1, %val2 8 %v = sext i1 %cmp to i8 9 ret i8 %v 10 11; CHECK: fun0 12; CHECK: cost of 3 for instruction: %cmp = icmp eq i8 %val1, %val2 13; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i8 14} 15 16define i16 @fun1(i8 %val1, i8 %val2) { 17 %cmp = icmp eq i8 %val1, %val2 18 %v = sext i1 %cmp to i16 19 ret i16 %v 20 21; CHECK: fun1 22; CHECK: cost of 3 for instruction: %cmp = icmp eq i8 %val1, %val2 23; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i16 24} 25 26define i32 @fun2(i8 %val1, i8 %val2) { 27 %cmp = icmp eq i8 %val1, %val2 28 %v = sext i1 %cmp to i32 29 ret i32 %v 30 31; CHECK: fun2 32; CHECK: cost of 3 for instruction: %cmp = icmp eq i8 %val1, %val2 33; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i32 34} 35 36define i64 @fun3(i8 %val1, i8 %val2) { 37 %cmp = icmp eq i8 %val1, %val2 38 %v = sext i1 %cmp to i64 39 ret i64 %v 40 41; CHECK: fun3 42; CHECK: cost of 3 for instruction: %cmp = icmp eq i8 %val1, %val2 43; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i64 44} 45 46define i8 @fun4(i16 %val1, i16 %val2) { 47 %cmp = icmp eq i16 %val1, %val2 48 %v = sext i1 %cmp to i8 49 ret i8 %v 50 51; CHECK: fun4 52; CHECK: cost of 3 for instruction: %cmp = icmp eq i16 %val1, %val2 53; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i8 54} 55 56define i16 @fun5(i16 %val1, i16 %val2) { 57 %cmp = icmp eq i16 %val1, %val2 58 %v = sext i1 %cmp to i16 59 ret i16 %v 60 61; CHECK: fun5 62; CHECK: cost of 3 for instruction: %cmp = icmp eq i16 %val1, %val2 63; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i16 64} 65 66define i32 @fun6(i16 %val1, i16 %val2) { 67 %cmp = icmp eq i16 %val1, %val2 68 %v = sext i1 %cmp to i32 69 ret i32 %v 70 71; CHECK: fun6 72; CHECK: cost of 3 for instruction: %cmp = icmp eq i16 %val1, %val2 73; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i32 74} 75 76define i64 @fun7(i16 %val1, i16 %val2) { 77 %cmp = icmp eq i16 %val1, %val2 78 %v = sext i1 %cmp to i64 79 ret i64 %v 80 81; CHECK: fun7 82; CHECK: cost of 3 for instruction: %cmp = icmp eq i16 %val1, %val2 83; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i64 84} 85 86define i8 @fun8(i32 %val1, i32 %val2) { 87 %cmp = icmp eq i32 %val1, %val2 88 %v = sext i1 %cmp to i8 89 ret i8 %v 90 91; CHECK: fun8 92; CHECK: cost of 1 for instruction: %cmp = icmp eq i32 %val1, %val2 93; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i8 94} 95 96define i16 @fun9(i32 %val1, i32 %val2) { 97 %cmp = icmp eq i32 %val1, %val2 98 %v = sext i1 %cmp to i16 99 ret i16 %v 100 101; CHECK: fun9 102; CHECK: cost of 1 for instruction: %cmp = icmp eq i32 %val1, %val2 103; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i16 104} 105 106define i32 @fun10(i32 %val1, i32 %val2) { 107 %cmp = icmp eq i32 %val1, %val2 108 %v = sext i1 %cmp to i32 109 ret i32 %v 110 111; CHECK: fun10 112; CHECK: cost of 1 for instruction: %cmp = icmp eq i32 %val1, %val2 113; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i32 114} 115 116define i64 @fun11(i32 %val1, i32 %val2) { 117 %cmp = icmp eq i32 %val1, %val2 118 %v = sext i1 %cmp to i64 119 ret i64 %v 120 121; CHECK: fun11 122; CHECK: cost of 1 for instruction: %cmp = icmp eq i32 %val1, %val2 123; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i64 124} 125 126define i8 @fun12(i64 %val1, i64 %val2) { 127 %cmp = icmp eq i64 %val1, %val2 128 %v = sext i1 %cmp to i8 129 ret i8 %v 130 131; CHECK: fun12 132; CHECK: cost of 1 for instruction: %cmp = icmp eq i64 %val1, %val2 133; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i8 134} 135 136define i16 @fun13(i64 %val1, i64 %val2) { 137 %cmp = icmp eq i64 %val1, %val2 138 %v = sext i1 %cmp to i16 139 ret i16 %v 140 141; CHECK: fun13 142; CHECK: cost of 1 for instruction: %cmp = icmp eq i64 %val1, %val2 143; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i16 144} 145 146define i32 @fun14(i64 %val1, i64 %val2) { 147 %cmp = icmp eq i64 %val1, %val2 148 %v = sext i1 %cmp to i32 149 ret i32 %v 150 151; CHECK: fun14 152; CHECK: cost of 1 for instruction: %cmp = icmp eq i64 %val1, %val2 153; CHECK: cost of 3 for instruction: %v = sext i1 %cmp to i32 154} 155 156define i64 @fun15(i64 %val1, i64 %val2) { 157 %cmp = icmp eq i64 %val1, %val2 158 %v = sext i1 %cmp to i64 159 ret i64 %v 160 161; CHECK: fun15 162; CHECK: cost of 1 for instruction: %cmp = icmp eq i64 %val1, %val2 163; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i64 164} 165 166define i8 @fun16(float %val1, float %val2) { 167 %cmp = fcmp ogt float %val1, %val2 168 %v = sext i1 %cmp to i8 169 ret i8 %v 170 171; CHECK: fun16 172; CHECK: cost of 1 for instruction: %cmp = fcmp ogt float %val1, %val2 173; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i8 174} 175 176define i16 @fun17(float %val1, float %val2) { 177 %cmp = fcmp ogt float %val1, %val2 178 %v = sext i1 %cmp to i16 179 ret i16 %v 180 181; CHECK: fun17 182; CHECK: cost of 1 for instruction: %cmp = fcmp ogt float %val1, %val2 183; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i16 184} 185 186define i32 @fun18(float %val1, float %val2) { 187 %cmp = fcmp ogt float %val1, %val2 188 %v = sext i1 %cmp to i32 189 ret i32 %v 190 191; CHECK: fun18 192; CHECK: cost of 1 for instruction: %cmp = fcmp ogt float %val1, %val2 193; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i32 194} 195 196define i64 @fun19(float %val1, float %val2) { 197 %cmp = fcmp ogt float %val1, %val2 198 %v = sext i1 %cmp to i64 199 ret i64 %v 200 201; CHECK: fun19 202; CHECK: cost of 1 for instruction: %cmp = fcmp ogt float %val1, %val2 203; CHECK: cost of 5 for instruction: %v = sext i1 %cmp to i64 204} 205 206define i8 @fun20(double %val1, double %val2) { 207 %cmp = fcmp ogt double %val1, %val2 208 %v = sext i1 %cmp to i8 209 ret i8 %v 210 211; CHECK: fun20 212; CHECK: cost of 1 for instruction: %cmp = fcmp ogt double %val1, %val2 213; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i8 214} 215 216define i16 @fun21(double %val1, double %val2) { 217 %cmp = fcmp ogt double %val1, %val2 218 %v = sext i1 %cmp to i16 219 ret i16 %v 220 221; CHECK: fun21 222; CHECK: cost of 1 for instruction: %cmp = fcmp ogt double %val1, %val2 223; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i16 224} 225 226define i32 @fun22(double %val1, double %val2) { 227 %cmp = fcmp ogt double %val1, %val2 228 %v = sext i1 %cmp to i32 229 ret i32 %v 230 231; CHECK: fun22 232; CHECK: cost of 1 for instruction: %cmp = fcmp ogt double %val1, %val2 233; CHECK: cost of 4 for instruction: %v = sext i1 %cmp to i32 234} 235 236define i64 @fun23(double %val1, double %val2) { 237 %cmp = fcmp ogt double %val1, %val2 238 %v = sext i1 %cmp to i64 239 ret i64 %v 240 241; CHECK: fun23 242; CHECK: cost of 1 for instruction: %cmp = fcmp ogt double %val1, %val2 243; CHECK: cost of 5 for instruction: %v = sext i1 %cmp to i64 244} 245 246define i8 @fun120(i8 %val1, i8 %val2) { 247 %cmp = icmp eq i8 %val1, %val2 248 %v = zext i1 %cmp to i8 249 ret i8 %v 250 251; CHECK: fun120 252; CHECK: cost of 3 for instruction: %cmp = icmp eq i8 %val1, %val2 253; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i8 254} 255 256define i16 @fun121(i8 %val1, i8 %val2) { 257 %cmp = icmp eq i8 %val1, %val2 258 %v = zext i1 %cmp to i16 259 ret i16 %v 260 261; CHECK: fun121 262; CHECK: cost of 3 for instruction: %cmp = icmp eq i8 %val1, %val2 263; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i16 264} 265 266define i32 @fun122(i8 %val1, i8 %val2) { 267 %cmp = icmp eq i8 %val1, %val2 268 %v = zext i1 %cmp to i32 269 ret i32 %v 270 271; CHECK: fun122 272; CHECK: cost of 3 for instruction: %cmp = icmp eq i8 %val1, %val2 273; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i32 274} 275 276define i64 @fun123(i8 %val1, i8 %val2) { 277 %cmp = icmp eq i8 %val1, %val2 278 %v = zext i1 %cmp to i64 279 ret i64 %v 280 281; CHECK: fun123 282; CHECK: cost of 3 for instruction: %cmp = icmp eq i8 %val1, %val2 283; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i64 284} 285 286define i8 @fun124(i16 %val1, i16 %val2) { 287 %cmp = icmp eq i16 %val1, %val2 288 %v = zext i1 %cmp to i8 289 ret i8 %v 290 291; CHECK: fun124 292; CHECK: cost of 3 for instruction: %cmp = icmp eq i16 %val1, %val2 293; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i8 294} 295 296define i16 @fun125(i16 %val1, i16 %val2) { 297 %cmp = icmp eq i16 %val1, %val2 298 %v = zext i1 %cmp to i16 299 ret i16 %v 300 301; CHECK: fun125 302; CHECK: cost of 3 for instruction: %cmp = icmp eq i16 %val1, %val2 303; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i16 304} 305 306define i32 @fun126(i16 %val1, i16 %val2) { 307 %cmp = icmp eq i16 %val1, %val2 308 %v = zext i1 %cmp to i32 309 ret i32 %v 310 311; CHECK: fun126 312; CHECK: cost of 3 for instruction: %cmp = icmp eq i16 %val1, %val2 313; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i32 314} 315 316define i64 @fun127(i16 %val1, i16 %val2) { 317 %cmp = icmp eq i16 %val1, %val2 318 %v = zext i1 %cmp to i64 319 ret i64 %v 320 321; CHECK: fun127 322; CHECK: cost of 3 for instruction: %cmp = icmp eq i16 %val1, %val2 323; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i64 324} 325 326define i8 @fun128(i32 %val1, i32 %val2) { 327 %cmp = icmp eq i32 %val1, %val2 328 %v = zext i1 %cmp to i8 329 ret i8 %v 330 331; CHECK: fun128 332; CHECK: cost of 1 for instruction: %cmp = icmp eq i32 %val1, %val2 333; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i8 334} 335 336define i16 @fun129(i32 %val1, i32 %val2) { 337 %cmp = icmp eq i32 %val1, %val2 338 %v = zext i1 %cmp to i16 339 ret i16 %v 340 341; CHECK: fun129 342; CHECK: cost of 1 for instruction: %cmp = icmp eq i32 %val1, %val2 343; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i16 344} 345 346define i32 @fun130(i32 %val1, i32 %val2) { 347 %cmp = icmp eq i32 %val1, %val2 348 %v = zext i1 %cmp to i32 349 ret i32 %v 350 351; CHECK: fun130 352; CHECK: cost of 1 for instruction: %cmp = icmp eq i32 %val1, %val2 353; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i32 354} 355 356define i64 @fun131(i32 %val1, i32 %val2) { 357 %cmp = icmp eq i32 %val1, %val2 358 %v = zext i1 %cmp to i64 359 ret i64 %v 360 361; CHECK: fun131 362; CHECK: cost of 1 for instruction: %cmp = icmp eq i32 %val1, %val2 363; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i64 364} 365 366define i8 @fun132(i64 %val1, i64 %val2) { 367 %cmp = icmp eq i64 %val1, %val2 368 %v = zext i1 %cmp to i8 369 ret i8 %v 370 371; CHECK: fun132 372; CHECK: cost of 1 for instruction: %cmp = icmp eq i64 %val1, %val2 373; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i8 374} 375 376define i16 @fun133(i64 %val1, i64 %val2) { 377 %cmp = icmp eq i64 %val1, %val2 378 %v = zext i1 %cmp to i16 379 ret i16 %v 380 381; CHECK: fun133 382; CHECK: cost of 1 for instruction: %cmp = icmp eq i64 %val1, %val2 383; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i16 384} 385 386define i32 @fun134(i64 %val1, i64 %val2) { 387 %cmp = icmp eq i64 %val1, %val2 388 %v = zext i1 %cmp to i32 389 ret i32 %v 390 391; CHECK: fun134 392; CHECK: cost of 1 for instruction: %cmp = icmp eq i64 %val1, %val2 393; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i32 394} 395 396define i64 @fun135(i64 %val1, i64 %val2) { 397 %cmp = icmp eq i64 %val1, %val2 398 %v = zext i1 %cmp to i64 399 ret i64 %v 400 401; CHECK: fun135 402; CHECK: cost of 1 for instruction: %cmp = icmp eq i64 %val1, %val2 403; CHECK: cost of 3 for instruction: %v = zext i1 %cmp to i64 404} 405 406define i8 @fun136(float %val1, float %val2) { 407 %cmp = fcmp ogt float %val1, %val2 408 %v = zext i1 %cmp to i8 409 ret i8 %v 410 411; CHECK: fun136 412; CHECK: cost of 1 for instruction: %cmp = fcmp ogt float %val1, %val2 413; CHECK: cost of 4 for instruction: %v = zext i1 %cmp to i8 414} 415 416define i16 @fun137(float %val1, float %val2) { 417 %cmp = fcmp ogt float %val1, %val2 418 %v = zext i1 %cmp to i16 419 ret i16 %v 420 421; CHECK: fun137 422; CHECK: cost of 1 for instruction: %cmp = fcmp ogt float %val1, %val2 423; CHECK: cost of 4 for instruction: %v = zext i1 %cmp to i16 424} 425 426define i32 @fun138(float %val1, float %val2) { 427 %cmp = fcmp ogt float %val1, %val2 428 %v = zext i1 %cmp to i32 429 ret i32 %v 430 431; CHECK: fun138 432; CHECK: cost of 1 for instruction: %cmp = fcmp ogt float %val1, %val2 433; CHECK: cost of 4 for instruction: %v = zext i1 %cmp to i32 434} 435 436define i64 @fun139(float %val1, float %val2) { 437 %cmp = fcmp ogt float %val1, %val2 438 %v = zext i1 %cmp to i64 439 ret i64 %v 440 441; CHECK: fun139 442; CHECK: cost of 1 for instruction: %cmp = fcmp ogt float %val1, %val2 443; CHECK: cost of 4 for instruction: %v = zext i1 %cmp to i64 444} 445 446define i8 @fun140(double %val1, double %val2) { 447 %cmp = fcmp ogt double %val1, %val2 448 %v = zext i1 %cmp to i8 449 ret i8 %v 450 451; CHECK: fun140 452; CHECK: cost of 1 for instruction: %cmp = fcmp ogt double %val1, %val2 453; CHECK: cost of 4 for instruction: %v = zext i1 %cmp to i8 454} 455 456define i16 @fun141(double %val1, double %val2) { 457 %cmp = fcmp ogt double %val1, %val2 458 %v = zext i1 %cmp to i16 459 ret i16 %v 460 461; CHECK: fun141 462; CHECK: cost of 1 for instruction: %cmp = fcmp ogt double %val1, %val2 463; CHECK: cost of 4 for instruction: %v = zext i1 %cmp to i16 464} 465 466define i32 @fun142(double %val1, double %val2) { 467 %cmp = fcmp ogt double %val1, %val2 468 %v = zext i1 %cmp to i32 469 ret i32 %v 470 471; CHECK: fun142 472; CHECK: cost of 1 for instruction: %cmp = fcmp ogt double %val1, %val2 473; CHECK: cost of 4 for instruction: %v = zext i1 %cmp to i32 474} 475 476define i64 @fun143(double %val1, double %val2) { 477 %cmp = fcmp ogt double %val1, %val2 478 %v = zext i1 %cmp to i64 479 ret i64 %v 480 481; CHECK: fun143 482; CHECK: cost of 1 for instruction: %cmp = fcmp ogt double %val1, %val2 483; CHECK: cost of 4 for instruction: %v = zext i1 %cmp to i64 484} 485