1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -passes=instsimplify -S | FileCheck %s 3 4; TODO: the instructions with poison operands should return poison 5 6; 7; constrained fadd 8; 9 10define float @fadd_undef_op0_strict(float %x) #0 { 11; CHECK-LABEL: @fadd_undef_op0_strict( 12; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fadd.f32(float undef, float [[X:%.*]], metadata !"round.dynamic", metadata !"fpexcept.strict") 13; CHECK-NEXT: ret float [[R]] 14; 15 %r = call float @llvm.experimental.constrained.fadd.f32(float undef, float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") 16 ret float %r 17} 18 19define float @fadd_undef_op0_maytrap(float %x) #0 { 20; CHECK-LABEL: @fadd_undef_op0_maytrap( 21; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fadd.f32(float undef, float [[X:%.*]], metadata !"round.dynamic", metadata !"fpexcept.maytrap") 22; CHECK-NEXT: ret float [[R]] 23; 24 %r = call float @llvm.experimental.constrained.fadd.f32(float undef, float %x, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 25 ret float %r 26} 27 28define float @fadd_undef_op0_upward(float %x) #0 { 29; CHECK-LABEL: @fadd_undef_op0_upward( 30; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fadd.f32(float undef, float [[X:%.*]], metadata !"round.upward", metadata !"fpexcept.ignore") 31; CHECK-NEXT: ret float [[R]] 32; 33 %r = call float @llvm.experimental.constrained.fadd.f32(float undef, float %x, metadata !"round.upward", metadata !"fpexcept.ignore") 34 ret float %r 35} 36 37define float @fadd_undef_op0_defaultfp(float %x) #0 { 38; CHECK-LABEL: @fadd_undef_op0_defaultfp( 39; CHECK-NEXT: ret float 0x7FF8000000000000 40; 41 %r = call float @llvm.experimental.constrained.fadd.f32(float undef, float %x, metadata !"round.tonearest", metadata !"fpexcept.ignore") 42 ret float %r 43} 44 45define float @fadd_poison_op0_strict(float %x) #0 { 46; CHECK-LABEL: @fadd_poison_op0_strict( 47; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fadd.f32(float poison, float [[X:%.*]], metadata !"round.dynamic", metadata !"fpexcept.strict") 48; CHECK-NEXT: ret float poison 49; 50 %r = call float @llvm.experimental.constrained.fadd.f32(float poison, float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") 51 ret float %r 52} 53 54define float @fadd_poison_op0_maytrap(float %x) #0 { 55; CHECK-LABEL: @fadd_poison_op0_maytrap( 56; CHECK-NEXT: ret float poison 57; 58 %r = call float @llvm.experimental.constrained.fadd.f32(float poison, float %x, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 59 ret float %r 60} 61 62define float @fadd_poison_op0_upward(float %x) #0 { 63; CHECK-LABEL: @fadd_poison_op0_upward( 64; CHECK-NEXT: ret float poison 65; 66 %r = call float @llvm.experimental.constrained.fadd.f32(float poison, float %x, metadata !"round.upward", metadata !"fpexcept.ignore") 67 ret float %r 68} 69 70define float @fadd_poison_op0_defaultfp(float %x) #0 { 71; CHECK-LABEL: @fadd_poison_op0_defaultfp( 72; CHECK-NEXT: ret float poison 73; 74 %r = call float @llvm.experimental.constrained.fadd.f32(float poison, float %x, metadata !"round.tonearest", metadata !"fpexcept.ignore") 75 ret float %r 76} 77 78define float @fadd_undef_op1_strict(float %x) #0 { 79; CHECK-LABEL: @fadd_undef_op1_strict( 80; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fadd.f32(float [[X:%.*]], float undef, metadata !"round.dynamic", metadata !"fpexcept.strict") 81; CHECK-NEXT: ret float [[R]] 82; 83 %r = call float @llvm.experimental.constrained.fadd.f32(float %x, float undef, metadata !"round.dynamic", metadata !"fpexcept.strict") 84 ret float %r 85} 86 87define float @fadd_undef_op1_maytrap(float %x) #0 { 88; CHECK-LABEL: @fadd_undef_op1_maytrap( 89; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fadd.f32(float [[X:%.*]], float undef, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 90; CHECK-NEXT: ret float [[R]] 91; 92 %r = call float @llvm.experimental.constrained.fadd.f32(float %x, float undef, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 93 ret float %r 94} 95 96define float @fadd_undef_op1_upward(float %x) #0 { 97; CHECK-LABEL: @fadd_undef_op1_upward( 98; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fadd.f32(float [[X:%.*]], float undef, metadata !"round.upward", metadata !"fpexcept.ignore") 99; CHECK-NEXT: ret float [[R]] 100; 101 %r = call float @llvm.experimental.constrained.fadd.f32(float %x, float undef, metadata !"round.upward", metadata !"fpexcept.ignore") 102 ret float %r 103} 104 105define float @fadd_undef_op1_defaultfp(float %x) #0 { 106; CHECK-LABEL: @fadd_undef_op1_defaultfp( 107; CHECK-NEXT: ret float 0x7FF8000000000000 108; 109 %r = call float @llvm.experimental.constrained.fadd.f32(float %x, float undef, metadata !"round.tonearest", metadata !"fpexcept.ignore") 110 ret float %r 111} 112 113define float @fadd_poison_op1_strict(float %x) #0 { 114; CHECK-LABEL: @fadd_poison_op1_strict( 115; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fadd.f32(float [[X:%.*]], float poison, metadata !"round.dynamic", metadata !"fpexcept.strict") 116; CHECK-NEXT: ret float poison 117; 118 %r = call float @llvm.experimental.constrained.fadd.f32(float %x, float poison, metadata !"round.dynamic", metadata !"fpexcept.strict") 119 ret float %r 120} 121 122define float @fadd_poison_op1_maytrap(float %x) #0 { 123; CHECK-LABEL: @fadd_poison_op1_maytrap( 124; CHECK-NEXT: ret float poison 125; 126 %r = call float @llvm.experimental.constrained.fadd.f32(float %x, float poison, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 127 ret float %r 128} 129 130define float @fadd_poison_op1_upward(float %x) #0 { 131; CHECK-LABEL: @fadd_poison_op1_upward( 132; CHECK-NEXT: ret float poison 133; 134 %r = call float @llvm.experimental.constrained.fadd.f32(float %x, float poison, metadata !"round.upward", metadata !"fpexcept.ignore") 135 ret float %r 136} 137 138define float @fadd_poison_op1_defaultfp(float %x) #0 { 139; CHECK-LABEL: @fadd_poison_op1_defaultfp( 140; CHECK-NEXT: ret float poison 141; 142 %r = call float @llvm.experimental.constrained.fadd.f32(float %x, float poison, metadata !"round.tonearest", metadata !"fpexcept.ignore") 143 ret float %r 144} 145 146; 147; constrained fsub 148; 149 150define float @fsub_undef_op0_strict(float %x) #0 { 151; CHECK-LABEL: @fsub_undef_op0_strict( 152; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fsub.f32(float undef, float [[X:%.*]], metadata !"round.dynamic", metadata !"fpexcept.strict") 153; CHECK-NEXT: ret float [[R]] 154; 155 %r = call float @llvm.experimental.constrained.fsub.f32(float undef, float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") 156 ret float %r 157} 158 159define float @fsub_undef_op0_maytrap(float %x) #0 { 160; CHECK-LABEL: @fsub_undef_op0_maytrap( 161; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fsub.f32(float undef, float [[X:%.*]], metadata !"round.dynamic", metadata !"fpexcept.maytrap") 162; CHECK-NEXT: ret float [[R]] 163; 164 %r = call float @llvm.experimental.constrained.fsub.f32(float undef, float %x, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 165 ret float %r 166} 167 168define float @fsub_undef_op0_upward(float %x) #0 { 169; CHECK-LABEL: @fsub_undef_op0_upward( 170; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fsub.f32(float undef, float [[X:%.*]], metadata !"round.upward", metadata !"fpexcept.ignore") 171; CHECK-NEXT: ret float [[R]] 172; 173 %r = call float @llvm.experimental.constrained.fsub.f32(float undef, float %x, metadata !"round.upward", metadata !"fpexcept.ignore") 174 ret float %r 175} 176 177define float @fsub_undef_op0_defaultfp(float %x) #0 { 178; CHECK-LABEL: @fsub_undef_op0_defaultfp( 179; CHECK-NEXT: ret float 0x7FF8000000000000 180; 181 %r = call float @llvm.experimental.constrained.fsub.f32(float undef, float %x, metadata !"round.tonearest", metadata !"fpexcept.ignore") 182 ret float %r 183} 184 185define float @fsub_poison_op0_strict(float %x) #0 { 186; CHECK-LABEL: @fsub_poison_op0_strict( 187; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fsub.f32(float poison, float [[X:%.*]], metadata !"round.dynamic", metadata !"fpexcept.strict") 188; CHECK-NEXT: ret float poison 189; 190 %r = call float @llvm.experimental.constrained.fsub.f32(float poison, float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") 191 ret float %r 192} 193 194define float @fsub_poison_op0_maytrap(float %x) #0 { 195; CHECK-LABEL: @fsub_poison_op0_maytrap( 196; CHECK-NEXT: ret float poison 197; 198 %r = call float @llvm.experimental.constrained.fsub.f32(float poison, float %x, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 199 ret float %r 200} 201 202define float @fsub_poison_op0_upward(float %x) #0 { 203; CHECK-LABEL: @fsub_poison_op0_upward( 204; CHECK-NEXT: ret float poison 205; 206 %r = call float @llvm.experimental.constrained.fsub.f32(float poison, float %x, metadata !"round.upward", metadata !"fpexcept.ignore") 207 ret float %r 208} 209 210define float @fsub_poison_op0_defaultfp(float %x) #0 { 211; CHECK-LABEL: @fsub_poison_op0_defaultfp( 212; CHECK-NEXT: ret float poison 213; 214 %r = call float @llvm.experimental.constrained.fsub.f32(float poison, float %x, metadata !"round.tonearest", metadata !"fpexcept.ignore") 215 ret float %r 216} 217 218define float @fsub_undef_op1_strict(float %x) #0 { 219; CHECK-LABEL: @fsub_undef_op1_strict( 220; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fsub.f32(float [[X:%.*]], float undef, metadata !"round.dynamic", metadata !"fpexcept.strict") 221; CHECK-NEXT: ret float [[R]] 222; 223 %r = call float @llvm.experimental.constrained.fsub.f32(float %x, float undef, metadata !"round.dynamic", metadata !"fpexcept.strict") 224 ret float %r 225} 226 227define float @fsub_undef_op1_maytrap(float %x) #0 { 228; CHECK-LABEL: @fsub_undef_op1_maytrap( 229; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fsub.f32(float [[X:%.*]], float undef, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 230; CHECK-NEXT: ret float [[R]] 231; 232 %r = call float @llvm.experimental.constrained.fsub.f32(float %x, float undef, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 233 ret float %r 234} 235 236define float @fsub_undef_op1_upward(float %x) #0 { 237; CHECK-LABEL: @fsub_undef_op1_upward( 238; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fsub.f32(float [[X:%.*]], float undef, metadata !"round.upward", metadata !"fpexcept.ignore") 239; CHECK-NEXT: ret float [[R]] 240; 241 %r = call float @llvm.experimental.constrained.fsub.f32(float %x, float undef, metadata !"round.upward", metadata !"fpexcept.ignore") 242 ret float %r 243} 244 245define float @fsub_undef_op1_defaultfp(float %x) #0 { 246; CHECK-LABEL: @fsub_undef_op1_defaultfp( 247; CHECK-NEXT: ret float 0x7FF8000000000000 248; 249 %r = call float @llvm.experimental.constrained.fsub.f32(float %x, float undef, metadata !"round.tonearest", metadata !"fpexcept.ignore") 250 ret float %r 251} 252 253define float @fsub_poison_op1_strict(float %x) #0 { 254; CHECK-LABEL: @fsub_poison_op1_strict( 255; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fsub.f32(float [[X:%.*]], float poison, metadata !"round.dynamic", metadata !"fpexcept.strict") 256; CHECK-NEXT: ret float poison 257; 258 %r = call float @llvm.experimental.constrained.fsub.f32(float %x, float poison, metadata !"round.dynamic", metadata !"fpexcept.strict") 259 ret float %r 260} 261 262define float @fsub_poison_op1_maytrap(float %x) #0 { 263; CHECK-LABEL: @fsub_poison_op1_maytrap( 264; CHECK-NEXT: ret float poison 265; 266 %r = call float @llvm.experimental.constrained.fsub.f32(float %x, float poison, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 267 ret float %r 268} 269 270define float @fsub_poison_op1_upward(float %x) #0 { 271; CHECK-LABEL: @fsub_poison_op1_upward( 272; CHECK-NEXT: ret float poison 273; 274 %r = call float @llvm.experimental.constrained.fsub.f32(float %x, float poison, metadata !"round.upward", metadata !"fpexcept.ignore") 275 ret float %r 276} 277 278define float @fsub_poison_op1_defaultfp(float %x) #0 { 279; CHECK-LABEL: @fsub_poison_op1_defaultfp( 280; CHECK-NEXT: ret float poison 281; 282 %r = call float @llvm.experimental.constrained.fsub.f32(float %x, float poison, metadata !"round.tonearest", metadata !"fpexcept.ignore") 283 ret float %r 284} 285 286; 287; constrained fmul 288; 289 290define float @fmul_undef_op0_strict(float %x) #0 { 291; CHECK-LABEL: @fmul_undef_op0_strict( 292; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fmul.f32(float undef, float [[X:%.*]], metadata !"round.dynamic", metadata !"fpexcept.strict") 293; CHECK-NEXT: ret float [[R]] 294; 295 %r = call float @llvm.experimental.constrained.fmul.f32(float undef, float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") 296 ret float %r 297} 298 299define float @fmul_undef_op0_maytrap(float %x) #0 { 300; CHECK-LABEL: @fmul_undef_op0_maytrap( 301; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fmul.f32(float undef, float [[X:%.*]], metadata !"round.dynamic", metadata !"fpexcept.maytrap") 302; CHECK-NEXT: ret float [[R]] 303; 304 %r = call float @llvm.experimental.constrained.fmul.f32(float undef, float %x, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 305 ret float %r 306} 307 308define float @fmul_undef_op0_upward(float %x) #0 { 309; CHECK-LABEL: @fmul_undef_op0_upward( 310; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fmul.f32(float undef, float [[X:%.*]], metadata !"round.upward", metadata !"fpexcept.ignore") 311; CHECK-NEXT: ret float [[R]] 312; 313 %r = call float @llvm.experimental.constrained.fmul.f32(float undef, float %x, metadata !"round.upward", metadata !"fpexcept.ignore") 314 ret float %r 315} 316 317define float @fmul_undef_op0_defaultfp(float %x) #0 { 318; CHECK-LABEL: @fmul_undef_op0_defaultfp( 319; CHECK-NEXT: ret float 0x7FF8000000000000 320; 321 %r = call float @llvm.experimental.constrained.fmul.f32(float undef, float %x, metadata !"round.tonearest", metadata !"fpexcept.ignore") 322 ret float %r 323} 324 325define float @fmul_poison_op0_strict(float %x) #0 { 326; CHECK-LABEL: @fmul_poison_op0_strict( 327; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fmul.f32(float poison, float [[X:%.*]], metadata !"round.dynamic", metadata !"fpexcept.strict") 328; CHECK-NEXT: ret float poison 329; 330 %r = call float @llvm.experimental.constrained.fmul.f32(float poison, float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") 331 ret float %r 332} 333 334define float @fmul_poison_op0_maytrap(float %x) #0 { 335; CHECK-LABEL: @fmul_poison_op0_maytrap( 336; CHECK-NEXT: ret float poison 337; 338 %r = call float @llvm.experimental.constrained.fmul.f32(float poison, float %x, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 339 ret float %r 340} 341 342define float @fmul_poison_op0_upward(float %x) #0 { 343; CHECK-LABEL: @fmul_poison_op0_upward( 344; CHECK-NEXT: ret float poison 345; 346 %r = call float @llvm.experimental.constrained.fmul.f32(float poison, float %x, metadata !"round.upward", metadata !"fpexcept.ignore") 347 ret float %r 348} 349 350define float @fmul_poison_op0_defaultfp(float %x) #0 { 351; CHECK-LABEL: @fmul_poison_op0_defaultfp( 352; CHECK-NEXT: ret float poison 353; 354 %r = call float @llvm.experimental.constrained.fmul.f32(float poison, float %x, metadata !"round.tonearest", metadata !"fpexcept.ignore") 355 ret float %r 356} 357 358define float @fmul_undef_op1_strict(float %x) #0 { 359; CHECK-LABEL: @fmul_undef_op1_strict( 360; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fmul.f32(float [[X:%.*]], float undef, metadata !"round.dynamic", metadata !"fpexcept.strict") 361; CHECK-NEXT: ret float [[R]] 362; 363 %r = call float @llvm.experimental.constrained.fmul.f32(float %x, float undef, metadata !"round.dynamic", metadata !"fpexcept.strict") 364 ret float %r 365} 366 367define float @fmul_undef_op1_maytrap(float %x) #0 { 368; CHECK-LABEL: @fmul_undef_op1_maytrap( 369; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fmul.f32(float [[X:%.*]], float undef, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 370; CHECK-NEXT: ret float [[R]] 371; 372 %r = call float @llvm.experimental.constrained.fmul.f32(float %x, float undef, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 373 ret float %r 374} 375 376define float @fmul_undef_op1_upward(float %x) #0 { 377; CHECK-LABEL: @fmul_undef_op1_upward( 378; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fmul.f32(float [[X:%.*]], float undef, metadata !"round.upward", metadata !"fpexcept.ignore") 379; CHECK-NEXT: ret float [[R]] 380; 381 %r = call float @llvm.experimental.constrained.fmul.f32(float %x, float undef, metadata !"round.upward", metadata !"fpexcept.ignore") 382 ret float %r 383} 384 385define float @fmul_undef_op1_defaultfp(float %x) #0 { 386; CHECK-LABEL: @fmul_undef_op1_defaultfp( 387; CHECK-NEXT: ret float 0x7FF8000000000000 388; 389 %r = call float @llvm.experimental.constrained.fmul.f32(float %x, float undef, metadata !"round.tonearest", metadata !"fpexcept.ignore") 390 ret float %r 391} 392 393define float @fmul_poison_op1_strict(float %x) #0 { 394; CHECK-LABEL: @fmul_poison_op1_strict( 395; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fmul.f32(float [[X:%.*]], float poison, metadata !"round.dynamic", metadata !"fpexcept.strict") 396; CHECK-NEXT: ret float poison 397; 398 %r = call float @llvm.experimental.constrained.fmul.f32(float %x, float poison, metadata !"round.dynamic", metadata !"fpexcept.strict") 399 ret float %r 400} 401 402define float @fmul_poison_op1_maytrap(float %x) #0 { 403; CHECK-LABEL: @fmul_poison_op1_maytrap( 404; CHECK-NEXT: ret float poison 405; 406 %r = call float @llvm.experimental.constrained.fmul.f32(float %x, float poison, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 407 ret float %r 408} 409 410define float @fmul_poison_op1_upward(float %x) #0 { 411; CHECK-LABEL: @fmul_poison_op1_upward( 412; CHECK-NEXT: ret float poison 413; 414 %r = call float @llvm.experimental.constrained.fmul.f32(float %x, float poison, metadata !"round.upward", metadata !"fpexcept.ignore") 415 ret float %r 416} 417 418define float @fmul_poison_op1_defaultfp(float %x) #0 { 419; CHECK-LABEL: @fmul_poison_op1_defaultfp( 420; CHECK-NEXT: ret float poison 421; 422 %r = call float @llvm.experimental.constrained.fmul.f32(float %x, float poison, metadata !"round.tonearest", metadata !"fpexcept.ignore") 423 ret float %r 424} 425 426; 427; constrained fdiv 428; 429 430define float @fdiv_undef_op0_strict(float %x) #0 { 431; CHECK-LABEL: @fdiv_undef_op0_strict( 432; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fdiv.f32(float undef, float [[X:%.*]], metadata !"round.dynamic", metadata !"fpexcept.strict") 433; CHECK-NEXT: ret float [[R]] 434; 435 %r = call float @llvm.experimental.constrained.fdiv.f32(float undef, float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") 436 ret float %r 437} 438 439define float @fdiv_undef_op0_maytrap(float %x) #0 { 440; CHECK-LABEL: @fdiv_undef_op0_maytrap( 441; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fdiv.f32(float undef, float [[X:%.*]], metadata !"round.dynamic", metadata !"fpexcept.maytrap") 442; CHECK-NEXT: ret float [[R]] 443; 444 %r = call float @llvm.experimental.constrained.fdiv.f32(float undef, float %x, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 445 ret float %r 446} 447 448define float @fdiv_undef_op0_upward(float %x) #0 { 449; CHECK-LABEL: @fdiv_undef_op0_upward( 450; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fdiv.f32(float undef, float [[X:%.*]], metadata !"round.upward", metadata !"fpexcept.ignore") 451; CHECK-NEXT: ret float [[R]] 452; 453 %r = call float @llvm.experimental.constrained.fdiv.f32(float undef, float %x, metadata !"round.upward", metadata !"fpexcept.ignore") 454 ret float %r 455} 456 457define float @fdiv_undef_op0_defaultfp(float %x) #0 { 458; CHECK-LABEL: @fdiv_undef_op0_defaultfp( 459; CHECK-NEXT: ret float 0x7FF8000000000000 460; 461 %r = call float @llvm.experimental.constrained.fdiv.f32(float undef, float %x, metadata !"round.tonearest", metadata !"fpexcept.ignore") 462 ret float %r 463} 464 465define float @fdiv_poison_op0_strict(float %x) #0 { 466; CHECK-LABEL: @fdiv_poison_op0_strict( 467; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fdiv.f32(float poison, float [[X:%.*]], metadata !"round.dynamic", metadata !"fpexcept.strict") 468; CHECK-NEXT: ret float poison 469; 470 %r = call float @llvm.experimental.constrained.fdiv.f32(float poison, float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") 471 ret float %r 472} 473 474define float @fdiv_poison_op0_maytrap(float %x) #0 { 475; CHECK-LABEL: @fdiv_poison_op0_maytrap( 476; CHECK-NEXT: ret float poison 477; 478 %r = call float @llvm.experimental.constrained.fdiv.f32(float poison, float %x, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 479 ret float %r 480} 481 482define float @fdiv_poison_op0_upward(float %x) #0 { 483; CHECK-LABEL: @fdiv_poison_op0_upward( 484; CHECK-NEXT: ret float poison 485; 486 %r = call float @llvm.experimental.constrained.fdiv.f32(float poison, float %x, metadata !"round.upward", metadata !"fpexcept.ignore") 487 ret float %r 488} 489 490define float @fdiv_poison_op0_defaultfp(float %x) #0 { 491; CHECK-LABEL: @fdiv_poison_op0_defaultfp( 492; CHECK-NEXT: ret float poison 493; 494 %r = call float @llvm.experimental.constrained.fdiv.f32(float poison, float %x, metadata !"round.tonearest", metadata !"fpexcept.ignore") 495 ret float %r 496} 497 498define float @fdiv_undef_op1_strict(float %x) #0 { 499; CHECK-LABEL: @fdiv_undef_op1_strict( 500; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fdiv.f32(float [[X:%.*]], float undef, metadata !"round.dynamic", metadata !"fpexcept.strict") 501; CHECK-NEXT: ret float [[R]] 502; 503 %r = call float @llvm.experimental.constrained.fdiv.f32(float %x, float undef, metadata !"round.dynamic", metadata !"fpexcept.strict") 504 ret float %r 505} 506 507define float @fdiv_undef_op1_maytrap(float %x) #0 { 508; CHECK-LABEL: @fdiv_undef_op1_maytrap( 509; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fdiv.f32(float [[X:%.*]], float undef, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 510; CHECK-NEXT: ret float [[R]] 511; 512 %r = call float @llvm.experimental.constrained.fdiv.f32(float %x, float undef, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 513 ret float %r 514} 515 516define float @fdiv_undef_op1_upward(float %x) #0 { 517; CHECK-LABEL: @fdiv_undef_op1_upward( 518; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fdiv.f32(float [[X:%.*]], float undef, metadata !"round.upward", metadata !"fpexcept.ignore") 519; CHECK-NEXT: ret float [[R]] 520; 521 %r = call float @llvm.experimental.constrained.fdiv.f32(float %x, float undef, metadata !"round.upward", metadata !"fpexcept.ignore") 522 ret float %r 523} 524 525define float @fdiv_undef_op1_defaultfp(float %x) #0 { 526; CHECK-LABEL: @fdiv_undef_op1_defaultfp( 527; CHECK-NEXT: ret float 0x7FF8000000000000 528; 529 %r = call float @llvm.experimental.constrained.fdiv.f32(float %x, float undef, metadata !"round.tonearest", metadata !"fpexcept.ignore") 530 ret float %r 531} 532 533define float @fdiv_poison_op1_strict(float %x) #0 { 534; CHECK-LABEL: @fdiv_poison_op1_strict( 535; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fdiv.f32(float [[X:%.*]], float poison, metadata !"round.dynamic", metadata !"fpexcept.strict") 536; CHECK-NEXT: ret float poison 537; 538 %r = call float @llvm.experimental.constrained.fdiv.f32(float %x, float poison, metadata !"round.dynamic", metadata !"fpexcept.strict") 539 ret float %r 540} 541 542define float @fdiv_poison_op1_maytrap(float %x) #0 { 543; CHECK-LABEL: @fdiv_poison_op1_maytrap( 544; CHECK-NEXT: ret float poison 545; 546 %r = call float @llvm.experimental.constrained.fdiv.f32(float %x, float poison, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 547 ret float %r 548} 549 550define float @fdiv_poison_op1_upward(float %x) #0 { 551; CHECK-LABEL: @fdiv_poison_op1_upward( 552; CHECK-NEXT: ret float poison 553; 554 %r = call float @llvm.experimental.constrained.fdiv.f32(float %x, float poison, metadata !"round.upward", metadata !"fpexcept.ignore") 555 ret float %r 556} 557 558define float @fdiv_poison_op1_defaultfp(float %x) #0 { 559; CHECK-LABEL: @fdiv_poison_op1_defaultfp( 560; CHECK-NEXT: ret float poison 561; 562 %r = call float @llvm.experimental.constrained.fdiv.f32(float %x, float poison, metadata !"round.tonearest", metadata !"fpexcept.ignore") 563 ret float %r 564} 565 566; 567; constrained frem 568; 569 570define float @frem_undef_op0_strict(float %x) #0 { 571; CHECK-LABEL: @frem_undef_op0_strict( 572; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.frem.f32(float undef, float [[X:%.*]], metadata !"round.dynamic", metadata !"fpexcept.strict") 573; CHECK-NEXT: ret float [[R]] 574; 575 %r = call float @llvm.experimental.constrained.frem.f32(float undef, float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") 576 ret float %r 577} 578 579define float @frem_undef_op0_maytrap(float %x) #0 { 580; CHECK-LABEL: @frem_undef_op0_maytrap( 581; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.frem.f32(float undef, float [[X:%.*]], metadata !"round.dynamic", metadata !"fpexcept.maytrap") 582; CHECK-NEXT: ret float [[R]] 583; 584 %r = call float @llvm.experimental.constrained.frem.f32(float undef, float %x, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 585 ret float %r 586} 587 588define float @frem_undef_op0_upward(float %x) #0 { 589; CHECK-LABEL: @frem_undef_op0_upward( 590; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.frem.f32(float undef, float [[X:%.*]], metadata !"round.upward", metadata !"fpexcept.ignore") 591; CHECK-NEXT: ret float [[R]] 592; 593 %r = call float @llvm.experimental.constrained.frem.f32(float undef, float %x, metadata !"round.upward", metadata !"fpexcept.ignore") 594 ret float %r 595} 596 597define float @frem_undef_op0_defaultfp(float %x) #0 { 598; CHECK-LABEL: @frem_undef_op0_defaultfp( 599; CHECK-NEXT: ret float 0x7FF8000000000000 600; 601 %r = call float @llvm.experimental.constrained.frem.f32(float undef, float %x, metadata !"round.tonearest", metadata !"fpexcept.ignore") 602 ret float %r 603} 604 605define float @frem_poison_op0_strict(float %x) #0 { 606; CHECK-LABEL: @frem_poison_op0_strict( 607; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.frem.f32(float poison, float [[X:%.*]], metadata !"round.dynamic", metadata !"fpexcept.strict") 608; CHECK-NEXT: ret float poison 609; 610 %r = call float @llvm.experimental.constrained.frem.f32(float poison, float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") 611 ret float %r 612} 613 614define float @frem_poison_op0_maytrap(float %x) #0 { 615; CHECK-LABEL: @frem_poison_op0_maytrap( 616; CHECK-NEXT: ret float poison 617; 618 %r = call float @llvm.experimental.constrained.frem.f32(float poison, float %x, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 619 ret float %r 620} 621 622define float @frem_poison_op0_upward(float %x) #0 { 623; CHECK-LABEL: @frem_poison_op0_upward( 624; CHECK-NEXT: ret float poison 625; 626 %r = call float @llvm.experimental.constrained.frem.f32(float poison, float %x, metadata !"round.upward", metadata !"fpexcept.ignore") 627 ret float %r 628} 629 630define float @frem_poison_op0_defaultfp(float %x) #0 { 631; CHECK-LABEL: @frem_poison_op0_defaultfp( 632; CHECK-NEXT: ret float poison 633; 634 %r = call float @llvm.experimental.constrained.frem.f32(float poison, float %x, metadata !"round.tonearest", metadata !"fpexcept.ignore") 635 ret float %r 636} 637 638define float @frem_undef_op1_strict(float %x) #0 { 639; CHECK-LABEL: @frem_undef_op1_strict( 640; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.frem.f32(float [[X:%.*]], float undef, metadata !"round.dynamic", metadata !"fpexcept.strict") 641; CHECK-NEXT: ret float [[R]] 642; 643 %r = call float @llvm.experimental.constrained.frem.f32(float %x, float undef, metadata !"round.dynamic", metadata !"fpexcept.strict") 644 ret float %r 645} 646 647define float @frem_undef_op1_maytrap(float %x) #0 { 648; CHECK-LABEL: @frem_undef_op1_maytrap( 649; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.frem.f32(float [[X:%.*]], float undef, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 650; CHECK-NEXT: ret float [[R]] 651; 652 %r = call float @llvm.experimental.constrained.frem.f32(float %x, float undef, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 653 ret float %r 654} 655 656define float @frem_undef_op1_upward(float %x) #0 { 657; CHECK-LABEL: @frem_undef_op1_upward( 658; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.frem.f32(float [[X:%.*]], float undef, metadata !"round.upward", metadata !"fpexcept.ignore") 659; CHECK-NEXT: ret float [[R]] 660; 661 %r = call float @llvm.experimental.constrained.frem.f32(float %x, float undef, metadata !"round.upward", metadata !"fpexcept.ignore") 662 ret float %r 663} 664 665define float @frem_undef_op1_defaultfp(float %x) #0 { 666; CHECK-LABEL: @frem_undef_op1_defaultfp( 667; CHECK-NEXT: ret float 0x7FF8000000000000 668; 669 %r = call float @llvm.experimental.constrained.frem.f32(float %x, float undef, metadata !"round.tonearest", metadata !"fpexcept.ignore") 670 ret float %r 671} 672 673define float @frem_poison_op1_strict(float %x) #0 { 674; CHECK-LABEL: @frem_poison_op1_strict( 675; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.frem.f32(float [[X:%.*]], float poison, metadata !"round.dynamic", metadata !"fpexcept.strict") 676; CHECK-NEXT: ret float poison 677; 678 %r = call float @llvm.experimental.constrained.frem.f32(float %x, float poison, metadata !"round.dynamic", metadata !"fpexcept.strict") 679 ret float %r 680} 681 682define float @frem_poison_op1_maytrap(float %x) #0 { 683; CHECK-LABEL: @frem_poison_op1_maytrap( 684; CHECK-NEXT: ret float poison 685; 686 %r = call float @llvm.experimental.constrained.frem.f32(float %x, float poison, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 687 ret float %r 688} 689 690define float @frem_poison_op1_upward(float %x) #0 { 691; CHECK-LABEL: @frem_poison_op1_upward( 692; CHECK-NEXT: ret float poison 693; 694 %r = call float @llvm.experimental.constrained.frem.f32(float %x, float poison, metadata !"round.upward", metadata !"fpexcept.ignore") 695 ret float %r 696} 697 698define float @frem_poison_op1_defaultfp(float %x) #0 { 699; CHECK-LABEL: @frem_poison_op1_defaultfp( 700; CHECK-NEXT: ret float poison 701; 702 %r = call float @llvm.experimental.constrained.frem.f32(float %x, float poison, metadata !"round.tonearest", metadata !"fpexcept.ignore") 703 ret float %r 704} 705 706; 707; constrained fma 708; 709 710define float @fma_undef_op0_strict(float %x, float %y) #0 { 711; CHECK-LABEL: @fma_undef_op0_strict( 712; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fma.f32(float undef, float [[X:%.*]], float [[Y:%.*]], metadata !"round.dynamic", metadata !"fpexcept.strict") 713; CHECK-NEXT: ret float [[R]] 714; 715 %r = call float @llvm.experimental.constrained.fma.f32(float undef, float %x, float %y, metadata !"round.dynamic", metadata !"fpexcept.strict") 716 ret float %r 717} 718 719define float @fma_undef_op0_maytrap(float %x, float %y) #0 { 720; CHECK-LABEL: @fma_undef_op0_maytrap( 721; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fma.f32(float undef, float [[X:%.*]], float [[Y:%.*]], metadata !"round.dynamic", metadata !"fpexcept.maytrap") 722; CHECK-NEXT: ret float [[R]] 723; 724 %r = call float @llvm.experimental.constrained.fma.f32(float undef, float %x, float %y, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 725 ret float %r 726} 727 728define float @fma_undef_op0_upward(float %x, float %y) #0 { 729; CHECK-LABEL: @fma_undef_op0_upward( 730; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fma.f32(float undef, float [[X:%.*]], float [[Y:%.*]], metadata !"round.upward", metadata !"fpexcept.ignore") 731; CHECK-NEXT: ret float [[R]] 732; 733 %r = call float @llvm.experimental.constrained.fma.f32(float undef, float %x, float %y, metadata !"round.upward", metadata !"fpexcept.ignore") 734 ret float %r 735} 736 737define float @fma_undef_op0_defaultfp(float %x, float %y) #0 { 738; CHECK-LABEL: @fma_undef_op0_defaultfp( 739; CHECK-NEXT: ret float 0x7FF8000000000000 740; 741 %r = call float @llvm.experimental.constrained.fma.f32(float undef, float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.ignore") 742 ret float %r 743} 744 745define float @fma_poison_op0_strict(float %x, float %y) #0 { 746; CHECK-LABEL: @fma_poison_op0_strict( 747; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fma.f32(float poison, float [[X:%.*]], float [[Y:%.*]], metadata !"round.dynamic", metadata !"fpexcept.strict") 748; CHECK-NEXT: ret float poison 749; 750 %r = call float @llvm.experimental.constrained.fma.f32(float poison, float %x, float %y, metadata !"round.dynamic", metadata !"fpexcept.strict") 751 ret float %r 752} 753 754define float @fma_poison_op0_maytrap(float %x, float %y) #0 { 755; CHECK-LABEL: @fma_poison_op0_maytrap( 756; CHECK-NEXT: ret float poison 757; 758 %r = call float @llvm.experimental.constrained.fma.f32(float poison, float %x, float %y, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 759 ret float %r 760} 761 762define float @fma_poison_op0_upward(float %x, float %y) #0 { 763; CHECK-LABEL: @fma_poison_op0_upward( 764; CHECK-NEXT: ret float poison 765; 766 %r = call float @llvm.experimental.constrained.fma.f32(float poison, float %x, float %y, metadata !"round.upward", metadata !"fpexcept.ignore") 767 ret float %r 768} 769 770define float @fma_poison_op0_defaultfp(float %x, float %y) #0 { 771; CHECK-LABEL: @fma_poison_op0_defaultfp( 772; CHECK-NEXT: ret float poison 773; 774 %r = call float @llvm.experimental.constrained.fma.f32(float poison, float %x, float %y, metadata !"round.tonearest", metadata !"fpexcept.ignore") 775 ret float %r 776} 777 778define float @fma_undef_op1_strict(float %x, float %y) #0 { 779; CHECK-LABEL: @fma_undef_op1_strict( 780; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fma.f32(float [[X:%.*]], float undef, float [[Y:%.*]], metadata !"round.dynamic", metadata !"fpexcept.strict") 781; CHECK-NEXT: ret float [[R]] 782; 783 %r = call float @llvm.experimental.constrained.fma.f32(float %x, float undef, float %y, metadata !"round.dynamic", metadata !"fpexcept.strict") 784 ret float %r 785} 786 787define float @fma_undef_op1_maytrap(float %x, float %y) #0 { 788; CHECK-LABEL: @fma_undef_op1_maytrap( 789; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fma.f32(float [[X:%.*]], float undef, float [[Y:%.*]], metadata !"round.dynamic", metadata !"fpexcept.maytrap") 790; CHECK-NEXT: ret float [[R]] 791; 792 %r = call float @llvm.experimental.constrained.fma.f32(float %x, float undef, float %y, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 793 ret float %r 794} 795 796define float @fma_undef_op1_upward(float %x, float %y) #0 { 797; CHECK-LABEL: @fma_undef_op1_upward( 798; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fma.f32(float [[X:%.*]], float undef, float [[Y:%.*]], metadata !"round.upward", metadata !"fpexcept.ignore") 799; CHECK-NEXT: ret float [[R]] 800; 801 %r = call float @llvm.experimental.constrained.fma.f32(float %x, float undef, float %y, metadata !"round.upward", metadata !"fpexcept.ignore") 802 ret float %r 803} 804 805define float @fma_undef_op1_defaultfp(float %x, float %y) #0 { 806; CHECK-LABEL: @fma_undef_op1_defaultfp( 807; CHECK-NEXT: ret float 0x7FF8000000000000 808; 809 %r = call float @llvm.experimental.constrained.fma.f32(float %x, float undef, float %y, metadata !"round.tonearest", metadata !"fpexcept.ignore") 810 ret float %r 811} 812 813define float @fma_poison_op1_strict(float %x, float %y) #0 { 814; CHECK-LABEL: @fma_poison_op1_strict( 815; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fma.f32(float [[X:%.*]], float poison, float [[Y:%.*]], metadata !"round.dynamic", metadata !"fpexcept.strict") 816; CHECK-NEXT: ret float poison 817; 818 %r = call float @llvm.experimental.constrained.fma.f32(float %x, float poison, float %y, metadata !"round.dynamic", metadata !"fpexcept.strict") 819 ret float %r 820} 821 822define float @fma_poison_op1_maytrap(float %x, float %y) #0 { 823; CHECK-LABEL: @fma_poison_op1_maytrap( 824; CHECK-NEXT: ret float poison 825; 826 %r = call float @llvm.experimental.constrained.fma.f32(float %x, float poison, float %y, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 827 ret float %r 828} 829 830define float @fma_poison_op1_upward(float %x, float %y) #0 { 831; CHECK-LABEL: @fma_poison_op1_upward( 832; CHECK-NEXT: ret float poison 833; 834 %r = call float @llvm.experimental.constrained.fma.f32(float %x, float poison, float %y, metadata !"round.upward", metadata !"fpexcept.ignore") 835 ret float %r 836} 837 838define float @fma_poison_op1_defaultfp(float %x, float %y) #0 { 839; CHECK-LABEL: @fma_poison_op1_defaultfp( 840; CHECK-NEXT: ret float poison 841; 842 %r = call float @llvm.experimental.constrained.fma.f32(float %x, float poison, float %y, metadata !"round.tonearest", metadata !"fpexcept.ignore") 843 ret float %r 844} 845 846define float @fma_undef_op2_strict(float %x, float %y) #0 { 847; CHECK-LABEL: @fma_undef_op2_strict( 848; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fma.f32(float [[X:%.*]], float [[Y:%.*]], float undef, metadata !"round.dynamic", metadata !"fpexcept.strict") 849; CHECK-NEXT: ret float [[R]] 850; 851 %r = call float @llvm.experimental.constrained.fma.f32(float %x, float %y, float undef, metadata !"round.dynamic", metadata !"fpexcept.strict") 852 ret float %r 853} 854 855define float @fma_undef_op2_maytrap(float %x, float %y) #0 { 856; CHECK-LABEL: @fma_undef_op2_maytrap( 857; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fma.f32(float [[X:%.*]], float [[Y:%.*]], float undef, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 858; CHECK-NEXT: ret float [[R]] 859; 860 %r = call float @llvm.experimental.constrained.fma.f32(float %x, float %y, float undef, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 861 ret float %r 862} 863 864define float @fma_undef_op2_upward(float %x, float %y) #0 { 865; CHECK-LABEL: @fma_undef_op2_upward( 866; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fma.f32(float [[X:%.*]], float [[Y:%.*]], float undef, metadata !"round.upward", metadata !"fpexcept.ignore") 867; CHECK-NEXT: ret float [[R]] 868; 869 %r = call float @llvm.experimental.constrained.fma.f32(float %x, float %y, float undef, metadata !"round.upward", metadata !"fpexcept.ignore") 870 ret float %r 871} 872 873define float @fma_undef_op2_defaultfp(float %x, float %y) #0 { 874; CHECK-LABEL: @fma_undef_op2_defaultfp( 875; CHECK-NEXT: ret float 0x7FF8000000000000 876; 877 %r = call float @llvm.experimental.constrained.fma.f32(float %x, float %y, float undef, metadata !"round.tonearest", metadata !"fpexcept.ignore") 878 ret float %r 879} 880 881define float @fma_poison_op2_strict(float %x, float %y) #0 { 882; CHECK-LABEL: @fma_poison_op2_strict( 883; CHECK-NEXT: [[R:%.*]] = call float @llvm.experimental.constrained.fma.f32(float [[X:%.*]], float [[Y:%.*]], float poison, metadata !"round.dynamic", metadata !"fpexcept.strict") 884; CHECK-NEXT: ret float poison 885; 886 %r = call float @llvm.experimental.constrained.fma.f32(float %x, float %y, float poison, metadata !"round.dynamic", metadata !"fpexcept.strict") 887 ret float %r 888} 889 890define float @fma_poison_op2_maytrap(float %x, float %y) #0 { 891; CHECK-LABEL: @fma_poison_op2_maytrap( 892; CHECK-NEXT: ret float poison 893; 894 %r = call float @llvm.experimental.constrained.fma.f32(float %x, float %y, float poison, metadata !"round.dynamic", metadata !"fpexcept.maytrap") 895 ret float %r 896} 897 898define float @fma_poison_op2_upward(float %x, float %y) #0 { 899; CHECK-LABEL: @fma_poison_op2_upward( 900; CHECK-NEXT: ret float poison 901; 902 %r = call float @llvm.experimental.constrained.fma.f32(float %x, float %y, float poison, metadata !"round.upward", metadata !"fpexcept.ignore") 903 ret float %r 904} 905 906define float @fma_poison_op2_defaultfp(float %x, float %y) #0 { 907; CHECK-LABEL: @fma_poison_op2_defaultfp( 908; CHECK-NEXT: ret float poison 909; 910 %r = call float @llvm.experimental.constrained.fma.f32(float %x, float %y, float poison, metadata !"round.tonearest", metadata !"fpexcept.ignore") 911 ret float %r 912} 913 914declare float @llvm.experimental.constrained.fadd.f32(float, float, metadata, metadata) 915declare float @llvm.experimental.constrained.fsub.f32(float, float, metadata, metadata) 916declare float @llvm.experimental.constrained.fmul.f32(float, float, metadata, metadata) 917declare float @llvm.experimental.constrained.fdiv.f32(float, float, metadata, metadata) 918declare float @llvm.experimental.constrained.frem.f32(float, float, metadata, metadata) 919declare float @llvm.experimental.constrained.fma.f32(float, float, float, metadata, metadata) 920 921attributes #0 = { strictfp } 922