| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | 
 | ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=fiji -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefix=GCN %s | 
 |  | 
 | ; Mostly overlaps with fmed3.ll to stress specific cases of | 
 | ; isKnownNeverSNaN. | 
 |  | 
 | define float @v_test_known_not_snan_fabs_input_fmed3_r_i_i_f32(float %a) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_fabs_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_rcp_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, |v0|, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %a.nnan.add = fdiv nnan float 1.0, %a | 
 |   %known.not.snan = call float @llvm.fabs.f32(float %a.nnan.add) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_fneg_input_fmed3_r_i_i_f32(float %a) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_fneg_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_rcp_f32_e64 v0, -v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %a.nnan.add = fdiv nnan float 1.0, %a | 
 |   %known.not.snan = fsub float -0.0, %a.nnan.add | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_fpext_input_fmed3_r_i_i_f32(half %a) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_fpext_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_add_f16_e32 v0, 1.0, v0 | 
 | ; GCN-NEXT:    v_cvt_f32_f16_e32 v0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %a.nnan.add = fadd nnan half %a, 1.0 | 
 |   %known.not.snan = fpext half %a.nnan.add to float | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_fptrunc_input_fmed3_r_i_i_f32(double %a) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_fptrunc_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_add_f64 v[0:1], v[0:1], 1.0 | 
 | ; GCN-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1] | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %a.nnan.add = fadd nnan double %a, 1.0 | 
 |   %known.not.snan = fptrunc double %a.nnan.add to float | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_copysign_input_fmed3_r_i_i_f32(float %a, float %sign) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_copysign_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_rcp_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    s_brev_b32 s6, -2 | 
 | ; GCN-NEXT:    v_bfi_b32 v0, s6, v0, v1 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %a.nnan.add = fdiv nnan float 1.0, %a | 
 |   %known.not.snan = call float @llvm.copysign.f32(float %a.nnan.add, float %sign) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | ; Canonicalize always quiets, so nothing is necessary. | 
 | define float @v_test_known_canonicalize_input_fmed3_r_i_i_f32(float %a) #0 { | 
 | ; GCN-LABEL: v_test_known_canonicalize_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.canonicalize.f32(float %a) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_minnum_input_fmed3_r_i_i_f32(float %a, float %b) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_minnum_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_rcp_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_add_f32_e32 v1, 1.0, v1 | 
 | ; GCN-NEXT:    v_min_f32_e32 v0, v0, v1 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %a.nnan.add = fdiv nnan float 1.0, %a | 
 |   %b.nnan.add = fadd nnan float %b, 1.0 | 
 |   %known.not.snan = call float @llvm.minnum.f32(float %a.nnan.add, float %b.nnan.add) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_minnum_maybe_nan_src0_input_fmed3_r_i_i_f32(float %a, float %b) #0 { | 
 | ; GCN-LABEL: v_test_known_not_minnum_maybe_nan_src0_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_add_f32_e32 v1, 1.0, v1 | 
 | ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0 | 
 | ; GCN-NEXT:    v_min_f32_e32 v0, v0, v1 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %b.nsnan = fadd float %b, 1.0 | 
 |   %known.not.snan = call float @llvm.minnum.f32(float %a, float %b.nsnan) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_minnum_maybe_nan_src1_input_fmed3_r_i_i_f32(float %a, float %b) #0 { | 
 | ; GCN-LABEL: v_test_known_not_minnum_maybe_nan_src1_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_add_f32_e32 v0, 1.0, v0 | 
 | ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1 | 
 | ; GCN-NEXT:    v_min_f32_e32 v0, v0, v1 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %a.nsnan = fadd float %a, 1.0 | 
 |   %known.not.snan = call float @llvm.minnum.f32(float %a.nsnan, float %b) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_minnum_possible_nan_lhs_input_fmed3_r_i_i_f32(float %a, float %b) #0 { | 
 | ; GCN-LABEL: v_minnum_possible_nan_lhs_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_add_f32_e32 v1, 1.0, v1 | 
 | ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0 | 
 | ; GCN-NEXT:    v_min_f32_e32 v0, v0, v1 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %b.nnan.add = fadd nnan float %b, 1.0 | 
 |   %known.not.snan = call float @llvm.minnum.f32(float %a, float %b.nnan.add) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_minnum_possible_nan_rhs_input_fmed3_r_i_i_f32(float %a, float %b) #0 { | 
 | ; GCN-LABEL: v_minnum_possible_nan_rhs_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_rcp_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1 | 
 | ; GCN-NEXT:    v_min_f32_e32 v0, v0, v1 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %a.nnan.add = fdiv nnan float 1.0, %a | 
 |   %known.not.snan = call float @llvm.minnum.f32(float %a.nnan.add, float %b) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_maxnum_input_fmed3_r_i_i_f32(float %a, float %b) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_maxnum_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_rcp_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_add_f32_e32 v1, 1.0, v1 | 
 | ; GCN-NEXT:    v_max_f32_e32 v0, v0, v1 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %a.nnan.add = fdiv nnan float 1.0, %a | 
 |   %b.nnan.add = fadd nnan float %b, 1.0 | 
 |   %known.not.snan = call float @llvm.maxnum.f32(float %a.nnan.add, float %b.nnan.add) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_maxnum_possible_nan_lhs_input_fmed3_r_i_i_f32(float %a, float %b) #0 { | 
 | ; GCN-LABEL: v_maxnum_possible_nan_lhs_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_add_f32_e32 v1, 1.0, v1 | 
 | ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0 | 
 | ; GCN-NEXT:    v_max_f32_e32 v0, v0, v1 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %b.nnan.add = fadd nnan float %b, 1.0 | 
 |   %known.not.snan = call float @llvm.maxnum.f32(float %a, float %b.nnan.add) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_maxnum_possible_nan_rhs_input_fmed3_r_i_i_f32(float %a, float %b) #0 { | 
 | ; GCN-LABEL: v_maxnum_possible_nan_rhs_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_rcp_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1 | 
 | ; GCN-NEXT:    v_max_f32_e32 v0, v0, v1 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %a.nnan.add = fdiv nnan float 1.0, %a | 
 |   %known.not.snan = call float @llvm.maxnum.f32(float %a.nnan.add, float %b) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_select_input_fmed3_r_i_i_f32(float %a, float %b, i32 %c) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_select_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_rcp_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_add_f32_e32 v1, 1.0, v1 | 
 | ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v2 | 
 | ; GCN-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %a.nnan.add = fdiv nnan float 1.0, %a | 
 |   %b.nnan.add = fadd nnan float %b, 1.0 | 
 |   %cmp = icmp eq i32 %c, 0 | 
 |   %known.not.snan = select i1 %cmp, float %a.nnan.add, float %b.nnan.add | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_select_possible_nan_lhs_input_fmed3_r_i_i_f32(float %a, float %b, i32 %c) #0 { | 
 | ; GCN-LABEL: v_select_possible_nan_lhs_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_add_f32_e32 v1, 1.0, v1 | 
 | ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v2 | 
 | ; GCN-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc | 
 | ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %b.nnan.add = fadd nnan float %b, 1.0 | 
 |   %cmp = icmp eq i32 %c, 0 | 
 |   %known.not.snan = select i1 %cmp, float %a, float %b.nnan.add | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_select_possible_nan_rhs_input_fmed3_r_i_i_f32(float %a, float %b, i32 %c) #0 { | 
 | ; GCN-LABEL: v_select_possible_nan_rhs_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_rcp_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v2 | 
 | ; GCN-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc | 
 | ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %a.nnan.add = fdiv nnan float 1.0, %a | 
 |   %cmp = icmp eq i32 %c, 0 | 
 |   %known.not.snan = select i1 %cmp, float %a.nnan.add, float %b | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_fadd_input_fmed3_r_i_i_f32(float %a, float %b) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_fadd_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_add_f32_e32 v0, v0, v1 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = fadd float %a, %b | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_fsub_input_fmed3_r_i_i_f32(float %a, float %b) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_fsub_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_sub_f32_e32 v0, v0, v1 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = fsub float %a, %b | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_fmul_input_fmed3_r_i_i_f32(float %a, float %b) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_fmul_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v1 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = fmul float %a, %b | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_uint_to_fp_input_fmed3_r_i_i_f32(i32 %a) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_uint_to_fp_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_cvt_f32_u32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = uitofp i32 %a to float | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_sint_to_fp_input_fmed3_r_i_i_f32(i32 %a) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_sint_to_fp_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_cvt_f32_i32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = sitofp i32 %a to float | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_fma_input_fmed3_r_i_i_f32(float %a, float %b, float %c) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_fma_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_fma_f32 v0, v0, v1, v2 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.fma.f32(float %a, float %b, float %c) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_fmad_input_fmed3_r_i_i_f32(float %a, float %b, float %c) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_fmad_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_mac_f32_e32 v2, v0, v1 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v2, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.fmuladd.f32(float %a, float %b, float %c) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 |  | 
 | define float @v_test_known_not_snan_sin_input_fmed3_r_i_i_f32(float %a) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_sin_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_mul_f32_e32 v0, 0.15915494, v0 | 
 | ; GCN-NEXT:    v_fract_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_sin_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.sin.f32(float %a) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_cos_input_fmed3_r_i_i_f32(float %a) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_cos_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_mul_f32_e32 v0, 0.15915494, v0 | 
 | ; GCN-NEXT:    v_fract_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_cos_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.cos.f32(float %a) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_exp2_input_fmed3_r_i_i_f32(float %a) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_exp2_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_exp_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.exp2.f32(float %a) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_trunc_input_fmed3_r_i_i_f32(float %a) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_trunc_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_trunc_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.trunc.f32(float %a) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_floor_input_fmed3_r_i_i_f32(float %a) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_floor_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_floor_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.floor.f32(float %a) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_ceil_input_fmed3_r_i_i_f32(float %a) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_ceil_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_floor_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.floor.f32(float %a) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_round_input_fmed3_r_i_i_f32(float %a) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_round_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    s_brev_b32 s6, -2 | 
 | ; GCN-NEXT:    v_trunc_f32_e32 v2, v0 | 
 | ; GCN-NEXT:    v_bfi_b32 v1, s6, 1.0, v0 | 
 | ; GCN-NEXT:    v_sub_f32_e32 v0, v0, v2 | 
 | ; GCN-NEXT:    v_cmp_ge_f32_e64 vcc, |v0|, 0.5 | 
 | ; GCN-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc | 
 | ; GCN-NEXT:    v_add_f32_e32 v0, v2, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.round.f32(float %a) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_rint_input_fmed3_r_i_i_f32(float %a) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_rint_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_rndne_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.rint.f32(float %a) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_nearbyint_input_fmed3_r_i_i_f32(float %a) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_nearbyint_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_rndne_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.nearbyint.f32(float %a) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_fmul_legacy_input_fmed3_r_i_i_f32(float %a, float %b) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_fmul_legacy_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_mul_legacy_f32_e32 v0, v0, v1 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.amdgcn.fmul.legacy(float %a, float %b) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_ldexp_input_fmed3_r_i_i_f32(float %a, i32 %b) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_ldexp_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_ldexp_f32 v0, v0, v1 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.amdgcn.ldexp.f32(float %a, i32 %b) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_fmed3_input_fmed3_r_i_i_f32(float %a, float %b, float %c) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_fmed3_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, v1, v2 | 
 | ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.amdgcn.fmed3.f32(float %a, float %b, float %c) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_fmin3_input_fmed3_r_i_i_f32(float %a, float %b, float %c) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_fmin3_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_min3_f32 v0, v0, v1, v2 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %min0 = call float @llvm.minnum.f32(float %a, float %b) | 
 |   %known.not.snan = call float @llvm.minnum.f32(float %min0, float %c) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_cvt_ubyte0_input_fmed3_r_i_i_f32(i8 %char) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_cvt_ubyte0_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_cvt_f32_ubyte0_e32 v0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %cvt = uitofp i8 %char to float | 
 |   %max = call float @llvm.maxnum.f32(float %cvt, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_not_known_frexp_mant_input_fmed3_r_i_i_f32(float %arg) #0 { | 
 | ; GCN-LABEL: v_test_not_known_frexp_mant_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_frexp_mant_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.amdgcn.frexp.mant.f32(float %arg) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_frexp_mant_input_fmed3_r_i_i_f32(float %arg) #0 { | 
 | ; GCN-LABEL: v_test_known_not_frexp_mant_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_add_f32_e32 v0, 1.0, v0 | 
 | ; GCN-NEXT:    v_frexp_mant_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %add = fadd float %arg, 1.0 | 
 |   %known.not.snan = call float @llvm.amdgcn.frexp.mant.f32(float %add) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_rcp_input_fmed3_r_i_i_f32(float %a) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_rcp_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_rcp_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.amdgcn.rcp.f32(float %a) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 | define float @v_test_known_not_snan_rsq_input_fmed3_r_i_i_f32(float %a) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_rsq_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_rsq_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.amdgcn.rsq.f32(float %a) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_fract_input_fmed3_r_i_i_f32(float %a) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_fract_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_fract_f32_e32 v0, v0 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.amdgcn.fract.f32(float %a) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | define float @v_test_known_not_snan_cubeid_input_fmed3_r_i_i_f32(float %a, float %b, float %c) #0 { | 
 | ; GCN-LABEL: v_test_known_not_snan_cubeid_input_fmed3_r_i_i_f32: | 
 | ; GCN:       ; %bb.0: | 
 | ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | 
 | ; GCN-NEXT:    v_cubeid_f32 v0, v0, v1, v2 | 
 | ; GCN-NEXT:    v_med3_f32 v0, v0, 2.0, 4.0 | 
 | ; GCN-NEXT:    s_setpc_b64 s[30:31] | 
 |   %known.not.snan = call float @llvm.amdgcn.cubeid(float %a, float %b, float %c) | 
 |   %max = call float @llvm.maxnum.f32(float %known.not.snan, float 2.0) | 
 |   %med = call float @llvm.minnum.f32(float %max, float 4.0) | 
 |   ret float %med | 
 | } | 
 |  | 
 | declare float @llvm.fabs.f32(float) #1 | 
 | declare float @llvm.sin.f32(float) #1 | 
 | declare float @llvm.cos.f32(float) #1 | 
 | declare float @llvm.exp2.f32(float) #1 | 
 | declare float @llvm.trunc.f32(float) #1 | 
 | declare float @llvm.floor.f32(float) #1 | 
 | declare float @llvm.ceil.f32(float) #1 | 
 | declare float @llvm.round.f32(float) #1 | 
 | declare float @llvm.rint.f32(float) #1 | 
 | declare float @llvm.nearbyint.f32(float) #1 | 
 | declare float @llvm.canonicalize.f32(float) #1 | 
 | declare float @llvm.minnum.f32(float, float) #1 | 
 | declare float @llvm.maxnum.f32(float, float) #1 | 
 | declare float @llvm.copysign.f32(float, float) #1 | 
 | declare float @llvm.fma.f32(float, float, float) #1 | 
 | declare float @llvm.fmuladd.f32(float, float, float) #1 | 
 | declare float @llvm.amdgcn.ldexp.f32(float, i32) #1 | 
 | declare float @llvm.amdgcn.fmul.legacy(float, float) #1 | 
 | declare float @llvm.amdgcn.fmed3.f32(float, float, float) #1 | 
 | declare float @llvm.amdgcn.frexp.mant.f32(float) #1 | 
 | declare float @llvm.amdgcn.rcp.f32(float) #1 | 
 | declare float @llvm.amdgcn.rsq.f32(float) #1 | 
 | declare float @llvm.amdgcn.fract.f32(float) #1 | 
 | declare float @llvm.amdgcn.cubeid(float, float, float) #0 | 
 |  | 
 | attributes #0 = { nounwind } | 
 | attributes #1 = { nounwind readnone speculatable } |