15a4a05c8SNikita Popov; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 25a4a05c8SNikita Popov; RUN: llc < %s -mtriple=armv8-eabi | FileCheck %s 35a4a05c8SNikita Popov 45a4a05c8SNikita Popovdeclare float @llvm.minnum.f32(float, float) 55a4a05c8SNikita Popovdeclare float @llvm.maxnum.f32(float, float) 65a4a05c8SNikita Popovdeclare float @llvm.minimum.f32(float, float) 75a4a05c8SNikita Popovdeclare float @llvm.maximum.f32(float, float) 8cb3e1dd6SNikita Popovdeclare <2 x float> @llvm.minnum.v2f32(<2 x float>, <2 x float>) 9cb3e1dd6SNikita Popovdeclare <2 x float> @llvm.maxnum.v2f32(<2 x float>, <2 x float>) 10cb3e1dd6SNikita Popovdeclare <2 x float> @llvm.minimum.v2f32(<2 x float>, <2 x float>) 11cb3e1dd6SNikita Popovdeclare <2 x float> @llvm.maximum.v2f32(<2 x float>, <2 x float>) 125a4a05c8SNikita Popov 135a4a05c8SNikita Popovdefine float @test_minnum_const_nan(float %x) { 145a4a05c8SNikita Popov; CHECK-LABEL: test_minnum_const_nan: 155a4a05c8SNikita Popov; CHECK: @ %bb.0: 165a4a05c8SNikita Popov; CHECK-NEXT: bx lr 175a4a05c8SNikita Popov %r = call float @llvm.minnum.f32(float %x, float 0x7fff000000000000) 185a4a05c8SNikita Popov ret float %r 195a4a05c8SNikita Popov} 205a4a05c8SNikita Popov 215a4a05c8SNikita Popovdefine float @test_maxnum_const_nan(float %x) { 225a4a05c8SNikita Popov; CHECK-LABEL: test_maxnum_const_nan: 235a4a05c8SNikita Popov; CHECK: @ %bb.0: 245a4a05c8SNikita Popov; CHECK-NEXT: bx lr 255a4a05c8SNikita Popov %r = call float @llvm.maxnum.f32(float %x, float 0x7fff000000000000) 265a4a05c8SNikita Popov ret float %r 275a4a05c8SNikita Popov} 285a4a05c8SNikita Popov 295a4a05c8SNikita Popovdefine float @test_maximum_const_nan(float %x) { 305a4a05c8SNikita Popov; CHECK-LABEL: test_maximum_const_nan: 315a4a05c8SNikita Popov; CHECK: @ %bb.0: 320a5dc7efSNikita Popov; CHECK-NEXT: movw r0, #0 330a5dc7efSNikita Popov; CHECK-NEXT: movt r0, #32760 345a4a05c8SNikita Popov; CHECK-NEXT: bx lr 355a4a05c8SNikita Popov %r = call float @llvm.maximum.f32(float %x, float 0x7fff000000000000) 365a4a05c8SNikita Popov ret float %r 375a4a05c8SNikita Popov} 385a4a05c8SNikita Popov 395a4a05c8SNikita Popovdefine float @test_minimum_const_nan(float %x) { 405a4a05c8SNikita Popov; CHECK-LABEL: test_minimum_const_nan: 415a4a05c8SNikita Popov; CHECK: @ %bb.0: 420a5dc7efSNikita Popov; CHECK-NEXT: movw r0, #0 430a5dc7efSNikita Popov; CHECK-NEXT: movt r0, #32760 445a4a05c8SNikita Popov; CHECK-NEXT: bx lr 455a4a05c8SNikita Popov %r = call float @llvm.minimum.f32(float %x, float 0x7fff000000000000) 465a4a05c8SNikita Popov ret float %r 475a4a05c8SNikita Popov} 48c2f8bc98SNikita Popov 49c2f8bc98SNikita Popovdefine float @test_minnum_const_inf(float %x) { 50c2f8bc98SNikita Popov; CHECK-LABEL: test_minnum_const_inf: 51c2f8bc98SNikita Popov; CHECK: @ %bb.0: 52c2f8bc98SNikita Popov; CHECK-NEXT: vldr s0, .LCPI4_0 53c2f8bc98SNikita Popov; CHECK-NEXT: vmov s2, r0 54c2f8bc98SNikita Popov; CHECK-NEXT: vminnm.f32 s0, s2, s0 55c2f8bc98SNikita Popov; CHECK-NEXT: vmov r0, s0 56c2f8bc98SNikita Popov; CHECK-NEXT: bx lr 57c2f8bc98SNikita Popov; CHECK-NEXT: .p2align 2 58c2f8bc98SNikita Popov; CHECK-NEXT: @ %bb.1: 59c2f8bc98SNikita Popov; CHECK-NEXT: .LCPI4_0: 60c2f8bc98SNikita Popov; CHECK-NEXT: .long 0x7f800000 @ float +Inf 61c2f8bc98SNikita Popov %r = call float @llvm.minnum.f32(float %x, float 0x7ff0000000000000) 62c2f8bc98SNikita Popov ret float %r 63c2f8bc98SNikita Popov} 64c2f8bc98SNikita Popov 65c2f8bc98SNikita Popovdefine float @test_maxnum_const_inf(float %x) { 66c2f8bc98SNikita Popov; CHECK-LABEL: test_maxnum_const_inf: 67c2f8bc98SNikita Popov; CHECK: @ %bb.0: 68*8e69c3cdSNikita Popov; CHECK-NEXT: movw r0, #0 69*8e69c3cdSNikita Popov; CHECK-NEXT: movt r0, #32640 70c2f8bc98SNikita Popov; CHECK-NEXT: bx lr 71c2f8bc98SNikita Popov %r = call float @llvm.maxnum.f32(float %x, float 0x7ff0000000000000) 72c2f8bc98SNikita Popov ret float %r 73c2f8bc98SNikita Popov} 74c2f8bc98SNikita Popov 75c2f8bc98SNikita Popovdefine float @test_maximum_const_inf(float %x) { 76c2f8bc98SNikita Popov; CHECK-LABEL: test_maximum_const_inf: 77c2f8bc98SNikita Popov; CHECK: @ %bb.0: 78c2f8bc98SNikita Popov; CHECK-NEXT: vldr s0, .LCPI6_0 79c2f8bc98SNikita Popov; CHECK-NEXT: vmov s2, r0 80c2f8bc98SNikita Popov; CHECK-NEXT: vmax.f32 d0, d1, d0 81c2f8bc98SNikita Popov; CHECK-NEXT: vmov r0, s0 82c2f8bc98SNikita Popov; CHECK-NEXT: bx lr 83c2f8bc98SNikita Popov; CHECK-NEXT: .p2align 2 84c2f8bc98SNikita Popov; CHECK-NEXT: @ %bb.1: 85c2f8bc98SNikita Popov; CHECK-NEXT: .LCPI6_0: 86c2f8bc98SNikita Popov; CHECK-NEXT: .long 0x7f800000 @ float +Inf 87c2f8bc98SNikita Popov %r = call float @llvm.maximum.f32(float %x, float 0x7ff0000000000000) 88c2f8bc98SNikita Popov ret float %r 89c2f8bc98SNikita Popov} 90c2f8bc98SNikita Popov 91c2f8bc98SNikita Popovdefine float @test_minimum_const_inf(float %x) { 92c2f8bc98SNikita Popov; CHECK-LABEL: test_minimum_const_inf: 93c2f8bc98SNikita Popov; CHECK: @ %bb.0: 94c2f8bc98SNikita Popov; CHECK-NEXT: bx lr 95c2f8bc98SNikita Popov %r = call float @llvm.minimum.f32(float %x, float 0x7ff0000000000000) 96c2f8bc98SNikita Popov ret float %r 97c2f8bc98SNikita Popov} 98c2f8bc98SNikita Popov 992c85f5e6SNikita Popovdefine float @test_minnum_const_neg_inf(float %x) { 1002c85f5e6SNikita Popov; CHECK-LABEL: test_minnum_const_neg_inf: 101c2f8bc98SNikita Popov; CHECK: @ %bb.0: 102*8e69c3cdSNikita Popov; CHECK-NEXT: movw r0, #0 103*8e69c3cdSNikita Popov; CHECK-NEXT: movt r0, #65408 104c2f8bc98SNikita Popov; CHECK-NEXT: bx lr 105c2f8bc98SNikita Popov %r = call float @llvm.minnum.f32(float %x, float 0xfff0000000000000) 106c2f8bc98SNikita Popov ret float %r 107c2f8bc98SNikita Popov} 108c2f8bc98SNikita Popov 1092c85f5e6SNikita Popovdefine float @test_maxnum_const_neg_inf(float %x) { 1102c85f5e6SNikita Popov; CHECK-LABEL: test_maxnum_const_neg_inf: 111c2f8bc98SNikita Popov; CHECK: @ %bb.0: 112c2f8bc98SNikita Popov; CHECK-NEXT: vldr s0, .LCPI9_0 113c2f8bc98SNikita Popov; CHECK-NEXT: vmov s2, r0 114c2f8bc98SNikita Popov; CHECK-NEXT: vmaxnm.f32 s0, s2, s0 115c2f8bc98SNikita Popov; CHECK-NEXT: vmov r0, s0 116c2f8bc98SNikita Popov; CHECK-NEXT: bx lr 117c2f8bc98SNikita Popov; CHECK-NEXT: .p2align 2 118c2f8bc98SNikita Popov; CHECK-NEXT: @ %bb.1: 119c2f8bc98SNikita Popov; CHECK-NEXT: .LCPI9_0: 120c2f8bc98SNikita Popov; CHECK-NEXT: .long 0xff800000 @ float -Inf 121c2f8bc98SNikita Popov %r = call float @llvm.maxnum.f32(float %x, float 0xfff0000000000000) 122c2f8bc98SNikita Popov ret float %r 123c2f8bc98SNikita Popov} 124c2f8bc98SNikita Popov 1252c85f5e6SNikita Popovdefine float @test_maximum_const_neg_inf(float %x) { 1262c85f5e6SNikita Popov; CHECK-LABEL: test_maximum_const_neg_inf: 127c2f8bc98SNikita Popov; CHECK: @ %bb.0: 128c2f8bc98SNikita Popov; CHECK-NEXT: bx lr 129c2f8bc98SNikita Popov %r = call float @llvm.maximum.f32(float %x, float 0xfff0000000000000) 130c2f8bc98SNikita Popov ret float %r 131c2f8bc98SNikita Popov} 132c2f8bc98SNikita Popov 1332c85f5e6SNikita Popovdefine float @test_minimum_const_neg_inf(float %x) { 1342c85f5e6SNikita Popov; CHECK-LABEL: test_minimum_const_neg_inf: 135c2f8bc98SNikita Popov; CHECK: @ %bb.0: 136c2f8bc98SNikita Popov; CHECK-NEXT: vldr s0, .LCPI11_0 137c2f8bc98SNikita Popov; CHECK-NEXT: vmov s2, r0 138c2f8bc98SNikita Popov; CHECK-NEXT: vmin.f32 d0, d1, d0 139c2f8bc98SNikita Popov; CHECK-NEXT: vmov r0, s0 140c2f8bc98SNikita Popov; CHECK-NEXT: bx lr 141c2f8bc98SNikita Popov; CHECK-NEXT: .p2align 2 142c2f8bc98SNikita Popov; CHECK-NEXT: @ %bb.1: 143c2f8bc98SNikita Popov; CHECK-NEXT: .LCPI11_0: 144c2f8bc98SNikita Popov; CHECK-NEXT: .long 0xff800000 @ float -Inf 145c2f8bc98SNikita Popov %r = call float @llvm.minimum.f32(float %x, float 0xfff0000000000000) 146c2f8bc98SNikita Popov ret float %r 147c2f8bc98SNikita Popov} 148c2f8bc98SNikita Popov 149c2f8bc98SNikita Popovdefine float @test_minnum_const_inf_nnan(float %x) { 150c2f8bc98SNikita Popov; CHECK-LABEL: test_minnum_const_inf_nnan: 151c2f8bc98SNikita Popov; CHECK: @ %bb.0: 152c2f8bc98SNikita Popov; CHECK-NEXT: bx lr 153c2f8bc98SNikita Popov %r = call nnan float @llvm.minnum.f32(float %x, float 0x7ff0000000000000) 154c2f8bc98SNikita Popov ret float %r 155c2f8bc98SNikita Popov} 156c2f8bc98SNikita Popov 157c2f8bc98SNikita Popovdefine float @test_maxnum_const_inf_nnan(float %x) { 158c2f8bc98SNikita Popov; CHECK-LABEL: test_maxnum_const_inf_nnan: 159c2f8bc98SNikita Popov; CHECK: @ %bb.0: 160*8e69c3cdSNikita Popov; CHECK-NEXT: movw r0, #0 161*8e69c3cdSNikita Popov; CHECK-NEXT: movt r0, #32640 162c2f8bc98SNikita Popov; CHECK-NEXT: bx lr 163c2f8bc98SNikita Popov %r = call nnan float @llvm.maxnum.f32(float %x, float 0x7ff0000000000000) 164c2f8bc98SNikita Popov ret float %r 165c2f8bc98SNikita Popov} 166c2f8bc98SNikita Popov 167c2f8bc98SNikita Popovdefine float @test_maximum_const_inf_nnan(float %x) { 168c2f8bc98SNikita Popov; CHECK-LABEL: test_maximum_const_inf_nnan: 169c2f8bc98SNikita Popov; CHECK: @ %bb.0: 170*8e69c3cdSNikita Popov; CHECK-NEXT: movw r0, #0 171*8e69c3cdSNikita Popov; CHECK-NEXT: movt r0, #32640 172c2f8bc98SNikita Popov; CHECK-NEXT: bx lr 173c2f8bc98SNikita Popov %r = call nnan float @llvm.maximum.f32(float %x, float 0x7ff0000000000000) 174c2f8bc98SNikita Popov ret float %r 175c2f8bc98SNikita Popov} 176c2f8bc98SNikita Popov 177c2f8bc98SNikita Popovdefine float @test_minimum_const_inf_nnan(float %x) { 178c2f8bc98SNikita Popov; CHECK-LABEL: test_minimum_const_inf_nnan: 179c2f8bc98SNikita Popov; CHECK: @ %bb.0: 180c2f8bc98SNikita Popov; CHECK-NEXT: bx lr 181c2f8bc98SNikita Popov %r = call nnan float @llvm.minimum.f32(float %x, float 0x7ff0000000000000) 182c2f8bc98SNikita Popov ret float %r 183c2f8bc98SNikita Popov} 184c2f8bc98SNikita Popov 185cb3e1dd6SNikita Popovdefine float @test_minnum_const_inf_nnan_comm(float %x) { 186cb3e1dd6SNikita Popov; CHECK-LABEL: test_minnum_const_inf_nnan_comm: 187c2f8bc98SNikita Popov; CHECK: @ %bb.0: 188c2f8bc98SNikita Popov; CHECK-NEXT: bx lr 189cb3e1dd6SNikita Popov %r = call nnan float @llvm.minnum.f32(float 0x7ff0000000000000, float %x) 190c2f8bc98SNikita Popov ret float %r 191c2f8bc98SNikita Popov} 192c2f8bc98SNikita Popov 193cb3e1dd6SNikita Popovdefine float @test_maxnum_const_inf_nnan_comm(float %x) { 194cb3e1dd6SNikita Popov; CHECK-LABEL: test_maxnum_const_inf_nnan_comm: 195c2f8bc98SNikita Popov; CHECK: @ %bb.0: 196*8e69c3cdSNikita Popov; CHECK-NEXT: movw r0, #0 197*8e69c3cdSNikita Popov; CHECK-NEXT: movt r0, #32640 198c2f8bc98SNikita Popov; CHECK-NEXT: bx lr 199cb3e1dd6SNikita Popov %r = call nnan float @llvm.maxnum.f32(float 0x7ff0000000000000, float %x) 200c2f8bc98SNikita Popov ret float %r 201c2f8bc98SNikita Popov} 202c2f8bc98SNikita Popov 203cb3e1dd6SNikita Popovdefine float @test_maximum_const_inf_nnan_comm(float %x) { 204cb3e1dd6SNikita Popov; CHECK-LABEL: test_maximum_const_inf_nnan_comm: 205c2f8bc98SNikita Popov; CHECK: @ %bb.0: 206*8e69c3cdSNikita Popov; CHECK-NEXT: movw r0, #0 207*8e69c3cdSNikita Popov; CHECK-NEXT: movt r0, #32640 208c2f8bc98SNikita Popov; CHECK-NEXT: bx lr 209cb3e1dd6SNikita Popov %r = call nnan float @llvm.maximum.f32(float 0x7ff0000000000000, float %x) 210c2f8bc98SNikita Popov ret float %r 211c2f8bc98SNikita Popov} 212c2f8bc98SNikita Popov 213cb3e1dd6SNikita Popovdefine float @test_minimum_const_inf_nnan_comm(float %x) { 214cb3e1dd6SNikita Popov; CHECK-LABEL: test_minimum_const_inf_nnan_comm: 215c2f8bc98SNikita Popov; CHECK: @ %bb.0: 216c2f8bc98SNikita Popov; CHECK-NEXT: bx lr 217cb3e1dd6SNikita Popov %r = call nnan float @llvm.minimum.f32(float 0x7ff0000000000000, float %x) 218c2f8bc98SNikita Popov ret float %r 219c2f8bc98SNikita Popov} 2202c85f5e6SNikita Popov 221cb3e1dd6SNikita Popovdefine <2 x float> @test_minnum_const_inf_nnan_comm_vec(<2 x float> %x) { 222cb3e1dd6SNikita Popov; CHECK-LABEL: test_minnum_const_inf_nnan_comm_vec: 2232c85f5e6SNikita Popov; CHECK: @ %bb.0: 2242c85f5e6SNikita Popov; CHECK-NEXT: bx lr 225cb3e1dd6SNikita Popov %r = call nnan <2 x float> @llvm.minnum.v2f32(<2 x float> <float 0x7ff0000000000000, float 0x7ff0000000000000>, <2 x float> %x) 226cb3e1dd6SNikita Popov ret <2 x float> %r 2272c85f5e6SNikita Popov} 2282c85f5e6SNikita Popov 229cb3e1dd6SNikita Popovdefine <2 x float> @test_maxnum_const_inf_nnan_comm_vec(<2 x float> %x) { 230cb3e1dd6SNikita Popov; CHECK-LABEL: test_maxnum_const_inf_nnan_comm_vec: 2312c85f5e6SNikita Popov; CHECK: @ %bb.0: 232cb3e1dd6SNikita Popov; CHECK-NEXT: vldr d16, .LCPI21_0 233cb3e1dd6SNikita Popov; CHECK-NEXT: vmov r0, r1, d16 2342c85f5e6SNikita Popov; CHECK-NEXT: bx lr 235cb3e1dd6SNikita Popov; CHECK-NEXT: .p2align 3 2362c85f5e6SNikita Popov; CHECK-NEXT: @ %bb.1: 2372c85f5e6SNikita Popov; CHECK-NEXT: .LCPI21_0: 238cb3e1dd6SNikita Popov; CHECK-NEXT: .long 0x7f800000 @ float +Inf 239cb3e1dd6SNikita Popov; CHECK-NEXT: .long 0x7f800000 @ float +Inf 240cb3e1dd6SNikita Popov %r = call nnan <2 x float> @llvm.maxnum.v2f32(<2 x float> <float 0x7ff0000000000000, float 0x7ff0000000000000>, <2 x float> %x) 241cb3e1dd6SNikita Popov ret <2 x float> %r 2422c85f5e6SNikita Popov} 2432c85f5e6SNikita Popov 244cb3e1dd6SNikita Popovdefine <2 x float> @test_maximum_const_inf_nnan_comm_vec(<2 x float> %x) { 245cb3e1dd6SNikita Popov; CHECK-LABEL: test_maximum_const_inf_nnan_comm_vec: 2462c85f5e6SNikita Popov; CHECK: @ %bb.0: 247cb3e1dd6SNikita Popov; CHECK-NEXT: vldr d16, .LCPI22_0 248cb3e1dd6SNikita Popov; CHECK-NEXT: vmov r0, r1, d16 2492c85f5e6SNikita Popov; CHECK-NEXT: bx lr 250cb3e1dd6SNikita Popov; CHECK-NEXT: .p2align 3 2512c85f5e6SNikita Popov; CHECK-NEXT: @ %bb.1: 2522c85f5e6SNikita Popov; CHECK-NEXT: .LCPI22_0: 253cb3e1dd6SNikita Popov; CHECK-NEXT: .long 0x7f800000 @ float +Inf 254cb3e1dd6SNikita Popov; CHECK-NEXT: .long 0x7f800000 @ float +Inf 255cb3e1dd6SNikita Popov %r = call nnan <2 x float> @llvm.maximum.v2f32(<2 x float> <float 0x7ff0000000000000, float 0x7ff0000000000000>, <2 x float> %x) 256cb3e1dd6SNikita Popov ret <2 x float> %r 2572c85f5e6SNikita Popov} 2582c85f5e6SNikita Popov 259cb3e1dd6SNikita Popovdefine <2 x float> @test_minimum_const_inf_nnan_comm_vec(<2 x float> %x) { 260cb3e1dd6SNikita Popov; CHECK-LABEL: test_minimum_const_inf_nnan_comm_vec: 2612c85f5e6SNikita Popov; CHECK: @ %bb.0: 2622c85f5e6SNikita Popov; CHECK-NEXT: bx lr 263cb3e1dd6SNikita Popov %r = call nnan <2 x float> @llvm.minimum.v2f32(<2 x float> <float 0x7ff0000000000000, float 0x7ff0000000000000>, <2 x float> %x) 264cb3e1dd6SNikita Popov ret <2 x float> %r 2652c85f5e6SNikita Popov} 2662c85f5e6SNikita Popov 267cb3e1dd6SNikita Popovdefine float @test_minnum_const_neg_inf_nnan(float %x) { 268cb3e1dd6SNikita Popov; CHECK-LABEL: test_minnum_const_neg_inf_nnan: 2692c85f5e6SNikita Popov; CHECK: @ %bb.0: 270*8e69c3cdSNikita Popov; CHECK-NEXT: movw r0, #0 271*8e69c3cdSNikita Popov; CHECK-NEXT: movt r0, #65408 2722c85f5e6SNikita Popov; CHECK-NEXT: bx lr 273cb3e1dd6SNikita Popov %r = call nnan float @llvm.minnum.f32(float %x, float 0xfff0000000000000) 2742c85f5e6SNikita Popov ret float %r 2752c85f5e6SNikita Popov} 2762c85f5e6SNikita Popov 277cb3e1dd6SNikita Popovdefine float @test_maxnum_const_neg_inf_nnan(float %x) { 278cb3e1dd6SNikita Popov; CHECK-LABEL: test_maxnum_const_neg_inf_nnan: 2792c85f5e6SNikita Popov; CHECK: @ %bb.0: 2802c85f5e6SNikita Popov; CHECK-NEXT: bx lr 281cb3e1dd6SNikita Popov %r = call nnan float @llvm.maxnum.f32(float %x, float 0xfff0000000000000) 2822c85f5e6SNikita Popov ret float %r 2832c85f5e6SNikita Popov} 2842c85f5e6SNikita Popov 285cb3e1dd6SNikita Popovdefine float @test_maximum_const_neg_inf_nnan(float %x) { 286cb3e1dd6SNikita Popov; CHECK-LABEL: test_maximum_const_neg_inf_nnan: 2872c85f5e6SNikita Popov; CHECK: @ %bb.0: 2882c85f5e6SNikita Popov; CHECK-NEXT: bx lr 289cb3e1dd6SNikita Popov %r = call nnan float @llvm.maximum.f32(float %x, float 0xfff0000000000000) 2902c85f5e6SNikita Popov ret float %r 2912c85f5e6SNikita Popov} 2922c85f5e6SNikita Popov 293cb3e1dd6SNikita Popovdefine float @test_minimum_const_neg_inf_nnan(float %x) { 294cb3e1dd6SNikita Popov; CHECK-LABEL: test_minimum_const_neg_inf_nnan: 2952c85f5e6SNikita Popov; CHECK: @ %bb.0: 296*8e69c3cdSNikita Popov; CHECK-NEXT: movw r0, #0 297*8e69c3cdSNikita Popov; CHECK-NEXT: movt r0, #65408 2982c85f5e6SNikita Popov; CHECK-NEXT: bx lr 299cb3e1dd6SNikita Popov %r = call nnan float @llvm.minimum.f32(float %x, float 0xfff0000000000000) 3002c85f5e6SNikita Popov ret float %r 3012c85f5e6SNikita Popov} 3022c85f5e6SNikita Popov 303cb3e1dd6SNikita Popovdefine float @test_minnum_const_max(float %x) { 304cb3e1dd6SNikita Popov; CHECK-LABEL: test_minnum_const_max: 3052c85f5e6SNikita Popov; CHECK: @ %bb.0: 3062c85f5e6SNikita Popov; CHECK-NEXT: vldr s0, .LCPI28_0 3072c85f5e6SNikita Popov; CHECK-NEXT: vmov s2, r0 3082c85f5e6SNikita Popov; CHECK-NEXT: vminnm.f32 s0, s2, s0 3092c85f5e6SNikita Popov; CHECK-NEXT: vmov r0, s0 3102c85f5e6SNikita Popov; CHECK-NEXT: bx lr 3112c85f5e6SNikita Popov; CHECK-NEXT: .p2align 2 3122c85f5e6SNikita Popov; CHECK-NEXT: @ %bb.1: 3132c85f5e6SNikita Popov; CHECK-NEXT: .LCPI28_0: 3142c85f5e6SNikita Popov; CHECK-NEXT: .long 0x7f7fffff @ float 3.40282347E+38 315cb3e1dd6SNikita Popov %r = call float @llvm.minnum.f32(float %x, float 0x47efffffe0000000) 3162c85f5e6SNikita Popov ret float %r 3172c85f5e6SNikita Popov} 3182c85f5e6SNikita Popov 319cb3e1dd6SNikita Popovdefine float @test_maxnum_const_max(float %x) { 320cb3e1dd6SNikita Popov; CHECK-LABEL: test_maxnum_const_max: 3212c85f5e6SNikita Popov; CHECK: @ %bb.0: 3222c85f5e6SNikita Popov; CHECK-NEXT: vldr s0, .LCPI29_0 3232c85f5e6SNikita Popov; CHECK-NEXT: vmov s2, r0 3242c85f5e6SNikita Popov; CHECK-NEXT: vmaxnm.f32 s0, s2, s0 3252c85f5e6SNikita Popov; CHECK-NEXT: vmov r0, s0 3262c85f5e6SNikita Popov; CHECK-NEXT: bx lr 3272c85f5e6SNikita Popov; CHECK-NEXT: .p2align 2 3282c85f5e6SNikita Popov; CHECK-NEXT: @ %bb.1: 3292c85f5e6SNikita Popov; CHECK-NEXT: .LCPI29_0: 3302c85f5e6SNikita Popov; CHECK-NEXT: .long 0x7f7fffff @ float 3.40282347E+38 331cb3e1dd6SNikita Popov %r = call float @llvm.maxnum.f32(float %x, float 0x47efffffe0000000) 3322c85f5e6SNikita Popov ret float %r 3332c85f5e6SNikita Popov} 3342c85f5e6SNikita Popov 335cb3e1dd6SNikita Popovdefine float @test_maximum_const_max(float %x) { 336cb3e1dd6SNikita Popov; CHECK-LABEL: test_maximum_const_max: 3372c85f5e6SNikita Popov; CHECK: @ %bb.0: 3382c85f5e6SNikita Popov; CHECK-NEXT: vldr s0, .LCPI30_0 3392c85f5e6SNikita Popov; CHECK-NEXT: vmov s2, r0 3402c85f5e6SNikita Popov; CHECK-NEXT: vmax.f32 d0, d1, d0 3412c85f5e6SNikita Popov; CHECK-NEXT: vmov r0, s0 3422c85f5e6SNikita Popov; CHECK-NEXT: bx lr 3432c85f5e6SNikita Popov; CHECK-NEXT: .p2align 2 3442c85f5e6SNikita Popov; CHECK-NEXT: @ %bb.1: 3452c85f5e6SNikita Popov; CHECK-NEXT: .LCPI30_0: 3462c85f5e6SNikita Popov; CHECK-NEXT: .long 0x7f7fffff @ float 3.40282347E+38 347cb3e1dd6SNikita Popov %r = call float @llvm.maximum.f32(float %x, float 0x47efffffe0000000) 3482c85f5e6SNikita Popov ret float %r 3492c85f5e6SNikita Popov} 3502c85f5e6SNikita Popov 351cb3e1dd6SNikita Popovdefine float @test_minimum_const_max(float %x) { 352cb3e1dd6SNikita Popov; CHECK-LABEL: test_minimum_const_max: 3532c85f5e6SNikita Popov; CHECK: @ %bb.0: 3542c85f5e6SNikita Popov; CHECK-NEXT: vldr s0, .LCPI31_0 3552c85f5e6SNikita Popov; CHECK-NEXT: vmov s2, r0 3562c85f5e6SNikita Popov; CHECK-NEXT: vmin.f32 d0, d1, d0 3572c85f5e6SNikita Popov; CHECK-NEXT: vmov r0, s0 3582c85f5e6SNikita Popov; CHECK-NEXT: bx lr 3592c85f5e6SNikita Popov; CHECK-NEXT: .p2align 2 3602c85f5e6SNikita Popov; CHECK-NEXT: @ %bb.1: 3612c85f5e6SNikita Popov; CHECK-NEXT: .LCPI31_0: 3622c85f5e6SNikita Popov; CHECK-NEXT: .long 0x7f7fffff @ float 3.40282347E+38 363cb3e1dd6SNikita Popov %r = call float @llvm.minimum.f32(float %x, float 0x47efffffe0000000) 3642c85f5e6SNikita Popov ret float %r 3652c85f5e6SNikita Popov} 3662c85f5e6SNikita Popov 367cb3e1dd6SNikita Popovdefine float @test_minnum_const_neg_max(float %x) { 368cb3e1dd6SNikita Popov; CHECK-LABEL: test_minnum_const_neg_max: 3692c85f5e6SNikita Popov; CHECK: @ %bb.0: 3702c85f5e6SNikita Popov; CHECK-NEXT: vldr s0, .LCPI32_0 3712c85f5e6SNikita Popov; CHECK-NEXT: vmov s2, r0 3722c85f5e6SNikita Popov; CHECK-NEXT: vminnm.f32 s0, s2, s0 3732c85f5e6SNikita Popov; CHECK-NEXT: vmov r0, s0 3742c85f5e6SNikita Popov; CHECK-NEXT: bx lr 3752c85f5e6SNikita Popov; CHECK-NEXT: .p2align 2 3762c85f5e6SNikita Popov; CHECK-NEXT: @ %bb.1: 3772c85f5e6SNikita Popov; CHECK-NEXT: .LCPI32_0: 3782c85f5e6SNikita Popov; CHECK-NEXT: .long 0xff7fffff @ float -3.40282347E+38 379cb3e1dd6SNikita Popov %r = call float @llvm.minnum.f32(float %x, float 0xc7efffffe0000000) 3802c85f5e6SNikita Popov ret float %r 3812c85f5e6SNikita Popov} 3822c85f5e6SNikita Popov 383cb3e1dd6SNikita Popovdefine float @test_maxnum_const_neg_max(float %x) { 384cb3e1dd6SNikita Popov; CHECK-LABEL: test_maxnum_const_neg_max: 3852c85f5e6SNikita Popov; CHECK: @ %bb.0: 3862c85f5e6SNikita Popov; CHECK-NEXT: vldr s0, .LCPI33_0 3872c85f5e6SNikita Popov; CHECK-NEXT: vmov s2, r0 3882c85f5e6SNikita Popov; CHECK-NEXT: vmaxnm.f32 s0, s2, s0 3892c85f5e6SNikita Popov; CHECK-NEXT: vmov r0, s0 3902c85f5e6SNikita Popov; CHECK-NEXT: bx lr 3912c85f5e6SNikita Popov; CHECK-NEXT: .p2align 2 3922c85f5e6SNikita Popov; CHECK-NEXT: @ %bb.1: 3932c85f5e6SNikita Popov; CHECK-NEXT: .LCPI33_0: 3942c85f5e6SNikita Popov; CHECK-NEXT: .long 0xff7fffff @ float -3.40282347E+38 395cb3e1dd6SNikita Popov %r = call float @llvm.maxnum.f32(float %x, float 0xc7efffffe0000000) 3962c85f5e6SNikita Popov ret float %r 3972c85f5e6SNikita Popov} 3982c85f5e6SNikita Popov 399cb3e1dd6SNikita Popovdefine float @test_maximum_const_neg_max(float %x) { 400cb3e1dd6SNikita Popov; CHECK-LABEL: test_maximum_const_neg_max: 4012c85f5e6SNikita Popov; CHECK: @ %bb.0: 4022c85f5e6SNikita Popov; CHECK-NEXT: vldr s0, .LCPI34_0 4032c85f5e6SNikita Popov; CHECK-NEXT: vmov s2, r0 4042c85f5e6SNikita Popov; CHECK-NEXT: vmax.f32 d0, d1, d0 4052c85f5e6SNikita Popov; CHECK-NEXT: vmov r0, s0 4062c85f5e6SNikita Popov; CHECK-NEXT: bx lr 4072c85f5e6SNikita Popov; CHECK-NEXT: .p2align 2 4082c85f5e6SNikita Popov; CHECK-NEXT: @ %bb.1: 4092c85f5e6SNikita Popov; CHECK-NEXT: .LCPI34_0: 4102c85f5e6SNikita Popov; CHECK-NEXT: .long 0xff7fffff @ float -3.40282347E+38 411cb3e1dd6SNikita Popov %r = call float @llvm.maximum.f32(float %x, float 0xc7efffffe0000000) 4122c85f5e6SNikita Popov ret float %r 4132c85f5e6SNikita Popov} 4142c85f5e6SNikita Popov 415cb3e1dd6SNikita Popovdefine float @test_minimum_const_neg_max(float %x) { 416cb3e1dd6SNikita Popov; CHECK-LABEL: test_minimum_const_neg_max: 4172c85f5e6SNikita Popov; CHECK: @ %bb.0: 4182c85f5e6SNikita Popov; CHECK-NEXT: vldr s0, .LCPI35_0 4192c85f5e6SNikita Popov; CHECK-NEXT: vmov s2, r0 4202c85f5e6SNikita Popov; CHECK-NEXT: vmin.f32 d0, d1, d0 4212c85f5e6SNikita Popov; CHECK-NEXT: vmov r0, s0 4222c85f5e6SNikita Popov; CHECK-NEXT: bx lr 4232c85f5e6SNikita Popov; CHECK-NEXT: .p2align 2 4242c85f5e6SNikita Popov; CHECK-NEXT: @ %bb.1: 4252c85f5e6SNikita Popov; CHECK-NEXT: .LCPI35_0: 4262c85f5e6SNikita Popov; CHECK-NEXT: .long 0xff7fffff @ float -3.40282347E+38 427cb3e1dd6SNikita Popov %r = call float @llvm.minimum.f32(float %x, float 0xc7efffffe0000000) 4282c85f5e6SNikita Popov ret float %r 4292c85f5e6SNikita Popov} 4302c85f5e6SNikita Popov 431cb3e1dd6SNikita Popovdefine float @test_minnum_const_max_ninf(float %x) { 432cb3e1dd6SNikita Popov; CHECK-LABEL: test_minnum_const_max_ninf: 4332c85f5e6SNikita Popov; CHECK: @ %bb.0: 4342c85f5e6SNikita Popov; CHECK-NEXT: vldr s0, .LCPI36_0 4352c85f5e6SNikita Popov; CHECK-NEXT: vmov s2, r0 4362c85f5e6SNikita Popov; CHECK-NEXT: vminnm.f32 s0, s2, s0 4372c85f5e6SNikita Popov; CHECK-NEXT: vmov r0, s0 4382c85f5e6SNikita Popov; CHECK-NEXT: bx lr 4392c85f5e6SNikita Popov; CHECK-NEXT: .p2align 2 4402c85f5e6SNikita Popov; CHECK-NEXT: @ %bb.1: 4412c85f5e6SNikita Popov; CHECK-NEXT: .LCPI36_0: 4422c85f5e6SNikita Popov; CHECK-NEXT: .long 0x7f7fffff @ float 3.40282347E+38 443cb3e1dd6SNikita Popov %r = call ninf float @llvm.minnum.f32(float %x, float 0x47efffffe0000000) 4442c85f5e6SNikita Popov ret float %r 4452c85f5e6SNikita Popov} 4462c85f5e6SNikita Popov 447cb3e1dd6SNikita Popovdefine float @test_maxnum_const_max_ninf(float %x) { 448cb3e1dd6SNikita Popov; CHECK-LABEL: test_maxnum_const_max_ninf: 4492c85f5e6SNikita Popov; CHECK: @ %bb.0: 450*8e69c3cdSNikita Popov; CHECK-NEXT: movw r0, #65535 451*8e69c3cdSNikita Popov; CHECK-NEXT: movt r0, #32639 4522c85f5e6SNikita Popov; CHECK-NEXT: bx lr 453cb3e1dd6SNikita Popov %r = call ninf float @llvm.maxnum.f32(float %x, float 0x47efffffe0000000) 4542c85f5e6SNikita Popov ret float %r 4552c85f5e6SNikita Popov} 4562c85f5e6SNikita Popov 457cb3e1dd6SNikita Popovdefine float @test_maximum_const_max_ninf(float %x) { 458cb3e1dd6SNikita Popov; CHECK-LABEL: test_maximum_const_max_ninf: 4592c85f5e6SNikita Popov; CHECK: @ %bb.0: 4602c85f5e6SNikita Popov; CHECK-NEXT: vldr s0, .LCPI38_0 4612c85f5e6SNikita Popov; CHECK-NEXT: vmov s2, r0 4622c85f5e6SNikita Popov; CHECK-NEXT: vmax.f32 d0, d1, d0 4632c85f5e6SNikita Popov; CHECK-NEXT: vmov r0, s0 4642c85f5e6SNikita Popov; CHECK-NEXT: bx lr 4652c85f5e6SNikita Popov; CHECK-NEXT: .p2align 2 4662c85f5e6SNikita Popov; CHECK-NEXT: @ %bb.1: 4672c85f5e6SNikita Popov; CHECK-NEXT: .LCPI38_0: 4682c85f5e6SNikita Popov; CHECK-NEXT: .long 0x7f7fffff @ float 3.40282347E+38 469cb3e1dd6SNikita Popov %r = call ninf float @llvm.maximum.f32(float %x, float 0x47efffffe0000000) 4702c85f5e6SNikita Popov ret float %r 4712c85f5e6SNikita Popov} 4722c85f5e6SNikita Popov 473cb3e1dd6SNikita Popovdefine float @test_minimum_const_max_ninf(float %x) { 474cb3e1dd6SNikita Popov; CHECK-LABEL: test_minimum_const_max_ninf: 4752c85f5e6SNikita Popov; CHECK: @ %bb.0: 4762c85f5e6SNikita Popov; CHECK-NEXT: bx lr 477cb3e1dd6SNikita Popov %r = call ninf float @llvm.minimum.f32(float %x, float 0x47efffffe0000000) 4782c85f5e6SNikita Popov ret float %r 4792c85f5e6SNikita Popov} 4802c85f5e6SNikita Popov 481cb3e1dd6SNikita Popovdefine float @test_minnum_const_neg_max_ninf(float %x) { 482cb3e1dd6SNikita Popov; CHECK-LABEL: test_minnum_const_neg_max_ninf: 4832c85f5e6SNikita Popov; CHECK: @ %bb.0: 484*8e69c3cdSNikita Popov; CHECK-NEXT: mvn r0, #8388608 4852c85f5e6SNikita Popov; CHECK-NEXT: bx lr 486cb3e1dd6SNikita Popov %r = call ninf float @llvm.minnum.f32(float %x, float 0xc7efffffe0000000) 4872c85f5e6SNikita Popov ret float %r 4882c85f5e6SNikita Popov} 4892c85f5e6SNikita Popov 490cb3e1dd6SNikita Popovdefine float @test_maxnum_const_neg_max_ninf(float %x) { 491cb3e1dd6SNikita Popov; CHECK-LABEL: test_maxnum_const_neg_max_ninf: 4922c85f5e6SNikita Popov; CHECK: @ %bb.0: 4932c85f5e6SNikita Popov; CHECK-NEXT: vldr s0, .LCPI41_0 4942c85f5e6SNikita Popov; CHECK-NEXT: vmov s2, r0 4952c85f5e6SNikita Popov; CHECK-NEXT: vmaxnm.f32 s0, s2, s0 4962c85f5e6SNikita Popov; CHECK-NEXT: vmov r0, s0 4972c85f5e6SNikita Popov; CHECK-NEXT: bx lr 4982c85f5e6SNikita Popov; CHECK-NEXT: .p2align 2 4992c85f5e6SNikita Popov; CHECK-NEXT: @ %bb.1: 5002c85f5e6SNikita Popov; CHECK-NEXT: .LCPI41_0: 5012c85f5e6SNikita Popov; CHECK-NEXT: .long 0xff7fffff @ float -3.40282347E+38 502cb3e1dd6SNikita Popov %r = call ninf float @llvm.maxnum.f32(float %x, float 0xc7efffffe0000000) 5032c85f5e6SNikita Popov ret float %r 5042c85f5e6SNikita Popov} 5052c85f5e6SNikita Popov 506cb3e1dd6SNikita Popovdefine float @test_maximum_const_neg_max_ninf(float %x) { 507cb3e1dd6SNikita Popov; CHECK-LABEL: test_maximum_const_neg_max_ninf: 5082c85f5e6SNikita Popov; CHECK: @ %bb.0: 5092c85f5e6SNikita Popov; CHECK-NEXT: bx lr 510cb3e1dd6SNikita Popov %r = call ninf float @llvm.maximum.f32(float %x, float 0xc7efffffe0000000) 5112c85f5e6SNikita Popov ret float %r 5122c85f5e6SNikita Popov} 5132c85f5e6SNikita Popov 514cb3e1dd6SNikita Popovdefine float @test_minimum_const_neg_max_ninf(float %x) { 515cb3e1dd6SNikita Popov; CHECK-LABEL: test_minimum_const_neg_max_ninf: 5162c85f5e6SNikita Popov; CHECK: @ %bb.0: 5172c85f5e6SNikita Popov; CHECK-NEXT: vldr s0, .LCPI43_0 5182c85f5e6SNikita Popov; CHECK-NEXT: vmov s2, r0 5192c85f5e6SNikita Popov; CHECK-NEXT: vmin.f32 d0, d1, d0 5202c85f5e6SNikita Popov; CHECK-NEXT: vmov r0, s0 5212c85f5e6SNikita Popov; CHECK-NEXT: bx lr 5222c85f5e6SNikita Popov; CHECK-NEXT: .p2align 2 5232c85f5e6SNikita Popov; CHECK-NEXT: @ %bb.1: 5242c85f5e6SNikita Popov; CHECK-NEXT: .LCPI43_0: 5252c85f5e6SNikita Popov; CHECK-NEXT: .long 0xff7fffff @ float -3.40282347E+38 526cb3e1dd6SNikita Popov %r = call ninf float @llvm.minimum.f32(float %x, float 0xc7efffffe0000000) 527cb3e1dd6SNikita Popov ret float %r 528cb3e1dd6SNikita Popov} 529cb3e1dd6SNikita Popov 530cb3e1dd6SNikita Popovdefine float @test_minnum_const_max_nnan_ninf(float %x) { 531cb3e1dd6SNikita Popov; CHECK-LABEL: test_minnum_const_max_nnan_ninf: 532cb3e1dd6SNikita Popov; CHECK: @ %bb.0: 533cb3e1dd6SNikita Popov; CHECK-NEXT: bx lr 534cb3e1dd6SNikita Popov %r = call nnan ninf float @llvm.minnum.f32(float %x, float 0x47efffffe0000000) 535cb3e1dd6SNikita Popov ret float %r 536cb3e1dd6SNikita Popov} 537cb3e1dd6SNikita Popov 538cb3e1dd6SNikita Popovdefine float @test_maxnum_const_max_nnan_ninf(float %x) { 539cb3e1dd6SNikita Popov; CHECK-LABEL: test_maxnum_const_max_nnan_ninf: 540cb3e1dd6SNikita Popov; CHECK: @ %bb.0: 541*8e69c3cdSNikita Popov; CHECK-NEXT: movw r0, #65535 542*8e69c3cdSNikita Popov; CHECK-NEXT: movt r0, #32639 543cb3e1dd6SNikita Popov; CHECK-NEXT: bx lr 544cb3e1dd6SNikita Popov %r = call nnan ninf float @llvm.maxnum.f32(float %x, float 0x47efffffe0000000) 545cb3e1dd6SNikita Popov ret float %r 546cb3e1dd6SNikita Popov} 547cb3e1dd6SNikita Popov 548cb3e1dd6SNikita Popovdefine float @test_maximum_const_max_nnan_ninf(float %x) { 549cb3e1dd6SNikita Popov; CHECK-LABEL: test_maximum_const_max_nnan_ninf: 550cb3e1dd6SNikita Popov; CHECK: @ %bb.0: 551*8e69c3cdSNikita Popov; CHECK-NEXT: movw r0, #65535 552*8e69c3cdSNikita Popov; CHECK-NEXT: movt r0, #32639 553cb3e1dd6SNikita Popov; CHECK-NEXT: bx lr 554cb3e1dd6SNikita Popov %r = call nnan ninf float @llvm.maximum.f32(float %x, float 0x47efffffe0000000) 555cb3e1dd6SNikita Popov ret float %r 556cb3e1dd6SNikita Popov} 557cb3e1dd6SNikita Popov 558cb3e1dd6SNikita Popovdefine float @test_minimum_const_max_nnan_ninf(float %x) { 559cb3e1dd6SNikita Popov; CHECK-LABEL: test_minimum_const_max_nnan_ninf: 560cb3e1dd6SNikita Popov; CHECK: @ %bb.0: 561cb3e1dd6SNikita Popov; CHECK-NEXT: bx lr 562cb3e1dd6SNikita Popov %r = call nnan ninf float @llvm.minimum.f32(float %x, float 0x47efffffe0000000) 563cb3e1dd6SNikita Popov ret float %r 564cb3e1dd6SNikita Popov} 565cb3e1dd6SNikita Popov 566cb3e1dd6SNikita Popovdefine float @test_minnum_const_neg_max_nnan_ninf(float %x) { 567cb3e1dd6SNikita Popov; CHECK-LABEL: test_minnum_const_neg_max_nnan_ninf: 568cb3e1dd6SNikita Popov; CHECK: @ %bb.0: 569*8e69c3cdSNikita Popov; CHECK-NEXT: mvn r0, #8388608 570cb3e1dd6SNikita Popov; CHECK-NEXT: bx lr 571cb3e1dd6SNikita Popov %r = call nnan ninf float @llvm.minnum.f32(float %x, float 0xc7efffffe0000000) 572cb3e1dd6SNikita Popov ret float %r 573cb3e1dd6SNikita Popov} 574cb3e1dd6SNikita Popov 575cb3e1dd6SNikita Popovdefine float @test_maxnum_const_neg_max_nnan_ninf(float %x) { 576cb3e1dd6SNikita Popov; CHECK-LABEL: test_maxnum_const_neg_max_nnan_ninf: 577cb3e1dd6SNikita Popov; CHECK: @ %bb.0: 578cb3e1dd6SNikita Popov; CHECK-NEXT: bx lr 579cb3e1dd6SNikita Popov %r = call nnan ninf float @llvm.maxnum.f32(float %x, float 0xc7efffffe0000000) 580cb3e1dd6SNikita Popov ret float %r 581cb3e1dd6SNikita Popov} 582cb3e1dd6SNikita Popov 583cb3e1dd6SNikita Popovdefine float @test_maximum_const_neg_max_nnan_ninf(float %x) { 584cb3e1dd6SNikita Popov; CHECK-LABEL: test_maximum_const_neg_max_nnan_ninf: 585cb3e1dd6SNikita Popov; CHECK: @ %bb.0: 586cb3e1dd6SNikita Popov; CHECK-NEXT: bx lr 587cb3e1dd6SNikita Popov %r = call nnan ninf float @llvm.maximum.f32(float %x, float 0xc7efffffe0000000) 588cb3e1dd6SNikita Popov ret float %r 589cb3e1dd6SNikita Popov} 590cb3e1dd6SNikita Popov 591cb3e1dd6SNikita Popovdefine float @test_minimum_const_neg_max_nnan_ninf(float %x) { 592cb3e1dd6SNikita Popov; CHECK-LABEL: test_minimum_const_neg_max_nnan_ninf: 593cb3e1dd6SNikita Popov; CHECK: @ %bb.0: 594*8e69c3cdSNikita Popov; CHECK-NEXT: mvn r0, #8388608 595cb3e1dd6SNikita Popov; CHECK-NEXT: bx lr 5962c85f5e6SNikita Popov %r = call nnan ninf float @llvm.minimum.f32(float %x, float 0xc7efffffe0000000) 5972c85f5e6SNikita Popov ret float %r 5982c85f5e6SNikita Popov} 599