brintos

brintos / llvm-project-archived public Read only

0
0
Text · 55.7 KiB · 99b163d Raw
1370 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; Test no legal f16. Should just keep the cast to f32 and3; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=kaveri < %s | FileCheck -check-prefixes=GCN,GFX7,GFX7-SDAG %s4; RUN: llc -global-isel=1 -global-isel-abort=2 -mtriple=amdgcn-amd-amdhsa -mcpu=kaveri < %s | FileCheck -check-prefixes=GCN,GFX7,GFX7-GISEL %s5 6; Test legal f16, no f16 fmed3. Should expand to min/max sequence7; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=fiji < %s | FileCheck -check-prefixes=GCN,GFX8,GFX8-SDAG %s8; RUN: llc -global-isel=1 -global-isel-abort=2 -mtriple=amdgcn-amd-amdhsa -mcpu=fiji < %s | FileCheck -check-prefixes=GCN,GFX8,GFX8-GISEL %s9 10; Legal f16 med3. InstCombine ought to shrink the f32 op to f16 so the codegen doesn't really matter for this.11; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9,GFX9-SDAG %s12; RUN: llc -global-isel=1 -global-isel-abort=2 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9,GFX9-GISEL %s13 14 15declare float @llvm.amdgcn.fmed3.f32(float, float, float) #016declare float @llvm.fabs.f32(float) #017declare half @llvm.fabs.f16(half) #018 19define half @fmed3_f32_fpext_f16(half %arg0, half %arg1, half %arg2) #1 {20; GFX7-SDAG-LABEL: fmed3_f32_fpext_f16:21; GFX7-SDAG:       ; %bb.0:22; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)23; GFX7-SDAG-NEXT:    v_med3_f32 v0, v0, v1, v224; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v025; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v026; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]27;28; GFX7-GISEL-LABEL: fmed3_f32_fpext_f16:29; GFX7-GISEL:       ; %bb.0:30; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)31; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v032; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v133; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v2, v234; GFX7-GISEL-NEXT:    v_med3_f32 v0, v0, v1, v235; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v036; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]37;38; GFX8-SDAG-LABEL: fmed3_f32_fpext_f16:39; GFX8-SDAG:       ; %bb.0:40; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)41; GFX8-SDAG-NEXT:    v_max_f16_e32 v3, v0, v142; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v0, v143; GFX8-SDAG-NEXT:    v_max_f16_e32 v0, v0, v244; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v3, v045; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]46;47; GFX8-GISEL-LABEL: fmed3_f32_fpext_f16:48; GFX8-GISEL:       ; %bb.0:49; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)50; GFX8-GISEL-NEXT:    v_min_f16_e32 v3, v0, v151; GFX8-GISEL-NEXT:    v_max_f16_e32 v0, v0, v152; GFX8-GISEL-NEXT:    v_max_f16_e32 v1, v3, v253; GFX8-GISEL-NEXT:    v_min_f16_e32 v0, v0, v154; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]55;56; GFX9-LABEL: fmed3_f32_fpext_f16:57; GFX9:       ; %bb.0:58; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)59; GFX9-NEXT:    v_cvt_f32_f16_e32 v0, v060; GFX9-NEXT:    v_cvt_f32_f16_e32 v1, v161; GFX9-NEXT:    v_cvt_f32_f16_e32 v2, v262; GFX9-NEXT:    v_med3_f32 v0, v0, v1, v263; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v064; GFX9-NEXT:    s_setpc_b64 s[30:31]65  %arg0.ext = fpext half %arg0 to float66  %arg1.ext = fpext half %arg1 to float67  %arg2.ext = fpext half %arg2 to float68  %med3 = call float @llvm.amdgcn.fmed3.f32(float %arg0.ext, float %arg1.ext, float %arg2.ext)69  %cast  = fptrunc float %med3 to half70  ret half %cast71}72 73define half @fmed3_f32_fpext_f16_flags(half %arg0, half %arg1, half %arg2) #1 {74; GFX7-SDAG-LABEL: fmed3_f32_fpext_f16_flags:75; GFX7-SDAG:       ; %bb.0:76; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)77; GFX7-SDAG-NEXT:    v_med3_f32 v0, v0, v1, v278; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v079; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v080; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]81;82; GFX7-GISEL-LABEL: fmed3_f32_fpext_f16_flags:83; GFX7-GISEL:       ; %bb.0:84; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)85; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v086; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v187; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v2, v288; GFX7-GISEL-NEXT:    v_med3_f32 v0, v0, v1, v289; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v090; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]91;92; GFX8-SDAG-LABEL: fmed3_f32_fpext_f16_flags:93; GFX8-SDAG:       ; %bb.0:94; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)95; GFX8-SDAG-NEXT:    v_max_f16_e32 v3, v0, v196; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v0, v197; GFX8-SDAG-NEXT:    v_max_f16_e32 v0, v0, v298; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v3, v099; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]100;101; GFX8-GISEL-LABEL: fmed3_f32_fpext_f16_flags:102; GFX8-GISEL:       ; %bb.0:103; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)104; GFX8-GISEL-NEXT:    v_min_f16_e32 v3, v0, v1105; GFX8-GISEL-NEXT:    v_max_f16_e32 v0, v0, v1106; GFX8-GISEL-NEXT:    v_max_f16_e32 v1, v3, v2107; GFX8-GISEL-NEXT:    v_min_f16_e32 v0, v0, v1108; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]109;110; GFX9-LABEL: fmed3_f32_fpext_f16_flags:111; GFX9:       ; %bb.0:112; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)113; GFX9-NEXT:    v_cvt_f32_f16_e32 v0, v0114; GFX9-NEXT:    v_cvt_f32_f16_e32 v1, v1115; GFX9-NEXT:    v_cvt_f32_f16_e32 v2, v2116; GFX9-NEXT:    v_med3_f32 v0, v0, v1, v2117; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v0118; GFX9-NEXT:    s_setpc_b64 s[30:31]119  %arg0.ext = fpext half %arg0 to float120  %arg1.ext = fpext half %arg1 to float121  %arg2.ext = fpext half %arg2 to float122  %med3 = call nsz float @llvm.amdgcn.fmed3.f32(float %arg0.ext, float %arg1.ext, float %arg2.ext)123  %cast = fptrunc float %med3 to half124  ret half %cast125}126 127define half @fmed3_f32_fpext_f16_multi_use(half %arg0, half %arg1, half %arg2, ptr addrspace(1) %ptr) #1 {128; GFX7-SDAG-LABEL: fmed3_f32_fpext_f16_multi_use:129; GFX7-SDAG:       ; %bb.0:130; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)131; GFX7-SDAG-NEXT:    v_med3_f32 v1, v0, v1, v2132; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v1133; GFX7-SDAG-NEXT:    flat_store_dword v[3:4], v1134; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0135; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0)136; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]137;138; GFX7-GISEL-LABEL: fmed3_f32_fpext_f16_multi_use:139; GFX7-GISEL:       ; %bb.0:140; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)141; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0142; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1143; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v2, v2144; GFX7-GISEL-NEXT:    v_med3_f32 v1, v0, v1, v2145; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v1146; GFX7-GISEL-NEXT:    flat_store_dword v[3:4], v1147; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0)148; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]149;150; GFX8-LABEL: fmed3_f32_fpext_f16_multi_use:151; GFX8:       ; %bb.0:152; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)153; GFX8-NEXT:    v_cvt_f32_f16_e32 v0, v0154; GFX8-NEXT:    v_cvt_f32_f16_e32 v1, v1155; GFX8-NEXT:    v_cvt_f32_f16_e32 v2, v2156; GFX8-NEXT:    v_med3_f32 v1, v0, v1, v2157; GFX8-NEXT:    v_cvt_f16_f32_e32 v0, v1158; GFX8-NEXT:    flat_store_dword v[3:4], v1159; GFX8-NEXT:    s_waitcnt vmcnt(0)160; GFX8-NEXT:    s_setpc_b64 s[30:31]161;162; GFX9-LABEL: fmed3_f32_fpext_f16_multi_use:163; GFX9:       ; %bb.0:164; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)165; GFX9-NEXT:    v_cvt_f32_f16_e32 v0, v0166; GFX9-NEXT:    v_cvt_f32_f16_e32 v1, v1167; GFX9-NEXT:    v_cvt_f32_f16_e32 v2, v2168; GFX9-NEXT:    v_med3_f32 v1, v0, v1, v2169; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v1170; GFX9-NEXT:    global_store_dword v[3:4], v1, off171; GFX9-NEXT:    s_waitcnt vmcnt(0)172; GFX9-NEXT:    s_setpc_b64 s[30:31]173  %arg0.ext = fpext half %arg0 to float174  %arg1.ext = fpext half %arg1 to float175  %arg2.ext = fpext half %arg2 to float176  %med3 = call float @llvm.amdgcn.fmed3.f32(float %arg0.ext, float %arg1.ext, float %arg2.ext)177  store float %med3, ptr addrspace(1) %ptr178  %cast = fptrunc float %med3 to half179  ret half %cast180}181 182define half @fmed3_f32_fpext_f16_k0(half %arg1, half %arg2) #1 {183; GFX7-SDAG-LABEL: fmed3_f32_fpext_f16_k0:184; GFX7-SDAG:       ; %bb.0:185; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)186; GFX7-SDAG-NEXT:    v_med3_f32 v0, 2.0, v0, v1187; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0188; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0189; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]190;191; GFX7-GISEL-LABEL: fmed3_f32_fpext_f16_k0:192; GFX7-GISEL:       ; %bb.0:193; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)194; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0195; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1196; GFX7-GISEL-NEXT:    v_med3_f32 v0, 2.0, v0, v1197; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0198; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]199;200; GFX8-SDAG-LABEL: fmed3_f32_fpext_f16_k0:201; GFX8-SDAG:       ; %bb.0:202; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)203; GFX8-SDAG-NEXT:    v_max_f16_e32 v2, 2.0, v0204; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, 2.0, v0205; GFX8-SDAG-NEXT:    v_max_f16_e32 v0, v0, v1206; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v2, v0207; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]208;209; GFX8-GISEL-LABEL: fmed3_f32_fpext_f16_k0:210; GFX8-GISEL:       ; %bb.0:211; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)212; GFX8-GISEL-NEXT:    v_min_f16_e32 v2, 2.0, v0213; GFX8-GISEL-NEXT:    v_max_f16_e32 v0, 2.0, v0214; GFX8-GISEL-NEXT:    v_max_f16_e32 v1, v2, v1215; GFX8-GISEL-NEXT:    v_min_f16_e32 v0, v0, v1216; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]217;218; GFX9-LABEL: fmed3_f32_fpext_f16_k0:219; GFX9:       ; %bb.0:220; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)221; GFX9-NEXT:    v_cvt_f32_f16_e32 v0, v0222; GFX9-NEXT:    v_cvt_f32_f16_e32 v1, v1223; GFX9-NEXT:    v_med3_f32 v0, 2.0, v0, v1224; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v0225; GFX9-NEXT:    s_setpc_b64 s[30:31]226  %arg1.ext = fpext half %arg1 to float227  %arg2.ext = fpext half %arg2 to float228  %med3 = call float @llvm.amdgcn.fmed3.f32(float 2.0, float %arg1.ext, float %arg2.ext)229  %cast = fptrunc float %med3 to half230  ret half %cast231}232 233define half @fmed3_f32_fpext_f16_k1(half %arg0, half %arg2) #1 {234; GFX7-SDAG-LABEL: fmed3_f32_fpext_f16_k1:235; GFX7-SDAG:       ; %bb.0:236; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)237; GFX7-SDAG-NEXT:    v_med3_f32 v0, v0, 2.0, v1238; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0239; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0240; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]241;242; GFX7-GISEL-LABEL: fmed3_f32_fpext_f16_k1:243; GFX7-GISEL:       ; %bb.0:244; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)245; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0246; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1247; GFX7-GISEL-NEXT:    v_med3_f32 v0, v0, 2.0, v1248; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0249; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]250;251; GFX8-SDAG-LABEL: fmed3_f32_fpext_f16_k1:252; GFX8-SDAG:       ; %bb.0:253; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)254; GFX8-SDAG-NEXT:    v_max_f16_e32 v2, 2.0, v0255; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, 2.0, v0256; GFX8-SDAG-NEXT:    v_max_f16_e32 v0, v0, v1257; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v2, v0258; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]259;260; GFX8-GISEL-LABEL: fmed3_f32_fpext_f16_k1:261; GFX8-GISEL:       ; %bb.0:262; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)263; GFX8-GISEL-NEXT:    v_min_f16_e32 v2, 2.0, v0264; GFX8-GISEL-NEXT:    v_max_f16_e32 v0, 2.0, v0265; GFX8-GISEL-NEXT:    v_max_f16_e32 v1, v2, v1266; GFX8-GISEL-NEXT:    v_min_f16_e32 v0, v0, v1267; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]268;269; GFX9-LABEL: fmed3_f32_fpext_f16_k1:270; GFX9:       ; %bb.0:271; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)272; GFX9-NEXT:    v_cvt_f32_f16_e32 v0, v0273; GFX9-NEXT:    v_cvt_f32_f16_e32 v1, v1274; GFX9-NEXT:    v_med3_f32 v0, v0, 2.0, v1275; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v0276; GFX9-NEXT:    s_setpc_b64 s[30:31]277  %arg0.ext = fpext half %arg0 to float278  %arg2.ext = fpext half %arg2 to float279  %med3 = call float @llvm.amdgcn.fmed3.f32(float %arg0.ext, float 2.0, float %arg2.ext)280  %cast = fptrunc float %med3 to half281  ret half %cast282}283 284define half @fmed3_f32_fpext_f16_k2(half %arg0, half %arg1) #1 {285; GFX7-SDAG-LABEL: fmed3_f32_fpext_f16_k2:286; GFX7-SDAG:       ; %bb.0:287; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)288; GFX7-SDAG-NEXT:    v_med3_f32 v0, v0, v1, 2.0289; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0290; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0291; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]292;293; GFX7-GISEL-LABEL: fmed3_f32_fpext_f16_k2:294; GFX7-GISEL:       ; %bb.0:295; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)296; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0297; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1298; GFX7-GISEL-NEXT:    v_med3_f32 v0, v0, v1, 2.0299; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0300; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]301;302; GFX8-SDAG-LABEL: fmed3_f32_fpext_f16_k2:303; GFX8-SDAG:       ; %bb.0:304; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)305; GFX8-SDAG-NEXT:    v_max_f16_e32 v2, v0, v1306; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v0, v1307; GFX8-SDAG-NEXT:    v_max_f16_e32 v0, 2.0, v0308; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v2, v0309; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]310;311; GFX8-GISEL-LABEL: fmed3_f32_fpext_f16_k2:312; GFX8-GISEL:       ; %bb.0:313; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)314; GFX8-GISEL-NEXT:    v_min_f16_e32 v2, v0, v1315; GFX8-GISEL-NEXT:    v_max_f16_e32 v0, v0, v1316; GFX8-GISEL-NEXT:    v_max_f16_e32 v1, 2.0, v2317; GFX8-GISEL-NEXT:    v_min_f16_e32 v0, v0, v1318; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]319;320; GFX9-LABEL: fmed3_f32_fpext_f16_k2:321; GFX9:       ; %bb.0:322; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)323; GFX9-NEXT:    v_cvt_f32_f16_e32 v0, v0324; GFX9-NEXT:    v_cvt_f32_f16_e32 v1, v1325; GFX9-NEXT:    v_med3_f32 v0, v0, v1, 2.0326; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v0327; GFX9-NEXT:    s_setpc_b64 s[30:31]328  %arg0.ext = fpext half %arg0 to float329  %arg1.ext = fpext half %arg1 to float330  %med3 = call float @llvm.amdgcn.fmed3.f32(float %arg0.ext, float %arg1.ext, float 2.0)331  %cast = fptrunc float %med3 to half332  ret half %cast333}334 335define half @fmed3_f32_fpext_f16_k0_k1(half %arg2) #1 {336; GFX7-SDAG-LABEL: fmed3_f32_fpext_f16_k0_k1:337; GFX7-SDAG:       ; %bb.0:338; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)339; GFX7-SDAG-NEXT:    v_mov_b32_e32 v1, 0x41800000340; GFX7-SDAG-NEXT:    v_med3_f32 v0, 0, v1, v0341; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0342; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0343; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]344;345; GFX7-GISEL-LABEL: fmed3_f32_fpext_f16_k0_k1:346; GFX7-GISEL:       ; %bb.0:347; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)348; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0349; GFX7-GISEL-NEXT:    v_mov_b32_e32 v1, 0x41800000350; GFX7-GISEL-NEXT:    v_med3_f32 v0, 0, v1, v0351; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0352; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]353;354; GFX8-SDAG-LABEL: fmed3_f32_fpext_f16_k0_k1:355; GFX8-SDAG:       ; %bb.0:356; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)357; GFX8-SDAG-NEXT:    v_mov_b32_e32 v1, 0x4c00358; GFX8-SDAG-NEXT:    v_max_f16_e32 v2, 0, v1359; GFX8-SDAG-NEXT:    v_min_f16_e32 v1, 0, v1360; GFX8-SDAG-NEXT:    v_max_f16_e32 v0, v1, v0361; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v2, v0362; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]363;364; GFX8-GISEL-LABEL: fmed3_f32_fpext_f16_k0_k1:365; GFX8-GISEL:       ; %bb.0:366; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)367; GFX8-GISEL-NEXT:    v_mov_b32_e32 v1, 0x4c00368; GFX8-GISEL-NEXT:    v_min_f16_e32 v2, 0, v1369; GFX8-GISEL-NEXT:    v_max_f16_e32 v1, 0, v1370; GFX8-GISEL-NEXT:    v_max_f16_e32 v0, v2, v0371; GFX8-GISEL-NEXT:    v_min_f16_e32 v0, v1, v0372; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]373;374; GFX9-LABEL: fmed3_f32_fpext_f16_k0_k1:375; GFX9:       ; %bb.0:376; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)377; GFX9-NEXT:    v_cvt_f32_f16_e32 v0, v0378; GFX9-NEXT:    v_mov_b32_e32 v1, 0x41800000379; GFX9-NEXT:    v_med3_f32 v0, 0, v1, v0380; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v0381; GFX9-NEXT:    s_setpc_b64 s[30:31]382  %arg2.ext = fpext half %arg2 to float383  %med3 = call float @llvm.amdgcn.fmed3.f32(float 0.0, float 16.0, float %arg2.ext)384  %cast = fptrunc float %med3 to half385  ret half %cast386}387 388define half @fmed3_f32_fpext_f16_k0_k2(half %arg1) #1 {389; GFX7-SDAG-LABEL: fmed3_f32_fpext_f16_k0_k2:390; GFX7-SDAG:       ; %bb.0:391; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)392; GFX7-SDAG-NEXT:    v_med3_f32 v0, 0, v0, 2.0393; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0394; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0395; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]396;397; GFX7-GISEL-LABEL: fmed3_f32_fpext_f16_k0_k2:398; GFX7-GISEL:       ; %bb.0:399; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)400; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0401; GFX7-GISEL-NEXT:    v_med3_f32 v0, 0, v0, 2.0402; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0403; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]404;405; GFX8-SDAG-LABEL: fmed3_f32_fpext_f16_k0_k2:406; GFX8-SDAG:       ; %bb.0:407; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)408; GFX8-SDAG-NEXT:    v_max_f16_e32 v1, 0, v0409; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, 0, v0410; GFX8-SDAG-NEXT:    v_max_f16_e32 v0, 2.0, v0411; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v1, v0412; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]413;414; GFX8-GISEL-LABEL: fmed3_f32_fpext_f16_k0_k2:415; GFX8-GISEL:       ; %bb.0:416; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)417; GFX8-GISEL-NEXT:    v_min_f16_e32 v1, 0, v0418; GFX8-GISEL-NEXT:    v_max_f16_e32 v0, 0, v0419; GFX8-GISEL-NEXT:    v_max_f16_e32 v1, 2.0, v1420; GFX8-GISEL-NEXT:    v_min_f16_e32 v0, v0, v1421; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]422;423; GFX9-LABEL: fmed3_f32_fpext_f16_k0_k2:424; GFX9:       ; %bb.0:425; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)426; GFX9-NEXT:    v_cvt_f32_f16_e32 v0, v0427; GFX9-NEXT:    v_med3_f32 v0, 0, v0, 2.0428; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v0429; GFX9-NEXT:    s_setpc_b64 s[30:31]430  %arg1.ext = fpext half %arg1 to float431  %med3 = call float @llvm.amdgcn.fmed3.f32(float 0.0, float %arg1.ext, float 2.0)432  %cast = fptrunc float %med3 to half433  ret half %cast434}435 436define half @fmed3_f32_fpext_f16_fabs(half %arg0, half %arg1, half %arg2) #1 {437; GFX7-SDAG-LABEL: fmed3_f32_fpext_f16_fabs:438; GFX7-SDAG:       ; %bb.0:439; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)440; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0441; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1442; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v2443; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e64 v0, |v0|444; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e64 v1, |v1|445; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e64 v2, |v2|446; GFX7-SDAG-NEXT:    v_med3_f32 v0, v0, v1, v2447; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0448; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0449; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]450;451; GFX7-GISEL-LABEL: fmed3_f32_fpext_f16_fabs:452; GFX7-GISEL:       ; %bb.0:453; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)454; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e64 v0, |v0|455; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e64 v1, |v1|456; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e64 v2, |v2|457; GFX7-GISEL-NEXT:    v_med3_f32 v0, v0, v1, v2458; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0459; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]460;461; GFX8-SDAG-LABEL: fmed3_f32_fpext_f16_fabs:462; GFX8-SDAG:       ; %bb.0:463; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)464; GFX8-SDAG-NEXT:    v_max_f16_e64 v3, |v0|, |v1|465; GFX8-SDAG-NEXT:    v_min_f16_e64 v0, |v0|, |v1|466; GFX8-SDAG-NEXT:    v_max_f16_e64 v0, v0, |v2|467; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v3, v0468; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]469;470; GFX8-GISEL-LABEL: fmed3_f32_fpext_f16_fabs:471; GFX8-GISEL:       ; %bb.0:472; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)473; GFX8-GISEL-NEXT:    v_min_f16_e64 v3, |v0|, |v1|474; GFX8-GISEL-NEXT:    v_max_f16_e64 v0, |v0|, |v1|475; GFX8-GISEL-NEXT:    v_max_f16_e64 v1, v3, |v2|476; GFX8-GISEL-NEXT:    v_min_f16_e32 v0, v0, v1477; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]478;479; GFX9-LABEL: fmed3_f32_fpext_f16_fabs:480; GFX9:       ; %bb.0:481; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)482; GFX9-NEXT:    v_cvt_f32_f16_e64 v0, |v0|483; GFX9-NEXT:    v_cvt_f32_f16_e64 v1, |v1|484; GFX9-NEXT:    v_cvt_f32_f16_e64 v2, |v2|485; GFX9-NEXT:    v_med3_f32 v0, v0, v1, v2486; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v0487; GFX9-NEXT:    s_setpc_b64 s[30:31]488  %fabs.arg0 = call half @llvm.fabs.f16(half %arg0)489  %fabs.arg1 = call half @llvm.fabs.f16(half %arg1)490  %fabs.arg2 = call half @llvm.fabs.f16(half %arg2)491  %arg0.ext = fpext half %fabs.arg0 to float492  %arg1.ext = fpext half %fabs.arg1 to float493  %arg2.ext = fpext half %fabs.arg2 to float494  %med3 = call float @llvm.amdgcn.fmed3.f32(float %arg0.ext, float %arg1.ext, float %arg2.ext)495  %cast = fptrunc float %med3 to half496  ret half %cast497}498 499define half @fmed3_fabs_f32_fpext_f16(half %arg0, half %arg1, half %arg2) #1 {500; GFX7-SDAG-LABEL: fmed3_fabs_f32_fpext_f16:501; GFX7-SDAG:       ; %bb.0:502; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)503; GFX7-SDAG-NEXT:    v_med3_f32 v0, |v0|, |v1|, |v2|504; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0505; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0506; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]507;508; GFX7-GISEL-LABEL: fmed3_fabs_f32_fpext_f16:509; GFX7-GISEL:       ; %bb.0:510; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)511; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0512; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1513; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v2, v2514; GFX7-GISEL-NEXT:    v_med3_f32 v0, |v0|, |v1|, |v2|515; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0516; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]517;518; GFX8-LABEL: fmed3_fabs_f32_fpext_f16:519; GFX8:       ; %bb.0:520; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)521; GFX8-NEXT:    v_cvt_f32_f16_e32 v0, v0522; GFX8-NEXT:    v_cvt_f32_f16_e32 v1, v1523; GFX8-NEXT:    v_cvt_f32_f16_e32 v2, v2524; GFX8-NEXT:    v_med3_f32 v0, |v0|, |v1|, |v2|525; GFX8-NEXT:    v_cvt_f16_f32_e32 v0, v0526; GFX8-NEXT:    s_setpc_b64 s[30:31]527;528; GFX9-LABEL: fmed3_fabs_f32_fpext_f16:529; GFX9:       ; %bb.0:530; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)531; GFX9-NEXT:    v_cvt_f32_f16_e32 v0, v0532; GFX9-NEXT:    v_cvt_f32_f16_e32 v1, v1533; GFX9-NEXT:    v_cvt_f32_f16_e32 v2, v2534; GFX9-NEXT:    v_med3_f32 v0, |v0|, |v1|, |v2|535; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v0536; GFX9-NEXT:    s_setpc_b64 s[30:31]537  %arg0.ext = fpext half %arg0 to float538  %arg1.ext = fpext half %arg1 to float539  %arg2.ext = fpext half %arg2 to float540  %fabs.ext.arg0 = call float @llvm.fabs.f32(float %arg0.ext)541  %fabs.ext.arg1 = call float @llvm.fabs.f32(float %arg1.ext)542  %fabs.ext.arg2 = call float @llvm.fabs.f32(float %arg2.ext)543  %med3 = call float @llvm.amdgcn.fmed3.f32(float %fabs.ext.arg0, float %fabs.ext.arg1, float %fabs.ext.arg2)544  %cast = fptrunc float %med3 to half545  ret half %cast546}547 548define half @fmed3_f32_fpext_f16_fneg(half %arg0, half %arg1, half %arg2) #1 {549; GFX7-SDAG-LABEL: fmed3_f32_fpext_f16_fneg:550; GFX7-SDAG:       ; %bb.0:551; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)552; GFX7-SDAG-NEXT:    v_med3_f32 v0, -v0, -v1, -v2553; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0554; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0555; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]556;557; GFX7-GISEL-LABEL: fmed3_f32_fpext_f16_fneg:558; GFX7-GISEL:       ; %bb.0:559; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)560; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e64 v0, -v0561; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e64 v1, -v1562; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e64 v2, -v2563; GFX7-GISEL-NEXT:    v_med3_f32 v0, v0, v1, v2564; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0565; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]566;567; GFX8-SDAG-LABEL: fmed3_f32_fpext_f16_fneg:568; GFX8-SDAG:       ; %bb.0:569; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)570; GFX8-SDAG-NEXT:    v_max_f16_e64 v3, -v0, -v1571; GFX8-SDAG-NEXT:    v_min_f16_e64 v0, -v0, -v1572; GFX8-SDAG-NEXT:    v_max_f16_e64 v0, v0, -v2573; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v3, v0574; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]575;576; GFX8-GISEL-LABEL: fmed3_f32_fpext_f16_fneg:577; GFX8-GISEL:       ; %bb.0:578; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)579; GFX8-GISEL-NEXT:    v_min_f16_e64 v3, -v0, -v1580; GFX8-GISEL-NEXT:    v_max_f16_e64 v0, -v0, -v1581; GFX8-GISEL-NEXT:    v_max_f16_e64 v1, v3, -v2582; GFX8-GISEL-NEXT:    v_min_f16_e32 v0, v0, v1583; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]584;585; GFX9-LABEL: fmed3_f32_fpext_f16_fneg:586; GFX9:       ; %bb.0:587; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)588; GFX9-NEXT:    v_cvt_f32_f16_e64 v0, -v0589; GFX9-NEXT:    v_cvt_f32_f16_e64 v1, -v1590; GFX9-NEXT:    v_cvt_f32_f16_e64 v2, -v2591; GFX9-NEXT:    v_med3_f32 v0, v0, v1, v2592; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v0593; GFX9-NEXT:    s_setpc_b64 s[30:31]594  %fneg.arg0 = fneg half %arg0595  %fneg.arg1 = fneg half %arg1596  %fneg.arg2 = fneg half %arg2597  %arg0.ext = fpext half %fneg.arg0 to float598  %arg1.ext = fpext half %fneg.arg1 to float599  %arg2.ext = fpext half %fneg.arg2 to float600  %med3 = call float @llvm.amdgcn.fmed3.f32(float %arg0.ext, float %arg1.ext, float %arg2.ext)601  %cast = fptrunc float %med3 to half602  ret half %cast603}604 605define half @fmed3_fneg_f32_fpext_f16(half %arg0, half %arg1, half %arg2) #1 {606; GFX7-SDAG-LABEL: fmed3_fneg_f32_fpext_f16:607; GFX7-SDAG:       ; %bb.0:608; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)609; GFX7-SDAG-NEXT:    v_med3_f32 v0, -v0, -v1, -v2610; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0611; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0612; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]613;614; GFX7-GISEL-LABEL: fmed3_fneg_f32_fpext_f16:615; GFX7-GISEL:       ; %bb.0:616; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)617; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0618; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1619; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v2, v2620; GFX7-GISEL-NEXT:    v_med3_f32 v0, -v0, -v1, -v2621; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0622; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]623;624; GFX8-LABEL: fmed3_fneg_f32_fpext_f16:625; GFX8:       ; %bb.0:626; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)627; GFX8-NEXT:    v_cvt_f32_f16_e32 v0, v0628; GFX8-NEXT:    v_cvt_f32_f16_e32 v1, v1629; GFX8-NEXT:    v_cvt_f32_f16_e32 v2, v2630; GFX8-NEXT:    v_med3_f32 v0, -v0, -v1, -v2631; GFX8-NEXT:    v_cvt_f16_f32_e32 v0, v0632; GFX8-NEXT:    s_setpc_b64 s[30:31]633;634; GFX9-LABEL: fmed3_fneg_f32_fpext_f16:635; GFX9:       ; %bb.0:636; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)637; GFX9-NEXT:    v_cvt_f32_f16_e32 v0, v0638; GFX9-NEXT:    v_cvt_f32_f16_e32 v1, v1639; GFX9-NEXT:    v_cvt_f32_f16_e32 v2, v2640; GFX9-NEXT:    v_med3_f32 v0, -v0, -v1, -v2641; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v0642; GFX9-NEXT:    s_setpc_b64 s[30:31]643  %arg0.ext = fpext half %arg0 to float644  %arg1.ext = fpext half %arg1 to float645  %arg2.ext = fpext half %arg2 to float646  %fneg.ext.arg0 = fneg float %arg0.ext647  %fneg.ext.arg1 = fneg float %arg1.ext648  %fneg.ext.arg2 = fneg float %arg2.ext649  %med3 = call float @llvm.amdgcn.fmed3.f32(float %fneg.ext.arg0, float %fneg.ext.arg1, float %fneg.ext.arg2)650  %cast = fptrunc float %med3 to half651  ret half %cast652}653 654define half @fmed3_f32_fpext_f16_fneg_fabs(half %arg0, half %arg1, half %arg2) #1 {655; GFX7-SDAG-LABEL: fmed3_f32_fpext_f16_fneg_fabs:656; GFX7-SDAG:       ; %bb.0:657; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)658; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0659; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1660; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v2, v2661; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e64 v0, |v0|662; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e64 v1, |v1|663; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e64 v2, |v2|664; GFX7-SDAG-NEXT:    v_med3_f32 v0, -v0, -v1, -v2665; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0666; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0667; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]668;669; GFX7-GISEL-LABEL: fmed3_f32_fpext_f16_fneg_fabs:670; GFX7-GISEL:       ; %bb.0:671; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)672; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e64 v0, -|v0|673; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e64 v1, -|v1|674; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e64 v2, -|v2|675; GFX7-GISEL-NEXT:    v_med3_f32 v0, v0, v1, v2676; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0677; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]678;679; GFX8-SDAG-LABEL: fmed3_f32_fpext_f16_fneg_fabs:680; GFX8-SDAG:       ; %bb.0:681; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)682; GFX8-SDAG-NEXT:    v_max_f16_e64 v3, -|v0|, -|v1|683; GFX8-SDAG-NEXT:    v_min_f16_e64 v0, -|v0|, -|v1|684; GFX8-SDAG-NEXT:    v_max_f16_e64 v0, v0, -|v2|685; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v3, v0686; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]687;688; GFX8-GISEL-LABEL: fmed3_f32_fpext_f16_fneg_fabs:689; GFX8-GISEL:       ; %bb.0:690; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)691; GFX8-GISEL-NEXT:    v_min_f16_e64 v3, -|v0|, -|v1|692; GFX8-GISEL-NEXT:    v_max_f16_e64 v0, -|v0|, -|v1|693; GFX8-GISEL-NEXT:    v_max_f16_e64 v1, v3, -|v2|694; GFX8-GISEL-NEXT:    v_min_f16_e32 v0, v0, v1695; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]696;697; GFX9-LABEL: fmed3_f32_fpext_f16_fneg_fabs:698; GFX9:       ; %bb.0:699; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)700; GFX9-NEXT:    v_cvt_f32_f16_e64 v0, -|v0|701; GFX9-NEXT:    v_cvt_f32_f16_e64 v1, -|v1|702; GFX9-NEXT:    v_cvt_f32_f16_e64 v2, -|v2|703; GFX9-NEXT:    v_med3_f32 v0, v0, v1, v2704; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v0705; GFX9-NEXT:    s_setpc_b64 s[30:31]706  %fabs.arg0 = call half @llvm.fabs.f16(half %arg0)707  %fabs.arg1 = call half @llvm.fabs.f16(half %arg1)708  %fabs.arg2 = call half @llvm.fabs.f16(half %arg2)709  %fneg.fabs.arg0 = fneg half %fabs.arg0710  %fneg.fabs.arg1 = fneg half %fabs.arg1711  %fneg.fabs.arg2 = fneg half %fabs.arg2712  %arg0.ext = fpext half %fneg.fabs.arg0 to float713  %arg1.ext = fpext half %fneg.fabs.arg1 to float714  %arg2.ext = fpext half %fneg.fabs.arg2 to float715  %med3 = call float @llvm.amdgcn.fmed3.f32(float %arg0.ext, float %arg1.ext, float %arg2.ext)716  %cast = fptrunc float %med3 to half717  ret half %cast718}719 720define half @fmed3_fneg_fabs_f32_fpext_f16(half %arg0, half %arg1, half %arg2) #1 {721; GFX7-SDAG-LABEL: fmed3_fneg_fabs_f32_fpext_f16:722; GFX7-SDAG:       ; %bb.0:723; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)724; GFX7-SDAG-NEXT:    v_med3_f32 v0, -|v0|, -|v1|, -|v2|725; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0726; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0727; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]728;729; GFX7-GISEL-LABEL: fmed3_fneg_fabs_f32_fpext_f16:730; GFX7-GISEL:       ; %bb.0:731; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)732; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0733; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1734; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v2, v2735; GFX7-GISEL-NEXT:    v_med3_f32 v0, -|v0|, -|v1|, -|v2|736; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0737; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]738;739; GFX8-LABEL: fmed3_fneg_fabs_f32_fpext_f16:740; GFX8:       ; %bb.0:741; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)742; GFX8-NEXT:    v_cvt_f32_f16_e32 v0, v0743; GFX8-NEXT:    v_cvt_f32_f16_e32 v1, v1744; GFX8-NEXT:    v_cvt_f32_f16_e32 v2, v2745; GFX8-NEXT:    v_med3_f32 v0, -|v0|, -|v1|, -|v2|746; GFX8-NEXT:    v_cvt_f16_f32_e32 v0, v0747; GFX8-NEXT:    s_setpc_b64 s[30:31]748;749; GFX9-LABEL: fmed3_fneg_fabs_f32_fpext_f16:750; GFX9:       ; %bb.0:751; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)752; GFX9-NEXT:    v_cvt_f32_f16_e32 v0, v0753; GFX9-NEXT:    v_cvt_f32_f16_e32 v1, v1754; GFX9-NEXT:    v_cvt_f32_f16_e32 v2, v2755; GFX9-NEXT:    v_med3_f32 v0, -|v0|, -|v1|, -|v2|756; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v0757; GFX9-NEXT:    s_setpc_b64 s[30:31]758  %arg0.ext = fpext half %arg0 to float759  %arg1.ext = fpext half %arg1 to float760  %arg2.ext = fpext half %arg2 to float761  %fabs.ext.arg0 = call float @llvm.fabs.f32(float %arg0.ext)762  %fabs.ext.arg1 = call float @llvm.fabs.f32(float %arg1.ext)763  %fabs.ext.arg2 = call float @llvm.fabs.f32(float %arg2.ext)764  %fneg.fabs.ext.arg0 = fneg float %fabs.ext.arg0765  %fneg.fabs.ext.arg1 = fneg float %fabs.ext.arg1766  %fneg.fabs.ext.arg2 = fneg float %fabs.ext.arg2767  %med3 = call float @llvm.amdgcn.fmed3.f32(float %fneg.fabs.ext.arg0, float %fneg.fabs.ext.arg1, float %fneg.fabs.ext.arg2)768  %cast = fptrunc float %med3 to half769  ret half %cast770}771; --------------------------------------------------------------------------------772; Negative tests773; --------------------------------------------------------------------------------774 775define bfloat @fmed3_f32_fpext_f16_fptrunc_bf16(half %arg0, half %arg1, half %arg2) #1 {776; GFX7-LABEL: fmed3_f32_fpext_f16_fptrunc_bf16:777; GFX7:       ; %bb.0:778; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)779; GFX7-NEXT:    v_med3_f32 v0, v0, v1, v2780; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0781; GFX7-NEXT:    s_setpc_b64 s[30:31]782;783; GFX8-LABEL: fmed3_f32_fpext_f16_fptrunc_bf16:784; GFX8:       ; %bb.0:785; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)786; GFX8-NEXT:    v_cvt_f32_f16_e32 v0, v0787; GFX8-NEXT:    v_cvt_f32_f16_e32 v1, v1788; GFX8-NEXT:    v_cvt_f32_f16_e32 v2, v2789; GFX8-NEXT:    v_med3_f32 v0, v0, v1, v2790; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1791; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0792; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1793; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0794; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0795; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc796; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0797; GFX8-NEXT:    s_setpc_b64 s[30:31]798;799; GFX9-LABEL: fmed3_f32_fpext_f16_fptrunc_bf16:800; GFX9:       ; %bb.0:801; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)802; GFX9-NEXT:    v_cvt_f32_f16_e32 v0, v0803; GFX9-NEXT:    v_cvt_f32_f16_e32 v1, v1804; GFX9-NEXT:    v_cvt_f32_f16_e32 v2, v2805; GFX9-NEXT:    s_movk_i32 s4, 0x7fff806; GFX9-NEXT:    v_med3_f32 v0, v0, v1, v2807; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1808; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4809; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0810; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0811; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc812; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0813; GFX9-NEXT:    s_setpc_b64 s[30:31]814  %arg0.ext = fpext half %arg0 to float815  %arg1.ext = fpext half %arg1 to float816  %arg2.ext = fpext half %arg2 to float817  %med3 = call float @llvm.amdgcn.fmed3.f32(float %arg0.ext, float %arg1.ext, float %arg2.ext)818  %cast = fptrunc float %med3 to bfloat819  ret bfloat %cast820}821 822define half @fmed3_f32_fpext_f16_multi_use_0(half %arg0, half %arg1, half %arg2, ptr addrspace(1) %ptr) #1 {823; GFX7-SDAG-LABEL: fmed3_f32_fpext_f16_multi_use_0:824; GFX7-SDAG:       ; %bb.0:825; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)826; GFX7-SDAG-NEXT:    v_med3_f32 v1, v0, v1, v2827; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1828; GFX7-SDAG-NEXT:    flat_store_dword v[3:4], v0829; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1830; GFX7-SDAG-NEXT:    v_mov_b32_e32 v0, v1831; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0)832; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]833;834; GFX7-GISEL-LABEL: fmed3_f32_fpext_f16_multi_use_0:835; GFX7-GISEL:       ; %bb.0:836; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)837; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v5, v0838; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v1839; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v2840; GFX7-GISEL-NEXT:    flat_store_dword v[3:4], v5841; GFX7-GISEL-NEXT:    v_med3_f32 v0, v5, v0, v1842; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0843; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0)844; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]845;846; GFX8-SDAG-LABEL: fmed3_f32_fpext_f16_multi_use_0:847; GFX8-SDAG:       ; %bb.0:848; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)849; GFX8-SDAG-NEXT:    v_cvt_f32_f16_e32 v5, v0850; GFX8-SDAG-NEXT:    flat_store_dword v[3:4], v5851; GFX8-SDAG-NEXT:    v_max_f16_e32 v3, v0, v1852; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v0, v1853; GFX8-SDAG-NEXT:    v_max_f16_e32 v0, v0, v2854; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v3, v0855; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0)856; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]857;858; GFX8-GISEL-LABEL: fmed3_f32_fpext_f16_multi_use_0:859; GFX8-GISEL:       ; %bb.0:860; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)861; GFX8-GISEL-NEXT:    v_cvt_f32_f16_e32 v5, v0862; GFX8-GISEL-NEXT:    flat_store_dword v[3:4], v5863; GFX8-GISEL-NEXT:    v_min_f16_e32 v3, v0, v1864; GFX8-GISEL-NEXT:    v_max_f16_e32 v0, v0, v1865; GFX8-GISEL-NEXT:    v_max_f16_e32 v1, v3, v2866; GFX8-GISEL-NEXT:    v_min_f16_e32 v0, v0, v1867; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0)868; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]869;870; GFX9-LABEL: fmed3_f32_fpext_f16_multi_use_0:871; GFX9:       ; %bb.0:872; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)873; GFX9-NEXT:    v_cvt_f32_f16_e32 v5, v0874; GFX9-NEXT:    v_cvt_f32_f16_e32 v0, v1875; GFX9-NEXT:    v_cvt_f32_f16_e32 v1, v2876; GFX9-NEXT:    global_store_dword v[3:4], v5, off877; GFX9-NEXT:    v_med3_f32 v0, v5, v0, v1878; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v0879; GFX9-NEXT:    s_waitcnt vmcnt(0)880; GFX9-NEXT:    s_setpc_b64 s[30:31]881  %arg0.ext = fpext half %arg0 to float882  store float %arg0.ext, ptr addrspace(1) %ptr883  %arg1.ext = fpext half %arg1 to float884  %arg2.ext = fpext half %arg2 to float885  %med3 = call float @llvm.amdgcn.fmed3.f32(float %arg0.ext, float %arg1.ext, float %arg2.ext)886  %cast = fptrunc float %med3 to half887  ret half %cast888}889 890define half @fmed3_f32_fpext_f16_multi_use_1(half %arg0, half %arg1, half %arg2, ptr addrspace(1) %ptr) #1 {891; GFX7-SDAG-LABEL: fmed3_f32_fpext_f16_multi_use_1:892; GFX7-SDAG:       ; %bb.0:893; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)894; GFX7-SDAG-NEXT:    v_med3_f32 v0, v0, v1, v2895; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0896; GFX7-SDAG-NEXT:    flat_store_dword v[3:4], v1897; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0898; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0)899; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]900;901; GFX7-GISEL-LABEL: fmed3_f32_fpext_f16_multi_use_1:902; GFX7-GISEL:       ; %bb.0:903; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)904; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0905; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1906; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v2, v2907; GFX7-GISEL-NEXT:    flat_store_dword v[3:4], v1908; GFX7-GISEL-NEXT:    v_med3_f32 v0, v0, v1, v2909; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0910; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0)911; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]912;913; GFX8-SDAG-LABEL: fmed3_f32_fpext_f16_multi_use_1:914; GFX8-SDAG:       ; %bb.0:915; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)916; GFX8-SDAG-NEXT:    v_cvt_f32_f16_e32 v5, v1917; GFX8-SDAG-NEXT:    flat_store_dword v[3:4], v5918; GFX8-SDAG-NEXT:    v_max_f16_e32 v3, v0, v1919; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v0, v1920; GFX8-SDAG-NEXT:    v_max_f16_e32 v0, v0, v2921; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v3, v0922; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0)923; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]924;925; GFX8-GISEL-LABEL: fmed3_f32_fpext_f16_multi_use_1:926; GFX8-GISEL:       ; %bb.0:927; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)928; GFX8-GISEL-NEXT:    v_cvt_f32_f16_e32 v5, v1929; GFX8-GISEL-NEXT:    flat_store_dword v[3:4], v5930; GFX8-GISEL-NEXT:    v_min_f16_e32 v3, v0, v1931; GFX8-GISEL-NEXT:    v_max_f16_e32 v0, v0, v1932; GFX8-GISEL-NEXT:    v_max_f16_e32 v1, v3, v2933; GFX8-GISEL-NEXT:    v_min_f16_e32 v0, v0, v1934; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0)935; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]936;937; GFX9-LABEL: fmed3_f32_fpext_f16_multi_use_1:938; GFX9:       ; %bb.0:939; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)940; GFX9-NEXT:    v_cvt_f32_f16_e32 v0, v0941; GFX9-NEXT:    v_cvt_f32_f16_e32 v1, v1942; GFX9-NEXT:    v_cvt_f32_f16_e32 v2, v2943; GFX9-NEXT:    global_store_dword v[3:4], v1, off944; GFX9-NEXT:    v_med3_f32 v0, v0, v1, v2945; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v0946; GFX9-NEXT:    s_waitcnt vmcnt(0)947; GFX9-NEXT:    s_setpc_b64 s[30:31]948  %arg0.ext = fpext half %arg0 to float949  %arg1.ext = fpext half %arg1 to float950  store float %arg1.ext, ptr addrspace(1) %ptr951  %arg2.ext = fpext half %arg2 to float952  %med3 = call float @llvm.amdgcn.fmed3.f32(float %arg0.ext, float %arg1.ext, float %arg2.ext)953  %cast = fptrunc float %med3 to half954  ret half %cast955}956 957define half @fmed3_f32_fpext_f16_multi_use_2(half %arg0, half %arg1, half %arg2, ptr addrspace(1) %ptr) #1 {958; GFX7-SDAG-LABEL: fmed3_f32_fpext_f16_multi_use_2:959; GFX7-SDAG:       ; %bb.0:960; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)961; GFX7-SDAG-NEXT:    v_med3_f32 v0, v0, v1, v2962; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0963; GFX7-SDAG-NEXT:    flat_store_dword v[3:4], v2964; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0965; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0)966; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]967;968; GFX7-GISEL-LABEL: fmed3_f32_fpext_f16_multi_use_2:969; GFX7-GISEL:       ; %bb.0:970; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)971; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0972; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1973; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v2, v2974; GFX7-GISEL-NEXT:    v_med3_f32 v0, v0, v1, v2975; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0976; GFX7-GISEL-NEXT:    flat_store_dword v[3:4], v2977; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0)978; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]979;980; GFX8-SDAG-LABEL: fmed3_f32_fpext_f16_multi_use_2:981; GFX8-SDAG:       ; %bb.0:982; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)983; GFX8-SDAG-NEXT:    v_cvt_f32_f16_e32 v5, v2984; GFX8-SDAG-NEXT:    flat_store_dword v[3:4], v5985; GFX8-SDAG-NEXT:    v_max_f16_e32 v3, v0, v1986; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v0, v1987; GFX8-SDAG-NEXT:    v_max_f16_e32 v0, v0, v2988; GFX8-SDAG-NEXT:    v_min_f16_e32 v0, v3, v0989; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0)990; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]991;992; GFX8-GISEL-LABEL: fmed3_f32_fpext_f16_multi_use_2:993; GFX8-GISEL:       ; %bb.0:994; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)995; GFX8-GISEL-NEXT:    v_cvt_f32_f16_e32 v5, v2996; GFX8-GISEL-NEXT:    flat_store_dword v[3:4], v5997; GFX8-GISEL-NEXT:    v_min_f16_e32 v3, v0, v1998; GFX8-GISEL-NEXT:    v_max_f16_e32 v0, v0, v1999; GFX8-GISEL-NEXT:    v_max_f16_e32 v1, v3, v21000; GFX8-GISEL-NEXT:    v_min_f16_e32 v0, v0, v11001; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0)1002; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]1003;1004; GFX9-LABEL: fmed3_f32_fpext_f16_multi_use_2:1005; GFX9:       ; %bb.0:1006; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1007; GFX9-NEXT:    v_cvt_f32_f16_e32 v0, v01008; GFX9-NEXT:    v_cvt_f32_f16_e32 v1, v11009; GFX9-NEXT:    v_cvt_f32_f16_e32 v2, v21010; GFX9-NEXT:    v_med3_f32 v0, v0, v1, v21011; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v01012; GFX9-NEXT:    global_store_dword v[3:4], v2, off1013; GFX9-NEXT:    s_waitcnt vmcnt(0)1014; GFX9-NEXT:    s_setpc_b64 s[30:31]1015  %arg0.ext = fpext half %arg0 to float1016  %arg1.ext = fpext half %arg1 to float1017  %arg2.ext = fpext half %arg2 to float1018  store float %arg2.ext, ptr addrspace(1) %ptr1019  %med3 = call float @llvm.amdgcn.fmed3.f32(float %arg0.ext, float %arg1.ext, float %arg2.ext)1020  %cast = fptrunc float %med3 to1021  half ret half %cast1022}1023 1024define half @fmed3_f32_fpext_bf16(bfloat %arg0, bfloat %arg1, bfloat %arg2) #1 {1025; GFX7-LABEL: fmed3_f32_fpext_bf16:1026; GFX7:       ; %bb.0:1027; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1028; GFX7-NEXT:    v_med3_f32 v0, v0, v1, v21029; GFX7-NEXT:    v_cvt_f16_f32_e32 v0, v01030; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v01031; GFX7-NEXT:    s_setpc_b64 s[30:31]1032;1033; GFX8-LABEL: fmed3_f32_fpext_bf16:1034; GFX8:       ; %bb.0:1035; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1036; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v01037; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v11038; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v21039; GFX8-NEXT:    v_med3_f32 v0, v0, v1, v21040; GFX8-NEXT:    v_cvt_f16_f32_e32 v0, v01041; GFX8-NEXT:    s_setpc_b64 s[30:31]1042;1043; GFX9-LABEL: fmed3_f32_fpext_bf16:1044; GFX9:       ; %bb.0:1045; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1046; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v01047; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v11048; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v21049; GFX9-NEXT:    v_med3_f32 v0, v0, v1, v21050; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v01051; GFX9-NEXT:    s_setpc_b64 s[30:31]1052  %arg0.ext = fpext bfloat %arg0 to float1053  %arg1.ext = fpext bfloat %arg1 to float1054  %arg2.ext = fpext bfloat %arg2 to float1055  %med3 = call float @llvm.amdgcn.fmed3.f32(float %arg0.ext, float %arg1.ext, float %arg2.ext)1056  %cast = fptrunc float %med3 to half1057  ret half %cast1058}1059 1060define half @fmed3_f32_fpext_f16_bf16_0(bfloat %arg0, half %arg1, half %arg2) #1 {1061; GFX7-LABEL: fmed3_f32_fpext_f16_bf16_0:1062; GFX7:       ; %bb.0:1063; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1064; GFX7-NEXT:    v_med3_f32 v0, v0, v1, v21065; GFX7-NEXT:    v_cvt_f16_f32_e32 v0, v01066; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v01067; GFX7-NEXT:    s_setpc_b64 s[30:31]1068;1069; GFX8-LABEL: fmed3_f32_fpext_f16_bf16_0:1070; GFX8:       ; %bb.0:1071; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1072; GFX8-NEXT:    v_cvt_f32_f16_e32 v1, v11073; GFX8-NEXT:    v_cvt_f32_f16_e32 v2, v21074; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v01075; GFX8-NEXT:    v_med3_f32 v0, v0, v1, v21076; GFX8-NEXT:    v_cvt_f16_f32_e32 v0, v01077; GFX8-NEXT:    s_setpc_b64 s[30:31]1078;1079; GFX9-LABEL: fmed3_f32_fpext_f16_bf16_0:1080; GFX9:       ; %bb.0:1081; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1082; GFX9-NEXT:    v_cvt_f32_f16_e32 v1, v11083; GFX9-NEXT:    v_cvt_f32_f16_e32 v2, v21084; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v01085; GFX9-NEXT:    v_med3_f32 v0, v0, v1, v21086; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v01087; GFX9-NEXT:    s_setpc_b64 s[30:31]1088  %arg0.ext = fpext bfloat %arg0 to float1089  %arg1.ext = fpext half %arg1 to float1090  %arg2.ext = fpext half %arg2 to float1091  %med3 = call float @llvm.amdgcn.fmed3.f32(float %arg0.ext, float %arg1.ext, float %arg2.ext)1092  %cast = fptrunc float %med3 to half1093  ret half %cast1094}1095 1096define half @fmed3_f32_fpext_f16_bf16_1(half %arg0, bfloat %arg1, half %arg2) #1 {1097; GFX7-LABEL: fmed3_f32_fpext_f16_bf16_1:1098; GFX7:       ; %bb.0:1099; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1100; GFX7-NEXT:    v_med3_f32 v0, v0, v1, v21101; GFX7-NEXT:    v_cvt_f16_f32_e32 v0, v01102; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v01103; GFX7-NEXT:    s_setpc_b64 s[30:31]1104;1105; GFX8-LABEL: fmed3_f32_fpext_f16_bf16_1:1106; GFX8:       ; %bb.0:1107; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1108; GFX8-NEXT:    v_cvt_f32_f16_e32 v0, v01109; GFX8-NEXT:    v_cvt_f32_f16_e32 v2, v21110; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v11111; GFX8-NEXT:    v_med3_f32 v0, v0, v1, v21112; GFX8-NEXT:    v_cvt_f16_f32_e32 v0, v01113; GFX8-NEXT:    s_setpc_b64 s[30:31]1114;1115; GFX9-LABEL: fmed3_f32_fpext_f16_bf16_1:1116; GFX9:       ; %bb.0:1117; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1118; GFX9-NEXT:    v_cvt_f32_f16_e32 v0, v01119; GFX9-NEXT:    v_cvt_f32_f16_e32 v2, v21120; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v11121; GFX9-NEXT:    v_med3_f32 v0, v0, v1, v21122; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v01123; GFX9-NEXT:    s_setpc_b64 s[30:31]1124  %arg0.ext = fpext half %arg0 to float1125  %arg1.ext = fpext bfloat %arg1 to float1126  %arg2.ext = fpext half %arg2 to float1127  %med3 = call float @llvm.amdgcn.fmed3.f32(float %arg0.ext, float %arg1.ext, float %arg2.ext)1128  %cast = fptrunc float %med3 to half1129  ret half %cast1130}1131 1132define half @fmed3_f32_fpext_f16_bf16_2(half %arg0, half %arg1, bfloat %arg2) #1 {1133; GFX7-LABEL: fmed3_f32_fpext_f16_bf16_2:1134; GFX7:       ; %bb.0:1135; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1136; GFX7-NEXT:    v_med3_f32 v0, v0, v1, v21137; GFX7-NEXT:    v_cvt_f16_f32_e32 v0, v01138; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v01139; GFX7-NEXT:    s_setpc_b64 s[30:31]1140;1141; GFX8-LABEL: fmed3_f32_fpext_f16_bf16_2:1142; GFX8:       ; %bb.0:1143; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1144; GFX8-NEXT:    v_cvt_f32_f16_e32 v0, v01145; GFX8-NEXT:    v_cvt_f32_f16_e32 v1, v11146; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v21147; GFX8-NEXT:    v_med3_f32 v0, v0, v1, v21148; GFX8-NEXT:    v_cvt_f16_f32_e32 v0, v01149; GFX8-NEXT:    s_setpc_b64 s[30:31]1150;1151; GFX9-LABEL: fmed3_f32_fpext_f16_bf16_2:1152; GFX9:       ; %bb.0:1153; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1154; GFX9-NEXT:    v_cvt_f32_f16_e32 v0, v01155; GFX9-NEXT:    v_cvt_f32_f16_e32 v1, v11156; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v21157; GFX9-NEXT:    v_med3_f32 v0, v0, v1, v21158; GFX9-NEXT:    v_cvt_f16_f32_e32 v0, v01159; GFX9-NEXT:    s_setpc_b64 s[30:31]1160  %arg0.ext = fpext half %arg0 to float1161  %arg1.ext = fpext half %arg1 to float1162  %arg2.ext = fpext bfloat %arg2 to float1163  %med3 = call float @llvm.amdgcn.fmed3.f32(float %arg0.ext, float %arg1.ext, float %arg2.ext)1164  %cast = fptrunc float %med3 to half1165  ret half %cast1166}1167 1168define half @fmed3_f32_fpext_f16_unrepresentable_k0(half %arg1, half %arg2) #1 {1169; GFX7-SDAG-LABEL: fmed3_f32_fpext_f16_unrepresentable_k0:1170; GFX7-SDAG:       ; %bb.0:1171; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1172; GFX7-SDAG-NEXT:    s_mov_b32 s4, 0x4f8000001173; GFX7-SDAG-NEXT:    v_med3_f32 v0, s4, v0, v11174; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v01175; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v01176; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]1177;1178; GFX7-GISEL-LABEL: fmed3_f32_fpext_f16_unrepresentable_k0:1179; GFX7-GISEL:       ; %bb.0:1180; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1181; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v01182; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v11183; GFX7-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f8000001184; GFX7-GISEL-NEXT:    v_med3_f32 v0, v2, v0, v11185; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v01186; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]1187;1188; GFX8-SDAG-LABEL: fmed3_f32_fpext_f16_unrepresentable_k0:1189; GFX8-SDAG:       ; %bb.0:1190; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1191; GFX8-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v01192; GFX8-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v11193; GFX8-SDAG-NEXT:    s_mov_b32 s4, 0x4f8000001194; GFX8-SDAG-NEXT:    v_med3_f32 v0, s4, v0, v11195; GFX8-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v01196; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]1197;1198; GFX8-GISEL-LABEL: fmed3_f32_fpext_f16_unrepresentable_k0:1199; GFX8-GISEL:       ; %bb.0:1200; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1201; GFX8-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v01202; GFX8-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v11203; GFX8-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f8000001204; GFX8-GISEL-NEXT:    v_med3_f32 v0, v2, v0, v11205; GFX8-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v01206; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]1207;1208; GFX9-SDAG-LABEL: fmed3_f32_fpext_f16_unrepresentable_k0:1209; GFX9-SDAG:       ; %bb.0:1210; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1211; GFX9-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v01212; GFX9-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v11213; GFX9-SDAG-NEXT:    s_mov_b32 s4, 0x4f8000001214; GFX9-SDAG-NEXT:    v_med3_f32 v0, s4, v0, v11215; GFX9-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v01216; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]1217;1218; GFX9-GISEL-LABEL: fmed3_f32_fpext_f16_unrepresentable_k0:1219; GFX9-GISEL:       ; %bb.0:1220; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1221; GFX9-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v01222; GFX9-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v11223; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f8000001224; GFX9-GISEL-NEXT:    v_med3_f32 v0, v2, v0, v11225; GFX9-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v01226; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]1227  %arg1.ext = fpext half %arg1 to float1228  %arg2.ext = fpext half %arg2 to float1229  %med3 = call float @llvm.amdgcn.fmed3.f32(float 0x41f0000000000000, float %arg1.ext, float %arg2.ext)1230  %cast = fptrunc float %med3 to half1231  ret half %cast1232}1233 1234define half @fmed3_f32_fpext_f16_unrepresentable_k1(half %arg0, half %arg2) #1 {1235; GFX7-SDAG-LABEL: fmed3_f32_fpext_f16_unrepresentable_k1:1236; GFX7-SDAG:       ; %bb.0:1237; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1238; GFX7-SDAG-NEXT:    s_mov_b32 s4, 0x4f8000001239; GFX7-SDAG-NEXT:    v_med3_f32 v0, v0, s4, v11240; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v01241; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v01242; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]1243;1244; GFX7-GISEL-LABEL: fmed3_f32_fpext_f16_unrepresentable_k1:1245; GFX7-GISEL:       ; %bb.0:1246; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1247; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v01248; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v11249; GFX7-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f8000001250; GFX7-GISEL-NEXT:    v_med3_f32 v0, v0, v2, v11251; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v01252; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]1253;1254; GFX8-SDAG-LABEL: fmed3_f32_fpext_f16_unrepresentable_k1:1255; GFX8-SDAG:       ; %bb.0:1256; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1257; GFX8-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v01258; GFX8-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v11259; GFX8-SDAG-NEXT:    s_mov_b32 s4, 0x4f8000001260; GFX8-SDAG-NEXT:    v_med3_f32 v0, v0, s4, v11261; GFX8-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v01262; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]1263;1264; GFX8-GISEL-LABEL: fmed3_f32_fpext_f16_unrepresentable_k1:1265; GFX8-GISEL:       ; %bb.0:1266; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1267; GFX8-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v01268; GFX8-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v11269; GFX8-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f8000001270; GFX8-GISEL-NEXT:    v_med3_f32 v0, v0, v2, v11271; GFX8-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v01272; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]1273;1274; GFX9-SDAG-LABEL: fmed3_f32_fpext_f16_unrepresentable_k1:1275; GFX9-SDAG:       ; %bb.0:1276; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1277; GFX9-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v01278; GFX9-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v11279; GFX9-SDAG-NEXT:    s_mov_b32 s4, 0x4f8000001280; GFX9-SDAG-NEXT:    v_med3_f32 v0, v0, s4, v11281; GFX9-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v01282; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]1283;1284; GFX9-GISEL-LABEL: fmed3_f32_fpext_f16_unrepresentable_k1:1285; GFX9-GISEL:       ; %bb.0:1286; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1287; GFX9-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v01288; GFX9-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v11289; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f8000001290; GFX9-GISEL-NEXT:    v_med3_f32 v0, v0, v2, v11291; GFX9-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v01292; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]1293  %arg0.ext = fpext half %arg0 to float1294  %arg2.ext = fpext half %arg2 to float1295  %med3 = call float @llvm.amdgcn.fmed3.f32(float %arg0.ext, float 0x41f0000000000000, float %arg2.ext)1296  %cast = fptrunc float %med3 to half1297  ret half %cast1298}1299 1300define half @fmed3_f32_fpext_f16_unrepresentable_k2(half %arg0, half %arg1) #1 {1301; GFX7-SDAG-LABEL: fmed3_f32_fpext_f16_unrepresentable_k2:1302; GFX7-SDAG:       ; %bb.0:1303; GFX7-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1304; GFX7-SDAG-NEXT:    s_mov_b32 s4, 0x4f8000001305; GFX7-SDAG-NEXT:    v_med3_f32 v0, v0, v1, s41306; GFX7-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v01307; GFX7-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v01308; GFX7-SDAG-NEXT:    s_setpc_b64 s[30:31]1309;1310; GFX7-GISEL-LABEL: fmed3_f32_fpext_f16_unrepresentable_k2:1311; GFX7-GISEL:       ; %bb.0:1312; GFX7-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1313; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v01314; GFX7-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v11315; GFX7-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f8000001316; GFX7-GISEL-NEXT:    v_med3_f32 v0, v0, v1, v21317; GFX7-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v01318; GFX7-GISEL-NEXT:    s_setpc_b64 s[30:31]1319;1320; GFX8-SDAG-LABEL: fmed3_f32_fpext_f16_unrepresentable_k2:1321; GFX8-SDAG:       ; %bb.0:1322; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1323; GFX8-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v01324; GFX8-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v11325; GFX8-SDAG-NEXT:    s_mov_b32 s4, 0x4f8000001326; GFX8-SDAG-NEXT:    v_med3_f32 v0, v0, v1, s41327; GFX8-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v01328; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]1329;1330; GFX8-GISEL-LABEL: fmed3_f32_fpext_f16_unrepresentable_k2:1331; GFX8-GISEL:       ; %bb.0:1332; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1333; GFX8-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v01334; GFX8-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v11335; GFX8-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f8000001336; GFX8-GISEL-NEXT:    v_med3_f32 v0, v0, v1, v21337; GFX8-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v01338; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]1339;1340; GFX9-SDAG-LABEL: fmed3_f32_fpext_f16_unrepresentable_k2:1341; GFX9-SDAG:       ; %bb.0:1342; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1343; GFX9-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v01344; GFX9-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v11345; GFX9-SDAG-NEXT:    s_mov_b32 s4, 0x4f8000001346; GFX9-SDAG-NEXT:    v_med3_f32 v0, v0, v1, s41347; GFX9-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v01348; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]1349;1350; GFX9-GISEL-LABEL: fmed3_f32_fpext_f16_unrepresentable_k2:1351; GFX9-GISEL:       ; %bb.0:1352; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1353; GFX9-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v01354; GFX9-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v11355; GFX9-GISEL-NEXT:    v_mov_b32_e32 v2, 0x4f8000001356; GFX9-GISEL-NEXT:    v_med3_f32 v0, v0, v1, v21357; GFX9-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v01358; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]1359  %arg0.ext = fpext half %arg0 to float1360  %arg1.ext = fpext half %arg1 to float1361  %med3 = call float @llvm.amdgcn.fmed3.f32(float %arg0.ext, float %arg1.ext, float 0x41f0000000000000)1362  %cast = fptrunc float %med3 to half1363  ret half %cast1364}1365 1366attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }1367attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn }1368;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:1369; GCN: {{.*}}1370