1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=armv8-eabi | FileCheck %s 3 4declare float @llvm.minnum.f32(float, float) 5declare float @llvm.maxnum.f32(float, float) 6declare float @llvm.minimum.f32(float, float) 7declare float @llvm.maximum.f32(float, float) 8declare <2 x float> @llvm.minnum.v2f32(<2 x float>, <2 x float>) 9declare <2 x float> @llvm.maxnum.v2f32(<2 x float>, <2 x float>) 10declare <2 x float> @llvm.minimum.v2f32(<2 x float>, <2 x float>) 11declare <2 x float> @llvm.maximum.v2f32(<2 x float>, <2 x float>) 12 13define float @test_minnum_const_nan(float %x) { 14; CHECK-LABEL: test_minnum_const_nan: 15; CHECK: @ %bb.0: 16; CHECK-NEXT: bx lr 17 %r = call float @llvm.minnum.f32(float %x, float 0x7fff000000000000) 18 ret float %r 19} 20 21define float @test_maxnum_const_nan(float %x) { 22; CHECK-LABEL: test_maxnum_const_nan: 23; CHECK: @ %bb.0: 24; CHECK-NEXT: bx lr 25 %r = call float @llvm.maxnum.f32(float %x, float 0x7fff000000000000) 26 ret float %r 27} 28 29define float @test_maximum_const_nan(float %x) { 30; CHECK-LABEL: test_maximum_const_nan: 31; CHECK: @ %bb.0: 32; CHECK-NEXT: movw r0, #0 33; CHECK-NEXT: movt r0, #32760 34; CHECK-NEXT: bx lr 35 %r = call float @llvm.maximum.f32(float %x, float 0x7fff000000000000) 36 ret float %r 37} 38 39define float @test_minimum_const_nan(float %x) { 40; CHECK-LABEL: test_minimum_const_nan: 41; CHECK: @ %bb.0: 42; CHECK-NEXT: movw r0, #0 43; CHECK-NEXT: movt r0, #32760 44; CHECK-NEXT: bx lr 45 %r = call float @llvm.minimum.f32(float %x, float 0x7fff000000000000) 46 ret float %r 47} 48 49define float @test_minnum_const_inf(float %x) { 50; CHECK-LABEL: test_minnum_const_inf: 51; CHECK: @ %bb.0: 52; CHECK-NEXT: vldr s0, .LCPI4_0 53; CHECK-NEXT: vmov s2, r0 54; CHECK-NEXT: vminnm.f32 s0, s2, s0 55; CHECK-NEXT: vmov r0, s0 56; CHECK-NEXT: bx lr 57; CHECK-NEXT: .p2align 2 58; CHECK-NEXT: @ %bb.1: 59; CHECK-NEXT: .LCPI4_0: 60; CHECK-NEXT: .long 0x7f800000 @ float +Inf 61 %r = call float @llvm.minnum.f32(float %x, float 0x7ff0000000000000) 62 ret float %r 63} 64 65define float @test_maxnum_const_inf(float %x) { 66; CHECK-LABEL: test_maxnum_const_inf: 67; CHECK: @ %bb.0: 68; CHECK-NEXT: movw r0, #0 69; CHECK-NEXT: movt r0, #32640 70; CHECK-NEXT: bx lr 71 %r = call float @llvm.maxnum.f32(float %x, float 0x7ff0000000000000) 72 ret float %r 73} 74 75define float @test_maximum_const_inf(float %x) { 76; CHECK-LABEL: test_maximum_const_inf: 77; CHECK: @ %bb.0: 78; CHECK-NEXT: vldr s0, .LCPI6_0 79; CHECK-NEXT: vmov s2, r0 80; CHECK-NEXT: vmax.f32 d0, d1, d0 81; CHECK-NEXT: vmov r0, s0 82; CHECK-NEXT: bx lr 83; CHECK-NEXT: .p2align 2 84; CHECK-NEXT: @ %bb.1: 85; CHECK-NEXT: .LCPI6_0: 86; CHECK-NEXT: .long 0x7f800000 @ float +Inf 87 %r = call float @llvm.maximum.f32(float %x, float 0x7ff0000000000000) 88 ret float %r 89} 90 91define float @test_minimum_const_inf(float %x) { 92; CHECK-LABEL: test_minimum_const_inf: 93; CHECK: @ %bb.0: 94; CHECK-NEXT: bx lr 95 %r = call float @llvm.minimum.f32(float %x, float 0x7ff0000000000000) 96 ret float %r 97} 98 99define float @test_minnum_const_neg_inf(float %x) { 100; CHECK-LABEL: test_minnum_const_neg_inf: 101; CHECK: @ %bb.0: 102; CHECK-NEXT: movw r0, #0 103; CHECK-NEXT: movt r0, #65408 104; CHECK-NEXT: bx lr 105 %r = call float @llvm.minnum.f32(float %x, float 0xfff0000000000000) 106 ret float %r 107} 108 109define float @test_maxnum_const_neg_inf(float %x) { 110; CHECK-LABEL: test_maxnum_const_neg_inf: 111; CHECK: @ %bb.0: 112; CHECK-NEXT: vldr s0, .LCPI9_0 113; CHECK-NEXT: vmov s2, r0 114; CHECK-NEXT: vmaxnm.f32 s0, s2, s0 115; CHECK-NEXT: vmov r0, s0 116; CHECK-NEXT: bx lr 117; CHECK-NEXT: .p2align 2 118; CHECK-NEXT: @ %bb.1: 119; CHECK-NEXT: .LCPI9_0: 120; CHECK-NEXT: .long 0xff800000 @ float -Inf 121 %r = call float @llvm.maxnum.f32(float %x, float 0xfff0000000000000) 122 ret float %r 123} 124 125define float @test_maximum_const_neg_inf(float %x) { 126; CHECK-LABEL: test_maximum_const_neg_inf: 127; CHECK: @ %bb.0: 128; CHECK-NEXT: bx lr 129 %r = call float @llvm.maximum.f32(float %x, float 0xfff0000000000000) 130 ret float %r 131} 132 133define float @test_minimum_const_neg_inf(float %x) { 134; CHECK-LABEL: test_minimum_const_neg_inf: 135; CHECK: @ %bb.0: 136; CHECK-NEXT: vldr s0, .LCPI11_0 137; CHECK-NEXT: vmov s2, r0 138; CHECK-NEXT: vmin.f32 d0, d1, d0 139; CHECK-NEXT: vmov r0, s0 140; CHECK-NEXT: bx lr 141; CHECK-NEXT: .p2align 2 142; CHECK-NEXT: @ %bb.1: 143; CHECK-NEXT: .LCPI11_0: 144; CHECK-NEXT: .long 0xff800000 @ float -Inf 145 %r = call float @llvm.minimum.f32(float %x, float 0xfff0000000000000) 146 ret float %r 147} 148 149define float @test_minnum_const_inf_nnan(float %x) { 150; CHECK-LABEL: test_minnum_const_inf_nnan: 151; CHECK: @ %bb.0: 152; CHECK-NEXT: bx lr 153 %r = call nnan float @llvm.minnum.f32(float %x, float 0x7ff0000000000000) 154 ret float %r 155} 156 157define float @test_maxnum_const_inf_nnan(float %x) { 158; CHECK-LABEL: test_maxnum_const_inf_nnan: 159; CHECK: @ %bb.0: 160; CHECK-NEXT: movw r0, #0 161; CHECK-NEXT: movt r0, #32640 162; CHECK-NEXT: bx lr 163 %r = call nnan float @llvm.maxnum.f32(float %x, float 0x7ff0000000000000) 164 ret float %r 165} 166 167define float @test_maximum_const_inf_nnan(float %x) { 168; CHECK-LABEL: test_maximum_const_inf_nnan: 169; CHECK: @ %bb.0: 170; CHECK-NEXT: movw r0, #0 171; CHECK-NEXT: movt r0, #32640 172; CHECK-NEXT: bx lr 173 %r = call nnan float @llvm.maximum.f32(float %x, float 0x7ff0000000000000) 174 ret float %r 175} 176 177define float @test_minimum_const_inf_nnan(float %x) { 178; CHECK-LABEL: test_minimum_const_inf_nnan: 179; CHECK: @ %bb.0: 180; CHECK-NEXT: bx lr 181 %r = call nnan float @llvm.minimum.f32(float %x, float 0x7ff0000000000000) 182 ret float %r 183} 184 185define float @test_minnum_const_inf_nnan_comm(float %x) { 186; CHECK-LABEL: test_minnum_const_inf_nnan_comm: 187; CHECK: @ %bb.0: 188; CHECK-NEXT: bx lr 189 %r = call nnan float @llvm.minnum.f32(float 0x7ff0000000000000, float %x) 190 ret float %r 191} 192 193define float @test_maxnum_const_inf_nnan_comm(float %x) { 194; CHECK-LABEL: test_maxnum_const_inf_nnan_comm: 195; CHECK: @ %bb.0: 196; CHECK-NEXT: movw r0, #0 197; CHECK-NEXT: movt r0, #32640 198; CHECK-NEXT: bx lr 199 %r = call nnan float @llvm.maxnum.f32(float 0x7ff0000000000000, float %x) 200 ret float %r 201} 202 203define float @test_maximum_const_inf_nnan_comm(float %x) { 204; CHECK-LABEL: test_maximum_const_inf_nnan_comm: 205; CHECK: @ %bb.0: 206; CHECK-NEXT: movw r0, #0 207; CHECK-NEXT: movt r0, #32640 208; CHECK-NEXT: bx lr 209 %r = call nnan float @llvm.maximum.f32(float 0x7ff0000000000000, float %x) 210 ret float %r 211} 212 213define float @test_minimum_const_inf_nnan_comm(float %x) { 214; CHECK-LABEL: test_minimum_const_inf_nnan_comm: 215; CHECK: @ %bb.0: 216; CHECK-NEXT: bx lr 217 %r = call nnan float @llvm.minimum.f32(float 0x7ff0000000000000, float %x) 218 ret float %r 219} 220 221define <2 x float> @test_minnum_const_inf_nnan_comm_vec(<2 x float> %x) { 222; CHECK-LABEL: test_minnum_const_inf_nnan_comm_vec: 223; CHECK: @ %bb.0: 224; CHECK-NEXT: bx lr 225 %r = call nnan <2 x float> @llvm.minnum.v2f32(<2 x float> <float 0x7ff0000000000000, float 0x7ff0000000000000>, <2 x float> %x) 226 ret <2 x float> %r 227} 228 229define <2 x float> @test_maxnum_const_inf_nnan_comm_vec(<2 x float> %x) { 230; CHECK-LABEL: test_maxnum_const_inf_nnan_comm_vec: 231; CHECK: @ %bb.0: 232; CHECK-NEXT: vldr d16, .LCPI21_0 233; CHECK-NEXT: vmov r0, r1, d16 234; CHECK-NEXT: bx lr 235; CHECK-NEXT: .p2align 3 236; CHECK-NEXT: @ %bb.1: 237; CHECK-NEXT: .LCPI21_0: 238; CHECK-NEXT: .long 0x7f800000 @ float +Inf 239; CHECK-NEXT: .long 0x7f800000 @ float +Inf 240 %r = call nnan <2 x float> @llvm.maxnum.v2f32(<2 x float> <float 0x7ff0000000000000, float 0x7ff0000000000000>, <2 x float> %x) 241 ret <2 x float> %r 242} 243 244define <2 x float> @test_maximum_const_inf_nnan_comm_vec(<2 x float> %x) { 245; CHECK-LABEL: test_maximum_const_inf_nnan_comm_vec: 246; CHECK: @ %bb.0: 247; CHECK-NEXT: vldr d16, .LCPI22_0 248; CHECK-NEXT: vmov r0, r1, d16 249; CHECK-NEXT: bx lr 250; CHECK-NEXT: .p2align 3 251; CHECK-NEXT: @ %bb.1: 252; CHECK-NEXT: .LCPI22_0: 253; CHECK-NEXT: .long 0x7f800000 @ float +Inf 254; CHECK-NEXT: .long 0x7f800000 @ float +Inf 255 %r = call nnan <2 x float> @llvm.maximum.v2f32(<2 x float> <float 0x7ff0000000000000, float 0x7ff0000000000000>, <2 x float> %x) 256 ret <2 x float> %r 257} 258 259define <2 x float> @test_minimum_const_inf_nnan_comm_vec(<2 x float> %x) { 260; CHECK-LABEL: test_minimum_const_inf_nnan_comm_vec: 261; CHECK: @ %bb.0: 262; CHECK-NEXT: bx lr 263 %r = call nnan <2 x float> @llvm.minimum.v2f32(<2 x float> <float 0x7ff0000000000000, float 0x7ff0000000000000>, <2 x float> %x) 264 ret <2 x float> %r 265} 266 267define float @test_minnum_const_neg_inf_nnan(float %x) { 268; CHECK-LABEL: test_minnum_const_neg_inf_nnan: 269; CHECK: @ %bb.0: 270; CHECK-NEXT: movw r0, #0 271; CHECK-NEXT: movt r0, #65408 272; CHECK-NEXT: bx lr 273 %r = call nnan float @llvm.minnum.f32(float %x, float 0xfff0000000000000) 274 ret float %r 275} 276 277define float @test_maxnum_const_neg_inf_nnan(float %x) { 278; CHECK-LABEL: test_maxnum_const_neg_inf_nnan: 279; CHECK: @ %bb.0: 280; CHECK-NEXT: bx lr 281 %r = call nnan float @llvm.maxnum.f32(float %x, float 0xfff0000000000000) 282 ret float %r 283} 284 285define float @test_maximum_const_neg_inf_nnan(float %x) { 286; CHECK-LABEL: test_maximum_const_neg_inf_nnan: 287; CHECK: @ %bb.0: 288; CHECK-NEXT: bx lr 289 %r = call nnan float @llvm.maximum.f32(float %x, float 0xfff0000000000000) 290 ret float %r 291} 292 293define float @test_minimum_const_neg_inf_nnan(float %x) { 294; CHECK-LABEL: test_minimum_const_neg_inf_nnan: 295; CHECK: @ %bb.0: 296; CHECK-NEXT: movw r0, #0 297; CHECK-NEXT: movt r0, #65408 298; CHECK-NEXT: bx lr 299 %r = call nnan float @llvm.minimum.f32(float %x, float 0xfff0000000000000) 300 ret float %r 301} 302 303define float @test_minnum_const_max(float %x) { 304; CHECK-LABEL: test_minnum_const_max: 305; CHECK: @ %bb.0: 306; CHECK-NEXT: vldr s0, .LCPI28_0 307; CHECK-NEXT: vmov s2, r0 308; CHECK-NEXT: vminnm.f32 s0, s2, s0 309; CHECK-NEXT: vmov r0, s0 310; CHECK-NEXT: bx lr 311; CHECK-NEXT: .p2align 2 312; CHECK-NEXT: @ %bb.1: 313; CHECK-NEXT: .LCPI28_0: 314; CHECK-NEXT: .long 0x7f7fffff @ float 3.40282347E+38 315 %r = call float @llvm.minnum.f32(float %x, float 0x47efffffe0000000) 316 ret float %r 317} 318 319define float @test_maxnum_const_max(float %x) { 320; CHECK-LABEL: test_maxnum_const_max: 321; CHECK: @ %bb.0: 322; CHECK-NEXT: vldr s0, .LCPI29_0 323; CHECK-NEXT: vmov s2, r0 324; CHECK-NEXT: vmaxnm.f32 s0, s2, s0 325; CHECK-NEXT: vmov r0, s0 326; CHECK-NEXT: bx lr 327; CHECK-NEXT: .p2align 2 328; CHECK-NEXT: @ %bb.1: 329; CHECK-NEXT: .LCPI29_0: 330; CHECK-NEXT: .long 0x7f7fffff @ float 3.40282347E+38 331 %r = call float @llvm.maxnum.f32(float %x, float 0x47efffffe0000000) 332 ret float %r 333} 334 335define float @test_maximum_const_max(float %x) { 336; CHECK-LABEL: test_maximum_const_max: 337; CHECK: @ %bb.0: 338; CHECK-NEXT: vldr s0, .LCPI30_0 339; CHECK-NEXT: vmov s2, r0 340; CHECK-NEXT: vmax.f32 d0, d1, d0 341; CHECK-NEXT: vmov r0, s0 342; CHECK-NEXT: bx lr 343; CHECK-NEXT: .p2align 2 344; CHECK-NEXT: @ %bb.1: 345; CHECK-NEXT: .LCPI30_0: 346; CHECK-NEXT: .long 0x7f7fffff @ float 3.40282347E+38 347 %r = call float @llvm.maximum.f32(float %x, float 0x47efffffe0000000) 348 ret float %r 349} 350 351define float @test_minimum_const_max(float %x) { 352; CHECK-LABEL: test_minimum_const_max: 353; CHECK: @ %bb.0: 354; CHECK-NEXT: vldr s0, .LCPI31_0 355; CHECK-NEXT: vmov s2, r0 356; CHECK-NEXT: vmin.f32 d0, d1, d0 357; CHECK-NEXT: vmov r0, s0 358; CHECK-NEXT: bx lr 359; CHECK-NEXT: .p2align 2 360; CHECK-NEXT: @ %bb.1: 361; CHECK-NEXT: .LCPI31_0: 362; CHECK-NEXT: .long 0x7f7fffff @ float 3.40282347E+38 363 %r = call float @llvm.minimum.f32(float %x, float 0x47efffffe0000000) 364 ret float %r 365} 366 367define float @test_minnum_const_neg_max(float %x) { 368; CHECK-LABEL: test_minnum_const_neg_max: 369; CHECK: @ %bb.0: 370; CHECK-NEXT: vldr s0, .LCPI32_0 371; CHECK-NEXT: vmov s2, r0 372; CHECK-NEXT: vminnm.f32 s0, s2, s0 373; CHECK-NEXT: vmov r0, s0 374; CHECK-NEXT: bx lr 375; CHECK-NEXT: .p2align 2 376; CHECK-NEXT: @ %bb.1: 377; CHECK-NEXT: .LCPI32_0: 378; CHECK-NEXT: .long 0xff7fffff @ float -3.40282347E+38 379 %r = call float @llvm.minnum.f32(float %x, float 0xc7efffffe0000000) 380 ret float %r 381} 382 383define float @test_maxnum_const_neg_max(float %x) { 384; CHECK-LABEL: test_maxnum_const_neg_max: 385; CHECK: @ %bb.0: 386; CHECK-NEXT: vldr s0, .LCPI33_0 387; CHECK-NEXT: vmov s2, r0 388; CHECK-NEXT: vmaxnm.f32 s0, s2, s0 389; CHECK-NEXT: vmov r0, s0 390; CHECK-NEXT: bx lr 391; CHECK-NEXT: .p2align 2 392; CHECK-NEXT: @ %bb.1: 393; CHECK-NEXT: .LCPI33_0: 394; CHECK-NEXT: .long 0xff7fffff @ float -3.40282347E+38 395 %r = call float @llvm.maxnum.f32(float %x, float 0xc7efffffe0000000) 396 ret float %r 397} 398 399define float @test_maximum_const_neg_max(float %x) { 400; CHECK-LABEL: test_maximum_const_neg_max: 401; CHECK: @ %bb.0: 402; CHECK-NEXT: vldr s0, .LCPI34_0 403; CHECK-NEXT: vmov s2, r0 404; CHECK-NEXT: vmax.f32 d0, d1, d0 405; CHECK-NEXT: vmov r0, s0 406; CHECK-NEXT: bx lr 407; CHECK-NEXT: .p2align 2 408; CHECK-NEXT: @ %bb.1: 409; CHECK-NEXT: .LCPI34_0: 410; CHECK-NEXT: .long 0xff7fffff @ float -3.40282347E+38 411 %r = call float @llvm.maximum.f32(float %x, float 0xc7efffffe0000000) 412 ret float %r 413} 414 415define float @test_minimum_const_neg_max(float %x) { 416; CHECK-LABEL: test_minimum_const_neg_max: 417; CHECK: @ %bb.0: 418; CHECK-NEXT: vldr s0, .LCPI35_0 419; CHECK-NEXT: vmov s2, r0 420; CHECK-NEXT: vmin.f32 d0, d1, d0 421; CHECK-NEXT: vmov r0, s0 422; CHECK-NEXT: bx lr 423; CHECK-NEXT: .p2align 2 424; CHECK-NEXT: @ %bb.1: 425; CHECK-NEXT: .LCPI35_0: 426; CHECK-NEXT: .long 0xff7fffff @ float -3.40282347E+38 427 %r = call float @llvm.minimum.f32(float %x, float 0xc7efffffe0000000) 428 ret float %r 429} 430 431define float @test_minnum_const_max_ninf(float %x) { 432; CHECK-LABEL: test_minnum_const_max_ninf: 433; CHECK: @ %bb.0: 434; CHECK-NEXT: vldr s0, .LCPI36_0 435; CHECK-NEXT: vmov s2, r0 436; CHECK-NEXT: vminnm.f32 s0, s2, s0 437; CHECK-NEXT: vmov r0, s0 438; CHECK-NEXT: bx lr 439; CHECK-NEXT: .p2align 2 440; CHECK-NEXT: @ %bb.1: 441; CHECK-NEXT: .LCPI36_0: 442; CHECK-NEXT: .long 0x7f7fffff @ float 3.40282347E+38 443 %r = call ninf float @llvm.minnum.f32(float %x, float 0x47efffffe0000000) 444 ret float %r 445} 446 447define float @test_maxnum_const_max_ninf(float %x) { 448; CHECK-LABEL: test_maxnum_const_max_ninf: 449; CHECK: @ %bb.0: 450; CHECK-NEXT: movw r0, #65535 451; CHECK-NEXT: movt r0, #32639 452; CHECK-NEXT: bx lr 453 %r = call ninf float @llvm.maxnum.f32(float %x, float 0x47efffffe0000000) 454 ret float %r 455} 456 457define float @test_maximum_const_max_ninf(float %x) { 458; CHECK-LABEL: test_maximum_const_max_ninf: 459; CHECK: @ %bb.0: 460; CHECK-NEXT: vldr s0, .LCPI38_0 461; CHECK-NEXT: vmov s2, r0 462; CHECK-NEXT: vmax.f32 d0, d1, d0 463; CHECK-NEXT: vmov r0, s0 464; CHECK-NEXT: bx lr 465; CHECK-NEXT: .p2align 2 466; CHECK-NEXT: @ %bb.1: 467; CHECK-NEXT: .LCPI38_0: 468; CHECK-NEXT: .long 0x7f7fffff @ float 3.40282347E+38 469 %r = call ninf float @llvm.maximum.f32(float %x, float 0x47efffffe0000000) 470 ret float %r 471} 472 473define float @test_minimum_const_max_ninf(float %x) { 474; CHECK-LABEL: test_minimum_const_max_ninf: 475; CHECK: @ %bb.0: 476; CHECK-NEXT: bx lr 477 %r = call ninf float @llvm.minimum.f32(float %x, float 0x47efffffe0000000) 478 ret float %r 479} 480 481define float @test_minnum_const_neg_max_ninf(float %x) { 482; CHECK-LABEL: test_minnum_const_neg_max_ninf: 483; CHECK: @ %bb.0: 484; CHECK-NEXT: mvn r0, #8388608 485; CHECK-NEXT: bx lr 486 %r = call ninf float @llvm.minnum.f32(float %x, float 0xc7efffffe0000000) 487 ret float %r 488} 489 490define float @test_maxnum_const_neg_max_ninf(float %x) { 491; CHECK-LABEL: test_maxnum_const_neg_max_ninf: 492; CHECK: @ %bb.0: 493; CHECK-NEXT: vldr s0, .LCPI41_0 494; CHECK-NEXT: vmov s2, r0 495; CHECK-NEXT: vmaxnm.f32 s0, s2, s0 496; CHECK-NEXT: vmov r0, s0 497; CHECK-NEXT: bx lr 498; CHECK-NEXT: .p2align 2 499; CHECK-NEXT: @ %bb.1: 500; CHECK-NEXT: .LCPI41_0: 501; CHECK-NEXT: .long 0xff7fffff @ float -3.40282347E+38 502 %r = call ninf float @llvm.maxnum.f32(float %x, float 0xc7efffffe0000000) 503 ret float %r 504} 505 506define float @test_maximum_const_neg_max_ninf(float %x) { 507; CHECK-LABEL: test_maximum_const_neg_max_ninf: 508; CHECK: @ %bb.0: 509; CHECK-NEXT: bx lr 510 %r = call ninf float @llvm.maximum.f32(float %x, float 0xc7efffffe0000000) 511 ret float %r 512} 513 514define float @test_minimum_const_neg_max_ninf(float %x) { 515; CHECK-LABEL: test_minimum_const_neg_max_ninf: 516; CHECK: @ %bb.0: 517; CHECK-NEXT: vldr s0, .LCPI43_0 518; CHECK-NEXT: vmov s2, r0 519; CHECK-NEXT: vmin.f32 d0, d1, d0 520; CHECK-NEXT: vmov r0, s0 521; CHECK-NEXT: bx lr 522; CHECK-NEXT: .p2align 2 523; CHECK-NEXT: @ %bb.1: 524; CHECK-NEXT: .LCPI43_0: 525; CHECK-NEXT: .long 0xff7fffff @ float -3.40282347E+38 526 %r = call ninf float @llvm.minimum.f32(float %x, float 0xc7efffffe0000000) 527 ret float %r 528} 529 530define float @test_minnum_const_max_nnan_ninf(float %x) { 531; CHECK-LABEL: test_minnum_const_max_nnan_ninf: 532; CHECK: @ %bb.0: 533; CHECK-NEXT: bx lr 534 %r = call nnan ninf float @llvm.minnum.f32(float %x, float 0x47efffffe0000000) 535 ret float %r 536} 537 538define float @test_maxnum_const_max_nnan_ninf(float %x) { 539; CHECK-LABEL: test_maxnum_const_max_nnan_ninf: 540; CHECK: @ %bb.0: 541; CHECK-NEXT: movw r0, #65535 542; CHECK-NEXT: movt r0, #32639 543; CHECK-NEXT: bx lr 544 %r = call nnan ninf float @llvm.maxnum.f32(float %x, float 0x47efffffe0000000) 545 ret float %r 546} 547 548define float @test_maximum_const_max_nnan_ninf(float %x) { 549; CHECK-LABEL: test_maximum_const_max_nnan_ninf: 550; CHECK: @ %bb.0: 551; CHECK-NEXT: movw r0, #65535 552; CHECK-NEXT: movt r0, #32639 553; CHECK-NEXT: bx lr 554 %r = call nnan ninf float @llvm.maximum.f32(float %x, float 0x47efffffe0000000) 555 ret float %r 556} 557 558define float @test_minimum_const_max_nnan_ninf(float %x) { 559; CHECK-LABEL: test_minimum_const_max_nnan_ninf: 560; CHECK: @ %bb.0: 561; CHECK-NEXT: bx lr 562 %r = call nnan ninf float @llvm.minimum.f32(float %x, float 0x47efffffe0000000) 563 ret float %r 564} 565 566define float @test_minnum_const_neg_max_nnan_ninf(float %x) { 567; CHECK-LABEL: test_minnum_const_neg_max_nnan_ninf: 568; CHECK: @ %bb.0: 569; CHECK-NEXT: mvn r0, #8388608 570; CHECK-NEXT: bx lr 571 %r = call nnan ninf float @llvm.minnum.f32(float %x, float 0xc7efffffe0000000) 572 ret float %r 573} 574 575define float @test_maxnum_const_neg_max_nnan_ninf(float %x) { 576; CHECK-LABEL: test_maxnum_const_neg_max_nnan_ninf: 577; CHECK: @ %bb.0: 578; CHECK-NEXT: bx lr 579 %r = call nnan ninf float @llvm.maxnum.f32(float %x, float 0xc7efffffe0000000) 580 ret float %r 581} 582 583define float @test_maximum_const_neg_max_nnan_ninf(float %x) { 584; CHECK-LABEL: test_maximum_const_neg_max_nnan_ninf: 585; CHECK: @ %bb.0: 586; CHECK-NEXT: bx lr 587 %r = call nnan ninf float @llvm.maximum.f32(float %x, float 0xc7efffffe0000000) 588 ret float %r 589} 590 591define float @test_minimum_const_neg_max_nnan_ninf(float %x) { 592; CHECK-LABEL: test_minimum_const_neg_max_nnan_ninf: 593; CHECK: @ %bb.0: 594; CHECK-NEXT: mvn r0, #8388608 595; CHECK-NEXT: bx lr 596 %r = call nnan ninf float @llvm.minimum.f32(float %x, float 0xc7efffffe0000000) 597 ret float %r 598} 599