1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 2; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT 3 4define double @ret_fpext_f32_to_f64(float %arg0) { 5; CHECK-LABEL: define nofpclass(sub) double @ret_fpext_f32_to_f64 6; CHECK-SAME: (float [[ARG0:%.*]]) #[[ATTR0:[0-9]+]] { 7; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 8; CHECK-NEXT: ret double [[EXT]] 9; 10 %ext = fpext float %arg0 to double 11 ret double %ext 12} 13 14define <2 x double> @ret_fpext_v2f32_to_v2f64(<2 x float> %arg0) { 15; CHECK-LABEL: define nofpclass(sub) <2 x double> @ret_fpext_v2f32_to_v2f64 16; CHECK-SAME: (<2 x float> [[ARG0:%.*]]) #[[ATTR0]] { 17; CHECK-NEXT: [[EXT:%.*]] = fpext <2 x float> [[ARG0]] to <2 x double> 18; CHECK-NEXT: ret <2 x double> [[EXT]] 19; 20 %ext = fpext <2 x float> %arg0 to <2 x double> 21 ret <2 x double> %ext 22} 23 24define double @ret_fpext_f32_to_f64_nonan(float nofpclass(nan) %arg0) { 25; CHECK-LABEL: define nofpclass(nan sub) double @ret_fpext_f32_to_f64_nonan 26; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]]) #[[ATTR0]] { 27; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 28; CHECK-NEXT: ret double [[EXT]] 29; 30 %ext = fpext float %arg0 to double 31 ret double %ext 32} 33 34define <2 x double> @ret_fpext_v2f32_to_v2f64_nonan(<2 x float> nofpclass(nan) %arg0) { 35; CHECK-LABEL: define nofpclass(nan sub) <2 x double> @ret_fpext_v2f32_to_v2f64_nonan 36; CHECK-SAME: (<2 x float> nofpclass(nan) [[ARG0:%.*]]) #[[ATTR0]] { 37; CHECK-NEXT: [[EXT:%.*]] = fpext <2 x float> [[ARG0]] to <2 x double> 38; CHECK-NEXT: ret <2 x double> [[EXT]] 39; 40 %ext = fpext <2 x float> %arg0 to <2 x double> 41 ret <2 x double> %ext 42} 43 44define double @ret_fpext_f32_to_f64_noqnan(float nofpclass(qnan) %arg0) { 45; CHECK-LABEL: define nofpclass(qnan sub) double @ret_fpext_f32_to_f64_noqnan 46; CHECK-SAME: (float nofpclass(qnan) [[ARG0:%.*]]) #[[ATTR0]] { 47; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 48; CHECK-NEXT: ret double [[EXT]] 49; 50 %ext = fpext float %arg0 to double 51 ret double %ext 52} 53 54define double @ret_fpext_f32_to_f64_nosnan(float nofpclass(snan) %arg0) { 55; CHECK-LABEL: define nofpclass(snan sub) double @ret_fpext_f32_to_f64_nosnan 56; CHECK-SAME: (float nofpclass(snan) [[ARG0:%.*]]) #[[ATTR0]] { 57; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 58; CHECK-NEXT: ret double [[EXT]] 59; 60 %ext = fpext float %arg0 to double 61 ret double %ext 62} 63 64define double @ret_fpext_f32_to_f64_noinf(float nofpclass(inf) %arg0) { 65; CHECK-LABEL: define nofpclass(inf sub) double @ret_fpext_f32_to_f64_noinf 66; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR0]] { 67; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 68; CHECK-NEXT: ret double [[EXT]] 69; 70 %ext = fpext float %arg0 to double 71 ret double %ext 72} 73 74define double @ret_fpext_f32_to_f64_nopinf(float nofpclass(pinf) %arg0) { 75; CHECK-LABEL: define nofpclass(pinf sub) double @ret_fpext_f32_to_f64_nopinf 76; CHECK-SAME: (float nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR0]] { 77; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 78; CHECK-NEXT: ret double [[EXT]] 79; 80 %ext = fpext float %arg0 to double 81 ret double %ext 82} 83 84define double @ret_fpext_f32_to_f64_noninf(float nofpclass(ninf) %arg0) { 85; CHECK-LABEL: define nofpclass(ninf sub) double @ret_fpext_f32_to_f64_noninf 86; CHECK-SAME: (float nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR0]] { 87; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 88; CHECK-NEXT: ret double [[EXT]] 89; 90 %ext = fpext float %arg0 to double 91 ret double %ext 92} 93 94define double @ret_fpext_f32_to_f64_nozero(float nofpclass(zero) %arg0) { 95; CHECK-LABEL: define nofpclass(zero sub) double @ret_fpext_f32_to_f64_nozero 96; CHECK-SAME: (float nofpclass(zero) [[ARG0:%.*]]) #[[ATTR0]] { 97; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 98; CHECK-NEXT: ret double [[EXT]] 99; 100 %ext = fpext float %arg0 to double 101 ret double %ext 102} 103 104define double @ret_fpext_f32_to_f64_nopzero(float nofpclass(pzero) %arg0) { 105; CHECK-LABEL: define nofpclass(pzero sub) double @ret_fpext_f32_to_f64_nopzero 106; CHECK-SAME: (float nofpclass(pzero) [[ARG0:%.*]]) #[[ATTR0]] { 107; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 108; CHECK-NEXT: ret double [[EXT]] 109; 110 %ext = fpext float %arg0 to double 111 ret double %ext 112} 113 114define double @ret_fpext_f32_to_f64_nonzero(float nofpclass(nzero) %arg0) { 115; CHECK-LABEL: define nofpclass(nzero sub) double @ret_fpext_f32_to_f64_nonzero 116; CHECK-SAME: (float nofpclass(nzero) [[ARG0:%.*]]) #[[ATTR0]] { 117; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 118; CHECK-NEXT: ret double [[EXT]] 119; 120 %ext = fpext float %arg0 to double 121 ret double %ext 122} 123 124define double @ret_fpext_f32_to_f64_nonan_noinf(float nofpclass(nan inf) %arg0) { 125; CHECK-LABEL: define nofpclass(nan inf sub) double @ret_fpext_f32_to_f64_nonan_noinf 126; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]]) #[[ATTR0]] { 127; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 128; CHECK-NEXT: ret double [[EXT]] 129; 130 %ext = fpext float %arg0 to double 131 ret double %ext 132} 133 134define double @ret_fpext_f32_to_f64_nosub(float nofpclass(sub) %arg0) { 135; CHECK-LABEL: define nofpclass(sub) double @ret_fpext_f32_to_f64_nosub 136; CHECK-SAME: (float nofpclass(sub) [[ARG0:%.*]]) #[[ATTR0]] { 137; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 138; CHECK-NEXT: ret double [[EXT]] 139; 140 %ext = fpext float %arg0 to double 141 ret double %ext 142} 143 144define double @ret_fpext_f32_to_f64_nonorm(float nofpclass(norm) %arg0) { 145; CHECK-LABEL: define nofpclass(sub) double @ret_fpext_f32_to_f64_nonorm 146; CHECK-SAME: (float nofpclass(norm) [[ARG0:%.*]]) #[[ATTR0]] { 147; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 148; CHECK-NEXT: ret double [[EXT]] 149; 150 %ext = fpext float %arg0 to double 151 ret double %ext 152} 153 154define double @ret_fpext_f32_to_f64_negonly_zero(float nofpclass(pinf pnorm psub pzero) %arg0) { 155; CHECK-LABEL: define nofpclass(pinf pzero sub pnorm) double @ret_fpext_f32_to_f64_negonly_zero 156; CHECK-SAME: (float nofpclass(pinf pzero psub pnorm) [[ARG0:%.*]]) #[[ATTR0]] { 157; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 158; CHECK-NEXT: ret double [[EXT]] 159; 160 %ext = fpext float %arg0 to double 161 ret double %ext 162} 163 164define double @ret_fpext_f32_to_f64_negonly(float nofpclass(pinf pnorm psub) %arg0) { 165; CHECK-LABEL: define nofpclass(pinf sub pnorm) double @ret_fpext_f32_to_f64_negonly 166; CHECK-SAME: (float nofpclass(pinf psub pnorm) [[ARG0:%.*]]) #[[ATTR0]] { 167; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 168; CHECK-NEXT: ret double [[EXT]] 169; 170 %ext = fpext float %arg0 to double 171 ret double %ext 172} 173 174define double @ret_fpext_f32_to_f64_negonly_ord(float nofpclass(pinf pnorm psub pzero nan) %arg0) { 175; CHECK-LABEL: define nofpclass(nan pinf pzero sub pnorm) double @ret_fpext_f32_to_f64_negonly_ord 176; CHECK-SAME: (float nofpclass(nan pinf pzero psub pnorm) [[ARG0:%.*]]) #[[ATTR0]] { 177; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 178; CHECK-NEXT: ret double [[EXT]] 179; 180 %ext = fpext float %arg0 to double 181 ret double %ext 182} 183 184define double @ret_fpext_f32_to_f64_posonly_zero(float nofpclass(ninf nnorm nsub nzero) %arg0) { 185; CHECK-LABEL: define nofpclass(ninf nzero sub nnorm) double @ret_fpext_f32_to_f64_posonly_zero 186; CHECK-SAME: (float nofpclass(ninf nzero nsub nnorm) [[ARG0:%.*]]) #[[ATTR0]] { 187; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 188; CHECK-NEXT: ret double [[EXT]] 189; 190 %ext = fpext float %arg0 to double 191 ret double %ext 192} 193 194define double @ret_fpext_f32_to_f64_posonly(float nofpclass(ninf nnorm nsub) %arg0) { 195; CHECK-LABEL: define nofpclass(ninf sub nnorm) double @ret_fpext_f32_to_f64_posonly 196; CHECK-SAME: (float nofpclass(ninf nsub nnorm) [[ARG0:%.*]]) #[[ATTR0]] { 197; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 198; CHECK-NEXT: ret double [[EXT]] 199; 200 %ext = fpext float %arg0 to double 201 ret double %ext 202} 203 204define double @ret_fpext_f32_to_f64_posonly_nan(float nofpclass(ninf nnorm nsub nzero nan) %arg0) { 205; CHECK-LABEL: define nofpclass(nan ninf nzero sub nnorm) double @ret_fpext_f32_to_f64_posonly_nan 206; CHECK-SAME: (float nofpclass(nan ninf nzero nsub nnorm) [[ARG0:%.*]]) #[[ATTR0]] { 207; CHECK-NEXT: [[EXT:%.*]] = fpext float [[ARG0]] to double 208; CHECK-NEXT: ret double [[EXT]] 209; 210 %ext = fpext float %arg0 to double 211 ret double %ext 212} 213 214define float @ret_fpext_bf16_f32(bfloat %arg0) { 215; CHECK-LABEL: define float @ret_fpext_bf16_f32 216; CHECK-SAME: (bfloat [[ARG0:%.*]]) #[[ATTR0]] { 217; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to float 218; CHECK-NEXT: ret float [[EXT]] 219; 220 %ext = fpext bfloat %arg0 to float 221 ret float %ext 222} 223 224define <2 x float> @ret_fpext_v2bf16_v2f32(<2 x bfloat> %arg0) { 225; CHECK-LABEL: define <2 x float> @ret_fpext_v2bf16_v2f32 226; CHECK-SAME: (<2 x bfloat> [[ARG0:%.*]]) #[[ATTR0]] { 227; CHECK-NEXT: [[EXT:%.*]] = fpext <2 x bfloat> [[ARG0]] to <2 x float> 228; CHECK-NEXT: ret <2 x float> [[EXT]] 229; 230 %ext = fpext <2 x bfloat> %arg0 to <2 x float> 231 ret <2 x float> %ext 232} 233 234define float @ret_fpext_bf16_f32_nonan(bfloat nofpclass(nan) %arg0) { 235; CHECK-LABEL: define nofpclass(nan) float @ret_fpext_bf16_f32_nonan 236; CHECK-SAME: (bfloat nofpclass(nan) [[ARG0:%.*]]) #[[ATTR0]] { 237; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to float 238; CHECK-NEXT: ret float [[EXT]] 239; 240 %ext = fpext bfloat %arg0 to float 241 ret float %ext 242} 243 244define <2 x float> @ret_fpext_v2bf16_v2f32_nonan(<2 x bfloat> nofpclass(nan) %arg0) { 245; CHECK-LABEL: define nofpclass(nan) <2 x float> @ret_fpext_v2bf16_v2f32_nonan 246; CHECK-SAME: (<2 x bfloat> nofpclass(nan) [[ARG0:%.*]]) #[[ATTR0]] { 247; CHECK-NEXT: [[EXT:%.*]] = fpext <2 x bfloat> [[ARG0]] to <2 x float> 248; CHECK-NEXT: ret <2 x float> [[EXT]] 249; 250 %ext = fpext <2 x bfloat> %arg0 to <2 x float> 251 ret <2 x float> %ext 252} 253 254define float @ret_fpext_bf16_f32_noqnan(bfloat nofpclass(qnan) %arg0) { 255; CHECK-LABEL: define nofpclass(qnan) float @ret_fpext_bf16_f32_noqnan 256; CHECK-SAME: (bfloat nofpclass(qnan) [[ARG0:%.*]]) #[[ATTR0]] { 257; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to float 258; CHECK-NEXT: ret float [[EXT]] 259; 260 %ext = fpext bfloat %arg0 to float 261 ret float %ext 262} 263 264define float @ret_fpext_bf16_f32_nosnan(bfloat nofpclass(snan) %arg0) { 265; CHECK-LABEL: define nofpclass(snan) float @ret_fpext_bf16_f32_nosnan 266; CHECK-SAME: (bfloat nofpclass(snan) [[ARG0:%.*]]) #[[ATTR0]] { 267; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to float 268; CHECK-NEXT: ret float [[EXT]] 269; 270 %ext = fpext bfloat %arg0 to float 271 ret float %ext 272} 273 274define float @ret_fpext_bf16_f32_noinf(bfloat nofpclass(inf) %arg0) { 275; CHECK-LABEL: define nofpclass(inf) float @ret_fpext_bf16_f32_noinf 276; CHECK-SAME: (bfloat nofpclass(inf) [[ARG0:%.*]]) #[[ATTR0]] { 277; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to float 278; CHECK-NEXT: ret float [[EXT]] 279; 280 %ext = fpext bfloat %arg0 to float 281 ret float %ext 282} 283 284define float @ret_fpext_bf16_f32_nopinf(bfloat nofpclass(pinf) %arg0) { 285; CHECK-LABEL: define nofpclass(pinf) float @ret_fpext_bf16_f32_nopinf 286; CHECK-SAME: (bfloat nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR0]] { 287; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to float 288; CHECK-NEXT: ret float [[EXT]] 289; 290 %ext = fpext bfloat %arg0 to float 291 ret float %ext 292} 293 294define float @ret_fpext_bf16_f32_noninf(bfloat nofpclass(ninf) %arg0) { 295; CHECK-LABEL: define nofpclass(ninf) float @ret_fpext_bf16_f32_noninf 296; CHECK-SAME: (bfloat nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR0]] { 297; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to float 298; CHECK-NEXT: ret float [[EXT]] 299; 300 %ext = fpext bfloat %arg0 to float 301 ret float %ext 302} 303 304define float @ret_fpext_bf16_f32_nozero(bfloat nofpclass(zero) %arg0) { 305; CHECK-LABEL: define nofpclass(zero) float @ret_fpext_bf16_f32_nozero 306; CHECK-SAME: (bfloat nofpclass(zero) [[ARG0:%.*]]) #[[ATTR0]] { 307; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to float 308; CHECK-NEXT: ret float [[EXT]] 309; 310 %ext = fpext bfloat %arg0 to float 311 ret float %ext 312} 313 314define float @ret_fpext_bf16_f32_nopzero(bfloat nofpclass(pzero) %arg0) { 315; CHECK-LABEL: define nofpclass(pzero) float @ret_fpext_bf16_f32_nopzero 316; CHECK-SAME: (bfloat nofpclass(pzero) [[ARG0:%.*]]) #[[ATTR0]] { 317; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to float 318; CHECK-NEXT: ret float [[EXT]] 319; 320 %ext = fpext bfloat %arg0 to float 321 ret float %ext 322} 323 324define float @ret_fpext_bf16_f32_nonzero(bfloat nofpclass(nzero) %arg0) { 325; CHECK-LABEL: define nofpclass(nzero) float @ret_fpext_bf16_f32_nonzero 326; CHECK-SAME: (bfloat nofpclass(nzero) [[ARG0:%.*]]) #[[ATTR0]] { 327; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to float 328; CHECK-NEXT: ret float [[EXT]] 329; 330 %ext = fpext bfloat %arg0 to float 331 ret float %ext 332} 333 334define float @ret_fpext_bf16_f32_nonan_noinf(bfloat nofpclass(nan inf) %arg0) { 335; CHECK-LABEL: define nofpclass(nan inf) float @ret_fpext_bf16_f32_nonan_noinf 336; CHECK-SAME: (bfloat nofpclass(nan inf) [[ARG0:%.*]]) #[[ATTR0]] { 337; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to float 338; CHECK-NEXT: ret float [[EXT]] 339; 340 %ext = fpext bfloat %arg0 to float 341 ret float %ext 342} 343 344define float @ret_fpext_bf16_f32_nosub(bfloat nofpclass(sub) %arg0) { 345; CHECK-LABEL: define nofpclass(sub) float @ret_fpext_bf16_f32_nosub 346; CHECK-SAME: (bfloat nofpclass(sub) [[ARG0:%.*]]) #[[ATTR0]] { 347; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to float 348; CHECK-NEXT: ret float [[EXT]] 349; 350 %ext = fpext bfloat %arg0 to float 351 ret float %ext 352} 353 354define float @ret_fpext_bf16_f32_nonorm(bfloat nofpclass(norm) %arg0) { 355; CHECK-LABEL: define nofpclass(norm) float @ret_fpext_bf16_f32_nonorm 356; CHECK-SAME: (bfloat nofpclass(norm) [[ARG0:%.*]]) #[[ATTR0]] { 357; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to float 358; CHECK-NEXT: ret float [[EXT]] 359; 360 %ext = fpext bfloat %arg0 to float 361 ret float %ext 362} 363 364define double @ret_fpext_bf16_f64(bfloat %arg0) { 365; CHECK-LABEL: define nofpclass(sub) double @ret_fpext_bf16_f64 366; CHECK-SAME: (bfloat [[ARG0:%.*]]) #[[ATTR0]] { 367; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to double 368; CHECK-NEXT: ret double [[EXT]] 369; 370 %ext = fpext bfloat %arg0 to double 371 ret double %ext 372} 373 374define double @ret_fpext_bf16_f64_nonan(bfloat nofpclass(nan) %arg0) { 375; CHECK-LABEL: define nofpclass(nan sub) double @ret_fpext_bf16_f64_nonan 376; CHECK-SAME: (bfloat nofpclass(nan) [[ARG0:%.*]]) #[[ATTR0]] { 377; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to double 378; CHECK-NEXT: ret double [[EXT]] 379; 380 %ext = fpext bfloat %arg0 to double 381 ret double %ext 382} 383 384define double @ret_fpext_bf16_f64_noqnan(bfloat nofpclass(qnan) %arg0) { 385; CHECK-LABEL: define nofpclass(qnan sub) double @ret_fpext_bf16_f64_noqnan 386; CHECK-SAME: (bfloat nofpclass(qnan) [[ARG0:%.*]]) #[[ATTR0]] { 387; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to double 388; CHECK-NEXT: ret double [[EXT]] 389; 390 %ext = fpext bfloat %arg0 to double 391 ret double %ext 392} 393 394define double @ret_fpext_bf16_f64_nosnan(bfloat nofpclass(snan) %arg0) { 395; CHECK-LABEL: define nofpclass(snan sub) double @ret_fpext_bf16_f64_nosnan 396; CHECK-SAME: (bfloat nofpclass(snan) [[ARG0:%.*]]) #[[ATTR0]] { 397; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to double 398; CHECK-NEXT: ret double [[EXT]] 399; 400 %ext = fpext bfloat %arg0 to double 401 ret double %ext 402} 403 404define double @ret_fpext_bf16_f64_noinf(bfloat nofpclass(inf) %arg0) { 405; CHECK-LABEL: define nofpclass(inf sub) double @ret_fpext_bf16_f64_noinf 406; CHECK-SAME: (bfloat nofpclass(inf) [[ARG0:%.*]]) #[[ATTR0]] { 407; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to double 408; CHECK-NEXT: ret double [[EXT]] 409; 410 %ext = fpext bfloat %arg0 to double 411 ret double %ext 412} 413 414define double @ret_fpext_bf16_f64_nopinf(bfloat nofpclass(pinf) %arg0) { 415; CHECK-LABEL: define nofpclass(pinf sub) double @ret_fpext_bf16_f64_nopinf 416; CHECK-SAME: (bfloat nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR0]] { 417; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to double 418; CHECK-NEXT: ret double [[EXT]] 419; 420 %ext = fpext bfloat %arg0 to double 421 ret double %ext 422} 423 424define double @ret_fpext_bf16_f64_noninf(bfloat nofpclass(ninf) %arg0) { 425; CHECK-LABEL: define nofpclass(ninf sub) double @ret_fpext_bf16_f64_noninf 426; CHECK-SAME: (bfloat nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR0]] { 427; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to double 428; CHECK-NEXT: ret double [[EXT]] 429; 430 %ext = fpext bfloat %arg0 to double 431 ret double %ext 432} 433 434define double @ret_fpext_bf16_f64_nozero(bfloat nofpclass(zero) %arg0) { 435; CHECK-LABEL: define nofpclass(zero sub) double @ret_fpext_bf16_f64_nozero 436; CHECK-SAME: (bfloat nofpclass(zero) [[ARG0:%.*]]) #[[ATTR0]] { 437; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to double 438; CHECK-NEXT: ret double [[EXT]] 439; 440 %ext = fpext bfloat %arg0 to double 441 ret double %ext 442} 443 444define double @ret_fpext_bf16_f64_nopzero(bfloat nofpclass(pzero) %arg0) { 445; CHECK-LABEL: define nofpclass(pzero sub) double @ret_fpext_bf16_f64_nopzero 446; CHECK-SAME: (bfloat nofpclass(pzero) [[ARG0:%.*]]) #[[ATTR0]] { 447; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to double 448; CHECK-NEXT: ret double [[EXT]] 449; 450 %ext = fpext bfloat %arg0 to double 451 ret double %ext 452} 453 454define double @ret_fpext_bf16_f64_nonzero(bfloat nofpclass(nzero) %arg0) { 455; CHECK-LABEL: define nofpclass(nzero sub) double @ret_fpext_bf16_f64_nonzero 456; CHECK-SAME: (bfloat nofpclass(nzero) [[ARG0:%.*]]) #[[ATTR0]] { 457; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to double 458; CHECK-NEXT: ret double [[EXT]] 459; 460 %ext = fpext bfloat %arg0 to double 461 ret double %ext 462} 463 464define double @ret_fpext_bf16_f64_nonan_noinf(bfloat nofpclass(nan inf) %arg0) { 465; CHECK-LABEL: define nofpclass(nan inf sub) double @ret_fpext_bf16_f64_nonan_noinf 466; CHECK-SAME: (bfloat nofpclass(nan inf) [[ARG0:%.*]]) #[[ATTR0]] { 467; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to double 468; CHECK-NEXT: ret double [[EXT]] 469; 470 %ext = fpext bfloat %arg0 to double 471 ret double %ext 472} 473 474define double @ret_fpext_bf16_f64_nosub(bfloat nofpclass(sub) %arg0) { 475; CHECK-LABEL: define nofpclass(sub) double @ret_fpext_bf16_f64_nosub 476; CHECK-SAME: (bfloat nofpclass(sub) [[ARG0:%.*]]) #[[ATTR0]] { 477; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to double 478; CHECK-NEXT: ret double [[EXT]] 479; 480 %ext = fpext bfloat %arg0 to double 481 ret double %ext 482} 483 484define double @ret_fpext_bf16_f64_nonorm(bfloat nofpclass(norm) %arg0) { 485; CHECK-LABEL: define nofpclass(sub) double @ret_fpext_bf16_f64_nonorm 486; CHECK-SAME: (bfloat nofpclass(norm) [[ARG0:%.*]]) #[[ATTR0]] { 487; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to double 488; CHECK-NEXT: ret double [[EXT]] 489; 490 %ext = fpext bfloat %arg0 to double 491 ret double %ext 492} 493 494define double @ret_fpext_bf16_f64_nonorm_psub(bfloat nofpclass(norm psub) %arg0) { 495; CHECK-LABEL: define nofpclass(sub pnorm) double @ret_fpext_bf16_f64_nonorm_psub 496; CHECK-SAME: (bfloat nofpclass(psub norm) [[ARG0:%.*]]) #[[ATTR0]] { 497; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to double 498; CHECK-NEXT: ret double [[EXT]] 499; 500 %ext = fpext bfloat %arg0 to double 501 ret double %ext 502} 503 504define double @ret_fpext_bf16_f64_nonorm_nsub(bfloat nofpclass(norm nsub) %arg0) { 505; CHECK-LABEL: define nofpclass(sub nnorm) double @ret_fpext_bf16_f64_nonorm_nsub 506; CHECK-SAME: (bfloat nofpclass(nsub norm) [[ARG0:%.*]]) #[[ATTR0]] { 507; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to double 508; CHECK-NEXT: ret double [[EXT]] 509; 510 %ext = fpext bfloat %arg0 to double 511 ret double %ext 512} 513 514define double @ret_fpext_bf16_f64_nonorm_sub(bfloat nofpclass(norm sub) %arg0) { 515; CHECK-LABEL: define nofpclass(sub norm) double @ret_fpext_bf16_f64_nonorm_sub 516; CHECK-SAME: (bfloat nofpclass(sub norm) [[ARG0:%.*]]) #[[ATTR0]] { 517; CHECK-NEXT: [[EXT:%.*]] = fpext bfloat [[ARG0]] to double 518; CHECK-NEXT: ret double [[EXT]] 519; 520 %ext = fpext bfloat %arg0 to double 521 ret double %ext 522} 523;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: 524; TUNIT: {{.*}} 525