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 4declare float @llvm.canonicalize.f32(float) 5 6define float @ret_canonicalize(float %arg0) { 7; CHECK-LABEL: define nofpclass(snan) float @ret_canonicalize 8; CHECK-SAME: (float [[ARG0:%.*]]) #[[ATTR1:[0-9]+]] { 9; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan) float @llvm.canonicalize.f32(float [[ARG0]]) #[[ATTR12:[0-9]+]] 10; CHECK-NEXT: ret float [[CALL]] 11; 12 %call = call float @llvm.canonicalize.f32(float %arg0) 13 ret float %call 14} 15 16define float @ret_canonicalize_noinf(float nofpclass(inf) %arg0) { 17; CHECK-LABEL: define nofpclass(snan inf) float @ret_canonicalize_noinf 18; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR1]] { 19; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]] 20; CHECK-NEXT: ret float [[CALL]] 21; 22 %call = call float @llvm.canonicalize.f32(float %arg0) 23 ret float %call 24} 25 26define float @ret_canonicalize_dynamic_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="dynamic,dynamic" { 27; CHECK-LABEL: define nofpclass(snan inf) float @ret_canonicalize_dynamic_denormal 28; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR2:[0-9]+]] { 29; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]] 30; CHECK-NEXT: ret float [[CALL]] 31; 32 %call = call float @llvm.canonicalize.f32(float %arg0) 33 ret float %call 34} 35 36define float @ret_canonicalize_daz_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="dynamic,preserve-sign" { 37; CHECK-LABEL: define nofpclass(snan inf sub) float @ret_canonicalize_daz_denormal 38; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR3:[0-9]+]] { 39; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf sub) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]] 40; CHECK-NEXT: ret float [[CALL]] 41; 42 %call = call float @llvm.canonicalize.f32(float %arg0) 43 ret float %call 44} 45 46define float @ret_canonicalize_dapz_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="dynamic,positive-zero" { 47; CHECK-LABEL: define nofpclass(snan inf nzero sub) float @ret_canonicalize_dapz_denormal 48; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR4:[0-9]+]] { 49; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf nzero sub) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]] 50; CHECK-NEXT: ret float [[CALL]] 51; 52 %call = call float @llvm.canonicalize.f32(float %arg0) 53 ret float %call 54} 55 56define float @ret_canonicalize_ftpz_dapz_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="positive-zero,preserve-sign" { 57; CHECK-LABEL: define nofpclass(snan inf sub) float @ret_canonicalize_ftpz_dapz_denormal 58; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR5:[0-9]+]] { 59; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf sub) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]] 60; CHECK-NEXT: ret float [[CALL]] 61; 62 %call = call float @llvm.canonicalize.f32(float %arg0) 63 ret float %call 64} 65 66define float @ret_canonicalize_ftpz_ieee_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="positive-zero,ieee" { 67; CHECK-LABEL: define nofpclass(snan inf nzero sub) float @ret_canonicalize_ftpz_ieee_denormal 68; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR6:[0-9]+]] { 69; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf nzero sub) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]] 70; CHECK-NEXT: ret float [[CALL]] 71; 72 %call = call float @llvm.canonicalize.f32(float %arg0) 73 ret float %call 74} 75 76define float @ret_canonicalize_ftpz_dynamic_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="positive-zero,dynamic" { 77; CHECK-LABEL: define nofpclass(snan inf sub) float @ret_canonicalize_ftpz_dynamic_denormal 78; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR7:[0-9]+]] { 79; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf sub) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]] 80; CHECK-NEXT: ret float [[CALL]] 81; 82 %call = call float @llvm.canonicalize.f32(float %arg0) 83 ret float %call 84} 85 86define float @ret_canonicalize_ftz_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="preserve-sign,dynamic" { 87; CHECK-LABEL: define nofpclass(snan inf sub) float @ret_canonicalize_ftz_denormal 88; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR8:[0-9]+]] { 89; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf sub) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]] 90; CHECK-NEXT: ret float [[CALL]] 91; 92 %call = call float @llvm.canonicalize.f32(float %arg0) 93 ret float %call 94} 95 96define float @ret_canonicalize_ieee_denormal(float nofpclass(inf) %arg0) "denormal-fp-math"="ieee,ieee" { 97; CHECK-LABEL: define nofpclass(snan inf) float @ret_canonicalize_ieee_denormal 98; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR9:[0-9]+]] { 99; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan inf) float @llvm.canonicalize.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR12]] 100; CHECK-NEXT: ret float [[CALL]] 101; 102 %call = call float @llvm.canonicalize.f32(float %arg0) 103 ret float %call 104} 105 106define float @ret_canonicalize_ieee_constant_pos_denormal() "denormal-fp-math"="ieee,ieee" { 107; CHECK-LABEL: define noundef nofpclass(nan inf zero nsub norm) float @ret_canonicalize_ieee_constant_pos_denormal 108; CHECK-SAME: () #[[ATTR9]] { 109; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf zero nsub norm) float @llvm.canonicalize.f32(float noundef 0x36A0000000000000) #[[ATTR12]] 110; CHECK-NEXT: ret float [[CALL]] 111; 112 %call = call float @llvm.canonicalize.f32(float 0x36A0000000000000) 113 ret float %call 114} 115 116define float @ret_canonicalize_ieee_constant_neg_denormal() "denormal-fp-math"="ieee,ieee" { 117; CHECK-LABEL: define noundef nofpclass(nan inf zero psub norm) float @ret_canonicalize_ieee_constant_neg_denormal 118; CHECK-SAME: () #[[ATTR9]] { 119; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf zero psub norm) float @llvm.canonicalize.f32(float noundef 0xB6A0000000000000) #[[ATTR12]] 120; CHECK-NEXT: ret float [[CALL]] 121; 122 %call = call float @llvm.canonicalize.f32(float 0xb6A0000000000000) 123 ret float %call 124} 125 126define float @ret_canonicalize_ieee_constant_pos_zero() "denormal-fp-math"="ieee,ieee" { 127; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub norm) float @ret_canonicalize_ieee_constant_pos_zero 128; CHECK-SAME: () #[[ATTR9]] { 129; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0.000000e+00) #[[ATTR12]] 130; CHECK-NEXT: ret float [[CALL]] 131; 132 %call = call float @llvm.canonicalize.f32(float 0.0) 133 ret float %call 134} 135 136define float @ret_canonicalize_ieee_constant_neg_zero() "denormal-fp-math"="ieee,ieee" { 137; CHECK-LABEL: define noundef nofpclass(nan inf pzero sub norm) float @ret_canonicalize_ieee_constant_neg_zero 138; CHECK-SAME: () #[[ATTR9]] { 139; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf pzero sub norm) float @llvm.canonicalize.f32(float noundef -0.000000e+00) #[[ATTR12]] 140; CHECK-NEXT: ret float [[CALL]] 141; 142 %call = call float @llvm.canonicalize.f32(float -0.0) 143 ret float %call 144} 145 146define float @ret_canonicalize_ieee_constant_pos_normal() "denormal-fp-math"="ieee,ieee" { 147; CHECK-LABEL: define noundef nofpclass(nan inf zero sub nnorm) float @ret_canonicalize_ieee_constant_pos_normal 148; CHECK-SAME: () #[[ATTR9]] { 149; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf zero sub nnorm) float @llvm.canonicalize.f32(float noundef 8.000000e+00) #[[ATTR12]] 150; CHECK-NEXT: ret float [[CALL]] 151; 152 %call = call float @llvm.canonicalize.f32(float 8.0) 153 ret float %call 154} 155 156define float @ret_canonicalize_ieee_constant_neg_normal() "denormal-fp-math"="ieee,ieee" { 157; CHECK-LABEL: define noundef nofpclass(nan inf zero sub pnorm) float @ret_canonicalize_ieee_constant_neg_normal 158; CHECK-SAME: () #[[ATTR9]] { 159; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf zero sub pnorm) float @llvm.canonicalize.f32(float noundef -8.000000e+00) #[[ATTR12]] 160; CHECK-NEXT: ret float [[CALL]] 161; 162 %call = call float @llvm.canonicalize.f32(float -8.0) 163 ret float %call 164} 165 166define float @ret_canonicalize_ieee_constant_pos_inf() "denormal-fp-math"="ieee,ieee" { 167; CHECK-LABEL: define noundef nofpclass(nan ninf zero sub norm) float @ret_canonicalize_ieee_constant_pos_inf 168; CHECK-SAME: () #[[ATTR9]] { 169; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan ninf zero sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF0000000000000) #[[ATTR12]] 170; CHECK-NEXT: ret float [[CALL]] 171; 172 %call = call float @llvm.canonicalize.f32(float 0x7FF0000000000000) 173 ret float %call 174} 175 176define float @ret_canonicalize_ieee_constant_neg_inf() "denormal-fp-math"="ieee,ieee" { 177; CHECK-LABEL: define noundef nofpclass(nan pinf zero sub norm) float @ret_canonicalize_ieee_constant_neg_inf 178; CHECK-SAME: () #[[ATTR9]] { 179; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan pinf zero sub norm) float @llvm.canonicalize.f32(float noundef 0xFFF0000000000000) #[[ATTR12]] 180; CHECK-NEXT: ret float [[CALL]] 181; 182 %call = call float @llvm.canonicalize.f32(float 0xFFF0000000000000) 183 ret float %call 184} 185 186define float @ret_canonicalize_ieee_constant_qnan() "denormal-fp-math"="ieee,ieee" { 187; CHECK-LABEL: define noundef nofpclass(snan inf zero sub norm) float @ret_canonicalize_ieee_constant_qnan 188; CHECK-SAME: () #[[ATTR9]] { 189; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf zero sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF8000000000000) #[[ATTR12]] 190; CHECK-NEXT: ret float [[CALL]] 191; 192 %call = call float @llvm.canonicalize.f32(float 0x7FF8000000000000) 193 ret float %call 194} 195 196define float @ret_canonicalize_ieee_constant_snan() "denormal-fp-math"="ieee,ieee" { 197; CHECK-LABEL: define noundef nofpclass(snan inf zero sub norm) float @ret_canonicalize_ieee_constant_snan 198; CHECK-SAME: () #[[ATTR9]] { 199; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf zero sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF1000000000000) #[[ATTR12]] 200; CHECK-NEXT: ret float [[CALL]] 201; 202 %call = call float @llvm.canonicalize.f32(float 0x7FF1000000000000) 203 ret float %call 204} 205 206define float @ret_canonicalize_daz_constant_pos_denormal() "denormal-fp-math"="preserve-sign,preserve-sign" { 207; CHECK-LABEL: define noundef nofpclass(nan inf sub norm) float @ret_canonicalize_daz_constant_pos_denormal 208; CHECK-SAME: () #[[ATTR10:[0-9]+]] { 209; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub norm) float @llvm.canonicalize.f32(float noundef 0x36A0000000000000) #[[ATTR12]] 210; CHECK-NEXT: ret float [[CALL]] 211; 212 %call = call float @llvm.canonicalize.f32(float 0x36A0000000000000) 213 ret float %call 214} 215 216define float @ret_canonicalize_daz_constant_neg_denormal() "denormal-fp-math"="preserve-sign,preserve-sign" { 217; CHECK-LABEL: define noundef nofpclass(nan inf sub norm) float @ret_canonicalize_daz_constant_neg_denormal 218; CHECK-SAME: () #[[ATTR10]] { 219; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub norm) float @llvm.canonicalize.f32(float noundef 0xB6A0000000000000) #[[ATTR12]] 220; CHECK-NEXT: ret float [[CALL]] 221; 222 %call = call float @llvm.canonicalize.f32(float 0xb6A0000000000000) 223 ret float %call 224} 225 226define float @ret_canonicalize_daz_constant_pos_zero() "denormal-fp-math"="preserve-sign,preserve-sign" { 227; CHECK-LABEL: define noundef nofpclass(nan inf sub norm) float @ret_canonicalize_daz_constant_pos_zero 228; CHECK-SAME: () #[[ATTR10]] { 229; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub norm) float @llvm.canonicalize.f32(float noundef 0.000000e+00) #[[ATTR12]] 230; CHECK-NEXT: ret float [[CALL]] 231; 232 %call = call float @llvm.canonicalize.f32(float 0.0) 233 ret float %call 234} 235 236define float @ret_canonicalize_daz_constant_neg_zero() "denormal-fp-math"="preserve-sign,preserve-sign" { 237; CHECK-LABEL: define noundef nofpclass(nan inf sub norm) float @ret_canonicalize_daz_constant_neg_zero 238; CHECK-SAME: () #[[ATTR10]] { 239; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub norm) float @llvm.canonicalize.f32(float noundef -0.000000e+00) #[[ATTR12]] 240; CHECK-NEXT: ret float [[CALL]] 241; 242 %call = call float @llvm.canonicalize.f32(float -0.0) 243 ret float %call 244} 245 246define float @ret_canonicalize_daz_constant_pos_normal() "denormal-fp-math"="preserve-sign,preserve-sign" { 247; CHECK-LABEL: define noundef nofpclass(nan inf sub nnorm) float @ret_canonicalize_daz_constant_pos_normal 248; CHECK-SAME: () #[[ATTR10]] { 249; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub nnorm) float @llvm.canonicalize.f32(float noundef 8.000000e+00) #[[ATTR12]] 250; CHECK-NEXT: ret float [[CALL]] 251; 252 %call = call float @llvm.canonicalize.f32(float 8.0) 253 ret float %call 254} 255 256define float @ret_canonicalize_daz_constant_neg_normal() "denormal-fp-math"="preserve-sign,preserve-sign" { 257; CHECK-LABEL: define noundef nofpclass(nan inf sub pnorm) float @ret_canonicalize_daz_constant_neg_normal 258; CHECK-SAME: () #[[ATTR10]] { 259; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub pnorm) float @llvm.canonicalize.f32(float noundef -8.000000e+00) #[[ATTR12]] 260; CHECK-NEXT: ret float [[CALL]] 261; 262 %call = call float @llvm.canonicalize.f32(float -8.0) 263 ret float %call 264} 265 266define float @ret_canonicalize_daz_constant_pos_inf() "denormal-fp-math"="preserve-sign,preserve-sign" { 267; CHECK-LABEL: define noundef nofpclass(nan ninf sub norm) float @ret_canonicalize_daz_constant_pos_inf 268; CHECK-SAME: () #[[ATTR10]] { 269; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan ninf sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF0000000000000) #[[ATTR12]] 270; CHECK-NEXT: ret float [[CALL]] 271; 272 %call = call float @llvm.canonicalize.f32(float 0x7FF0000000000000) 273 ret float %call 274} 275 276define float @ret_canonicalize_daz_constant_neg_inf() "denormal-fp-math"="preserve-sign,preserve-sign" { 277; CHECK-LABEL: define noundef nofpclass(nan pinf sub norm) float @ret_canonicalize_daz_constant_neg_inf 278; CHECK-SAME: () #[[ATTR10]] { 279; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan pinf sub norm) float @llvm.canonicalize.f32(float noundef 0xFFF0000000000000) #[[ATTR12]] 280; CHECK-NEXT: ret float [[CALL]] 281; 282 %call = call float @llvm.canonicalize.f32(float 0xFFF0000000000000) 283 ret float %call 284} 285 286define float @ret_canonicalize_daz_constant_qnan() "denormal-fp-math"="preserve-sign,preserve-sign" { 287; CHECK-LABEL: define noundef nofpclass(snan inf sub norm) float @ret_canonicalize_daz_constant_qnan 288; CHECK-SAME: () #[[ATTR10]] { 289; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF8000000000000) #[[ATTR12]] 290; CHECK-NEXT: ret float [[CALL]] 291; 292 %call = call float @llvm.canonicalize.f32(float 0x7FF8000000000000) 293 ret float %call 294} 295 296define float @ret_canonicalize_daz_constant_snan() "denormal-fp-math"="preserve-sign,preserve-sign" { 297; CHECK-LABEL: define noundef nofpclass(snan inf sub norm) float @ret_canonicalize_daz_constant_snan 298; CHECK-SAME: () #[[ATTR10]] { 299; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF1000000000000) #[[ATTR12]] 300; CHECK-NEXT: ret float [[CALL]] 301; 302 %call = call float @llvm.canonicalize.f32(float 0x7FF1000000000000) 303 ret float %call 304} 305 306define float @ret_canonicalize_dapz_constant_pos_denormal() "denormal-fp-math"="positive-zero,positive-zero" { 307; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub norm) float @ret_canonicalize_dapz_constant_pos_denormal 308; CHECK-SAME: () #[[ATTR11:[0-9]+]] { 309; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0x36A0000000000000) #[[ATTR12]] 310; CHECK-NEXT: ret float [[CALL]] 311; 312 %call = call float @llvm.canonicalize.f32(float 0x36A0000000000000) 313 ret float %call 314} 315 316define float @ret_canonicalize_dapz_constant_neg_denormal() "denormal-fp-math"="positive-zero,positive-zero" { 317; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub norm) float @ret_canonicalize_dapz_constant_neg_denormal 318; CHECK-SAME: () #[[ATTR11]] { 319; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0xB6A0000000000000) #[[ATTR12]] 320; CHECK-NEXT: ret float [[CALL]] 321; 322 %call = call float @llvm.canonicalize.f32(float 0xb6A0000000000000) 323 ret float %call 324} 325 326define float @ret_canonicalize_dapz_constant_pos_zero() "denormal-fp-math"="positive-zero,positive-zero" { 327; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub norm) float @ret_canonicalize_dapz_constant_pos_zero 328; CHECK-SAME: () #[[ATTR11]] { 329; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0.000000e+00) #[[ATTR12]] 330; CHECK-NEXT: ret float [[CALL]] 331; 332 %call = call float @llvm.canonicalize.f32(float 0.0) 333 ret float %call 334} 335 336define float @ret_canonicalize_dapz_constant_neg_zero() "denormal-fp-math"="positive-zero,positive-zero" { 337; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub norm) float @ret_canonicalize_dapz_constant_neg_zero 338; CHECK-SAME: () #[[ATTR11]] { 339; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef -0.000000e+00) #[[ATTR12]] 340; CHECK-NEXT: ret float [[CALL]] 341; 342 %call = call float @llvm.canonicalize.f32(float -0.0) 343 ret float %call 344} 345 346define float @ret_canonicalize_dapz_constant_pos_normal() "denormal-fp-math"="positive-zero,positive-zero" { 347; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub nnorm) float @ret_canonicalize_dapz_constant_pos_normal 348; CHECK-SAME: () #[[ATTR11]] { 349; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub nnorm) float @llvm.canonicalize.f32(float noundef 8.000000e+00) #[[ATTR12]] 350; CHECK-NEXT: ret float [[CALL]] 351; 352 %call = call float @llvm.canonicalize.f32(float 8.0) 353 ret float %call 354} 355 356define float @ret_canonicalize_dapz_constant_neg_normal() "denormal-fp-math"="positive-zero,positive-zero" { 357; CHECK-LABEL: define noundef nofpclass(nan inf nzero sub pnorm) float @ret_canonicalize_dapz_constant_neg_normal 358; CHECK-SAME: () #[[ATTR11]] { 359; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nzero sub pnorm) float @llvm.canonicalize.f32(float noundef -8.000000e+00) #[[ATTR12]] 360; CHECK-NEXT: ret float [[CALL]] 361; 362 %call = call float @llvm.canonicalize.f32(float -8.0) 363 ret float %call 364} 365 366define float @ret_canonicalize_dapz_constant_pos_inf() "denormal-fp-math"="positive-zero,positive-zero" { 367; CHECK-LABEL: define noundef nofpclass(nan ninf nzero sub norm) float @ret_canonicalize_dapz_constant_pos_inf 368; CHECK-SAME: () #[[ATTR11]] { 369; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan ninf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF0000000000000) #[[ATTR12]] 370; CHECK-NEXT: ret float [[CALL]] 371; 372 %call = call float @llvm.canonicalize.f32(float 0x7FF0000000000000) 373 ret float %call 374} 375 376define float @ret_canonicalize_dapz_constant_neg_inf() "denormal-fp-math"="positive-zero,positive-zero" { 377; CHECK-LABEL: define noundef nofpclass(nan pinf nzero sub norm) float @ret_canonicalize_dapz_constant_neg_inf 378; CHECK-SAME: () #[[ATTR11]] { 379; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan pinf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0xFFF0000000000000) #[[ATTR12]] 380; CHECK-NEXT: ret float [[CALL]] 381; 382 %call = call float @llvm.canonicalize.f32(float 0xFFF0000000000000) 383 ret float %call 384} 385 386define float @ret_canonicalize_dapz_constant_qnan() "denormal-fp-math"="positive-zero,positive-zero" { 387; CHECK-LABEL: define noundef nofpclass(snan inf nzero sub norm) float @ret_canonicalize_dapz_constant_qnan 388; CHECK-SAME: () #[[ATTR11]] { 389; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF8000000000000) #[[ATTR12]] 390; CHECK-NEXT: ret float [[CALL]] 391; 392 %call = call float @llvm.canonicalize.f32(float 0x7FF8000000000000) 393 ret float %call 394} 395 396define float @ret_canonicalize_dapz_constant_snan() "denormal-fp-math"="positive-zero,positive-zero" { 397; CHECK-LABEL: define noundef nofpclass(snan inf nzero sub norm) float @ret_canonicalize_dapz_constant_snan 398; CHECK-SAME: () #[[ATTR11]] { 399; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf nzero sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF1000000000000) #[[ATTR12]] 400; CHECK-NEXT: ret float [[CALL]] 401; 402 %call = call float @llvm.canonicalize.f32(float 0x7FF1000000000000) 403 ret float %call 404} 405 406define float @ret_canonicalize_dynamic_constant_pos_denormal() "denormal-fp-math"="dynamic,dynamic" { 407; CHECK-LABEL: define noundef nofpclass(nan inf nsub norm) float @ret_canonicalize_dynamic_constant_pos_denormal 408; CHECK-SAME: () #[[ATTR2]] { 409; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf nsub norm) float @llvm.canonicalize.f32(float noundef 0x36A0000000000000) #[[ATTR12]] 410; CHECK-NEXT: ret float [[CALL]] 411; 412 %call = call float @llvm.canonicalize.f32(float 0x36A0000000000000) 413 ret float %call 414} 415 416define float @ret_canonicalize_dynamic_constant_neg_denormal() "denormal-fp-math"="dynamic,dynamic" { 417; CHECK-LABEL: define noundef nofpclass(nan inf psub norm) float @ret_canonicalize_dynamic_constant_neg_denormal 418; CHECK-SAME: () #[[ATTR2]] { 419; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf psub norm) float @llvm.canonicalize.f32(float noundef 0xB6A0000000000000) #[[ATTR12]] 420; CHECK-NEXT: ret float [[CALL]] 421; 422 %call = call float @llvm.canonicalize.f32(float 0xb6A0000000000000) 423 ret float %call 424} 425 426define float @ret_canonicalize_dynamic_constant_pos_zero() "denormal-fp-math"="dynamic,dynamic" { 427; CHECK-LABEL: define noundef nofpclass(nan inf sub norm) float @ret_canonicalize_dynamic_constant_pos_zero 428; CHECK-SAME: () #[[ATTR2]] { 429; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub norm) float @llvm.canonicalize.f32(float noundef 0.000000e+00) #[[ATTR12]] 430; CHECK-NEXT: ret float [[CALL]] 431; 432 %call = call float @llvm.canonicalize.f32(float 0.0) 433 ret float %call 434} 435 436define float @ret_canonicalize_dynamic_constant_neg_zero() "denormal-fp-math"="dynamic,dynamic" { 437; CHECK-LABEL: define noundef nofpclass(nan inf sub norm) float @ret_canonicalize_dynamic_constant_neg_zero 438; CHECK-SAME: () #[[ATTR2]] { 439; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub norm) float @llvm.canonicalize.f32(float noundef -0.000000e+00) #[[ATTR12]] 440; CHECK-NEXT: ret float [[CALL]] 441; 442 %call = call float @llvm.canonicalize.f32(float -0.0) 443 ret float %call 444} 445 446define float @ret_canonicalize_dynamic_constant_pos_normal() "denormal-fp-math"="dynamic,dynamic" { 447; CHECK-LABEL: define noundef nofpclass(nan inf sub nnorm) float @ret_canonicalize_dynamic_constant_pos_normal 448; CHECK-SAME: () #[[ATTR2]] { 449; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub nnorm) float @llvm.canonicalize.f32(float noundef 8.000000e+00) #[[ATTR12]] 450; CHECK-NEXT: ret float [[CALL]] 451; 452 %call = call float @llvm.canonicalize.f32(float 8.0) 453 ret float %call 454} 455 456define float @ret_canonicalize_dynamic_constant_neg_normal() "denormal-fp-math"="dynamic,dynamic" { 457; CHECK-LABEL: define noundef nofpclass(nan inf sub pnorm) float @ret_canonicalize_dynamic_constant_neg_normal 458; CHECK-SAME: () #[[ATTR2]] { 459; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan inf sub pnorm) float @llvm.canonicalize.f32(float noundef -8.000000e+00) #[[ATTR12]] 460; CHECK-NEXT: ret float [[CALL]] 461; 462 %call = call float @llvm.canonicalize.f32(float -8.0) 463 ret float %call 464} 465 466define float @ret_canonicalize_dynamic_constant_pos_inf() "denormal-fp-math"="dynamic,dynamic" { 467; CHECK-LABEL: define noundef nofpclass(nan ninf sub norm) float @ret_canonicalize_dynamic_constant_pos_inf 468; CHECK-SAME: () #[[ATTR2]] { 469; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan ninf sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF0000000000000) #[[ATTR12]] 470; CHECK-NEXT: ret float [[CALL]] 471; 472 %call = call float @llvm.canonicalize.f32(float 0x7FF0000000000000) 473 ret float %call 474} 475 476define float @ret_canonicalize_dynamic_constant_neg_inf() "denormal-fp-math"="dynamic,dynamic" { 477; CHECK-LABEL: define noundef nofpclass(nan pinf sub norm) float @ret_canonicalize_dynamic_constant_neg_inf 478; CHECK-SAME: () #[[ATTR2]] { 479; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(nan pinf sub norm) float @llvm.canonicalize.f32(float noundef 0xFFF0000000000000) #[[ATTR12]] 480; CHECK-NEXT: ret float [[CALL]] 481; 482 %call = call float @llvm.canonicalize.f32(float 0xFFF0000000000000) 483 ret float %call 484} 485 486define float @ret_canonicalize_dynamic_constant_qnan() "denormal-fp-math"="dynamic,dynamic" { 487; CHECK-LABEL: define noundef nofpclass(snan inf sub norm) float @ret_canonicalize_dynamic_constant_qnan 488; CHECK-SAME: () #[[ATTR2]] { 489; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF8000000000000) #[[ATTR12]] 490; CHECK-NEXT: ret float [[CALL]] 491; 492 %call = call float @llvm.canonicalize.f32(float 0x7FF8000000000000) 493 ret float %call 494} 495 496define float @ret_canonicalize_dynamic_constant_snan() "denormal-fp-math"="dynamic,dynamic" { 497; CHECK-LABEL: define noundef nofpclass(snan inf sub norm) float @ret_canonicalize_dynamic_constant_snan 498; CHECK-SAME: () #[[ATTR2]] { 499; CHECK-NEXT: [[CALL:%.*]] = call noundef nofpclass(snan inf sub norm) float @llvm.canonicalize.f32(float noundef 0x7FF1000000000000) #[[ATTR12]] 500; CHECK-NEXT: ret float [[CALL]] 501; 502 %call = call float @llvm.canonicalize.f32(float 0x7FF1000000000000) 503 ret float %call 504} 505 506;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: 507; TUNIT: {{.*}} 508