1 ; RUN: llc -march=amdgcn -mcpu=SI < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s 2 ; RUN: llc -march=amdgcn -mcpu=tonga < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s 3 4 declare double @llvm.maxnum.f64(double, double) #0 5 declare <2 x double> @llvm.maxnum.v2f64(<2 x double>, <2 x double>) #0 6 declare <4 x double> @llvm.maxnum.v4f64(<4 x double>, <4 x double>) #0 7 declare <8 x double> @llvm.maxnum.v8f64(<8 x double>, <8 x double>) #0 8 declare <16 x double> @llvm.maxnum.v16f64(<16 x double>, <16 x double>) #0 9 10 ; FUNC-LABEL: @test_fmax_f64 11 ; SI: v_max_f64 12 define void @test_fmax_f64(double addrspace(1)* %out, double %a, double %b) nounwind { 13 %val = call double @llvm.maxnum.f64(double %a, double %b) #0 14 store double %val, double addrspace(1)* %out, align 8 15 ret void 16 } 17 18 ; FUNC-LABEL: @test_fmax_v2f64 19 ; SI: v_max_f64 20 ; SI: v_max_f64 21 define void @test_fmax_v2f64(<2 x double> addrspace(1)* %out, <2 x double> %a, <2 x double> %b) nounwind { 22 %val = call <2 x double> @llvm.maxnum.v2f64(<2 x double> %a, <2 x double> %b) #0 23 store <2 x double> %val, <2 x double> addrspace(1)* %out, align 16 24 ret void 25 } 26 27 ; FUNC-LABEL: @test_fmax_v4f64 28 ; SI: v_max_f64 29 ; SI: v_max_f64 30 ; SI: v_max_f64 31 ; SI: v_max_f64 32 define void @test_fmax_v4f64(<4 x double> addrspace(1)* %out, <4 x double> %a, <4 x double> %b) nounwind { 33 %val = call <4 x double> @llvm.maxnum.v4f64(<4 x double> %a, <4 x double> %b) #0 34 store <4 x double> %val, <4 x double> addrspace(1)* %out, align 32 35 ret void 36 } 37 38 ; FUNC-LABEL: @test_fmax_v8f64 39 ; SI: v_max_f64 40 ; SI: v_max_f64 41 ; SI: v_max_f64 42 ; SI: v_max_f64 43 ; SI: v_max_f64 44 ; SI: v_max_f64 45 ; SI: v_max_f64 46 ; SI: v_max_f64 47 define void @test_fmax_v8f64(<8 x double> addrspace(1)* %out, <8 x double> %a, <8 x double> %b) nounwind { 48 %val = call <8 x double> @llvm.maxnum.v8f64(<8 x double> %a, <8 x double> %b) #0 49 store <8 x double> %val, <8 x double> addrspace(1)* %out, align 64 50 ret void 51 } 52 53 ; FUNC-LABEL: @test_fmax_v16f64 54 ; SI: v_max_f64 55 ; SI: v_max_f64 56 ; SI: v_max_f64 57 ; SI: v_max_f64 58 ; SI: v_max_f64 59 ; SI: v_max_f64 60 ; SI: v_max_f64 61 ; SI: v_max_f64 62 ; SI: v_max_f64 63 ; SI: v_max_f64 64 ; SI: v_max_f64 65 ; SI: v_max_f64 66 ; SI: v_max_f64 67 ; SI: v_max_f64 68 ; SI: v_max_f64 69 ; SI: v_max_f64 70 define void @test_fmax_v16f64(<16 x double> addrspace(1)* %out, <16 x double> %a, <16 x double> %b) nounwind { 71 %val = call <16 x double> @llvm.maxnum.v16f64(<16 x double> %a, <16 x double> %b) #0 72 store <16 x double> %val, <16 x double> addrspace(1)* %out, align 128 73 ret void 74 } 75 76 attributes #0 = { nounwind readnone } 77