1045 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -enable-var-scope -check-prefixes=GFX9,GFX9-SDAG %s3; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -enable-var-scope -check-prefixes=GFX9,GFX9-GISEL %s4; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 < %s | FileCheck -enable-var-scope -check-prefixes=GFX12,GFX12-SDAG,GFX12-SDAG-TRUE16 %s5; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 < %s | FileCheck -enable-var-scope -check-prefixes=GFX12,GFX12-SDAG,GFX12-SDAG-FAKE16 %s6; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 < %s | FileCheck -enable-var-scope -check-prefixes=GFX12,GFX12-GISEL,GFX12-GISEL-TRUE16 %s7; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 < %s | FileCheck -enable-var-scope -check-prefixes=GFX12,GFX12-GISEL,GFX12-GISEL-FAKE16 %s8 9define amdgpu_ps float @test_fmaximum_f32_vv(float %a, float %b) {10; GFX9-LABEL: test_fmaximum_f32_vv:11; GFX9: ; %bb.0:12; GFX9-NEXT: v_max_f32_e32 v2, v0, v113; GFX9-NEXT: v_mov_b32_e32 v3, 0x7fc0000014; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v115; GFX9-NEXT: v_cndmask_b32_e32 v0, v3, v2, vcc16; GFX9-NEXT: ; return to shader part epilog17;18; GFX12-LABEL: test_fmaximum_f32_vv:19; GFX12: ; %bb.0:20; GFX12-NEXT: v_maximum_f32 v0, v0, v121; GFX12-NEXT: ; return to shader part epilog22 %val = call float @llvm.maximum.f32(float %a, float %b)23 ret float %val24}25 26define amdgpu_ps float @test_fmaximum_f32_ss(float inreg %a, float inreg %b) {27; GFX9-LABEL: test_fmaximum_f32_ss:28; GFX9: ; %bb.0:29; GFX9-NEXT: v_mov_b32_e32 v0, s130; GFX9-NEXT: v_max_f32_e32 v1, s0, v031; GFX9-NEXT: v_mov_b32_e32 v2, 0x7fc0000032; GFX9-NEXT: v_cmp_o_f32_e32 vcc, s0, v033; GFX9-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc34; GFX9-NEXT: ; return to shader part epilog35;36; GFX12-LABEL: test_fmaximum_f32_ss:37; GFX12: ; %bb.0:38; GFX12-NEXT: s_maximum_f32 s0, s0, s139; GFX12-NEXT: s_delay_alu instid0(SALU_CYCLE_3)40; GFX12-NEXT: v_mov_b32_e32 v0, s041; GFX12-NEXT: ; return to shader part epilog42 %val = call float @llvm.maximum.f32(float %a, float %b)43 ret float %val44}45 46define amdgpu_ps float @test_fmaximum_f32_vs(float %a, float inreg %b) {47; GFX9-LABEL: test_fmaximum_f32_vs:48; GFX9: ; %bb.0:49; GFX9-NEXT: v_max_f32_e32 v1, s0, v050; GFX9-NEXT: v_mov_b32_e32 v2, 0x7fc0000051; GFX9-NEXT: v_cmp_o_f32_e32 vcc, s0, v052; GFX9-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc53; GFX9-NEXT: ; return to shader part epilog54;55; GFX12-LABEL: test_fmaximum_f32_vs:56; GFX12: ; %bb.0:57; GFX12-NEXT: v_maximum_f32 v0, v0, s058; GFX12-NEXT: ; return to shader part epilog59 %val = call float @llvm.maximum.f32(float %a, float %b)60 ret float %val61}62 63define amdgpu_ps float @test_fmaximum_nnan_f32(float %a, float %b) {64; GFX9-LABEL: test_fmaximum_nnan_f32:65; GFX9: ; %bb.0:66; GFX9-NEXT: v_max_f32_e32 v0, v0, v167; GFX9-NEXT: ; return to shader part epilog68;69; GFX12-LABEL: test_fmaximum_nnan_f32:70; GFX12: ; %bb.0:71; GFX12-NEXT: v_maximum_f32 v0, v0, v172; GFX12-NEXT: ; return to shader part epilog73 %val = call nnan float @llvm.maximum.f32(float %a, float %b)74 ret float %val75}76 77define amdgpu_ps float @test_fmaximum_nsz_f32(float %a, float %b) {78; GFX9-LABEL: test_fmaximum_nsz_f32:79; GFX9: ; %bb.0:80; GFX9-NEXT: v_max_f32_e32 v2, v0, v181; GFX9-NEXT: v_mov_b32_e32 v3, 0x7fc0000082; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v183; GFX9-NEXT: v_cndmask_b32_e32 v0, v3, v2, vcc84; GFX9-NEXT: ; return to shader part epilog85;86; GFX12-LABEL: test_fmaximum_nsz_f32:87; GFX12: ; %bb.0:88; GFX12-NEXT: v_maximum_f32 v0, v0, v189; GFX12-NEXT: ; return to shader part epilog90 %val = call nsz float @llvm.maximum.f32(float %a, float %b)91 ret float %val92}93 94define amdgpu_ps float @test_fmaximum_signed_zero_f32() {95; GFX9-LABEL: test_fmaximum_signed_zero_f32:96; GFX9: ; %bb.0:97; GFX9-NEXT: v_mov_b32_e32 v0, 098; GFX9-NEXT: ; return to shader part epilog99;100; GFX12-LABEL: test_fmaximum_signed_zero_f32:101; GFX12: ; %bb.0:102; GFX12-NEXT: v_mov_b32_e32 v0, 0103; GFX12-NEXT: ; return to shader part epilog104 %val = call float @llvm.maximum.f32(float -0.0, float 0.0)105 ret float %val106}107 108define amdgpu_ps <2 x float> @test_fmaximum_v2f32(<2 x float> %a, <2 x float> %b) {109; GFX9-LABEL: test_fmaximum_v2f32:110; GFX9: ; %bb.0:111; GFX9-NEXT: v_max_f32_e32 v4, v0, v2112; GFX9-NEXT: v_mov_b32_e32 v5, 0x7fc00000113; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v2114; GFX9-NEXT: v_cndmask_b32_e32 v0, v5, v4, vcc115; GFX9-NEXT: v_max_f32_e32 v2, v1, v3116; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v1, v3117; GFX9-NEXT: v_cndmask_b32_e32 v1, v5, v2, vcc118; GFX9-NEXT: ; return to shader part epilog119;120; GFX12-LABEL: test_fmaximum_v2f32:121; GFX12: ; %bb.0:122; GFX12-NEXT: v_maximum_f32 v0, v0, v2123; GFX12-NEXT: v_maximum_f32 v1, v1, v3124; GFX12-NEXT: ; return to shader part epilog125 %val = call <2 x float> @llvm.maximum.v2f32(<2 x float> %a, <2 x float> %b)126 ret <2 x float> %val127}128 129define amdgpu_ps <2 x float> @test_fmaximum_v2f32_ss(<2 x float> inreg %a, <2 x float> inreg %b) {130; GFX9-LABEL: test_fmaximum_v2f32_ss:131; GFX9: ; %bb.0:132; GFX9-NEXT: v_mov_b32_e32 v0, s2133; GFX9-NEXT: v_max_f32_e32 v1, s0, v0134; GFX9-NEXT: v_mov_b32_e32 v2, 0x7fc00000135; GFX9-NEXT: v_cmp_o_f32_e32 vcc, s0, v0136; GFX9-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc137; GFX9-NEXT: v_mov_b32_e32 v1, s3138; GFX9-NEXT: v_max_f32_e32 v3, s1, v1139; GFX9-NEXT: v_cmp_o_f32_e32 vcc, s1, v1140; GFX9-NEXT: v_cndmask_b32_e32 v1, v2, v3, vcc141; GFX9-NEXT: ; return to shader part epilog142;143; GFX12-LABEL: test_fmaximum_v2f32_ss:144; GFX12: ; %bb.0:145; GFX12-NEXT: s_maximum_f32 s0, s0, s2146; GFX12-NEXT: s_maximum_f32 s1, s1, s3147; GFX12-NEXT: s_delay_alu instid0(SALU_CYCLE_3)148; GFX12-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1149; GFX12-NEXT: ; return to shader part epilog150 %val = call <2 x float> @llvm.maximum.v2f32(<2 x float> %a, <2 x float> %b)151 ret <2 x float> %val152}153 154define amdgpu_ps <3 x float> @test_fmaximum_v3f32(<3 x float> %a, <3 x float> %b) {155; GFX9-LABEL: test_fmaximum_v3f32:156; GFX9: ; %bb.0:157; GFX9-NEXT: v_max_f32_e32 v6, v0, v3158; GFX9-NEXT: v_mov_b32_e32 v7, 0x7fc00000159; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v3160; GFX9-NEXT: v_cndmask_b32_e32 v0, v7, v6, vcc161; GFX9-NEXT: v_max_f32_e32 v3, v1, v4162; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v1, v4163; GFX9-NEXT: v_cndmask_b32_e32 v1, v7, v3, vcc164; GFX9-NEXT: v_max_f32_e32 v3, v2, v5165; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v2, v5166; GFX9-NEXT: v_cndmask_b32_e32 v2, v7, v3, vcc167; GFX9-NEXT: ; return to shader part epilog168;169; GFX12-LABEL: test_fmaximum_v3f32:170; GFX12: ; %bb.0:171; GFX12-NEXT: v_maximum_f32 v0, v0, v3172; GFX12-NEXT: v_maximum_f32 v1, v1, v4173; GFX12-NEXT: v_maximum_f32 v2, v2, v5174; GFX12-NEXT: ; return to shader part epilog175 %val = call <3 x float> @llvm.maximum.v3f32(<3 x float> %a, <3 x float> %b)176 ret <3 x float> %val177}178 179define amdgpu_ps <4 x float> @test_fmaximum_v4f32(<4 x float> %a, <4 x float> %b) {180; GFX9-LABEL: test_fmaximum_v4f32:181; GFX9: ; %bb.0:182; GFX9-NEXT: v_max_f32_e32 v8, v0, v4183; GFX9-NEXT: v_mov_b32_e32 v9, 0x7fc00000184; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v4185; GFX9-NEXT: v_cndmask_b32_e32 v0, v9, v8, vcc186; GFX9-NEXT: v_max_f32_e32 v4, v1, v5187; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v1, v5188; GFX9-NEXT: v_cndmask_b32_e32 v1, v9, v4, vcc189; GFX9-NEXT: v_max_f32_e32 v4, v2, v6190; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v2, v6191; GFX9-NEXT: v_cndmask_b32_e32 v2, v9, v4, vcc192; GFX9-NEXT: v_max_f32_e32 v4, v3, v7193; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v3, v7194; GFX9-NEXT: v_cndmask_b32_e32 v3, v9, v4, vcc195; GFX9-NEXT: ; return to shader part epilog196;197; GFX12-LABEL: test_fmaximum_v4f32:198; GFX12: ; %bb.0:199; GFX12-NEXT: v_maximum_f32 v0, v0, v4200; GFX12-NEXT: v_maximum_f32 v1, v1, v5201; GFX12-NEXT: v_maximum_f32 v2, v2, v6202; GFX12-NEXT: v_maximum_f32 v3, v3, v7203; GFX12-NEXT: ; return to shader part epilog204 %val = call <4 x float> @llvm.maximum.v4f32(<4 x float> %a, <4 x float> %b)205 ret <4 x float> %val206}207 208define amdgpu_ps <16 x float> @test_fmaximum_v16f32(<16 x float> %a, <16 x float> %b) {209; GFX9-LABEL: test_fmaximum_v16f32:210; GFX9: ; %bb.0:211; GFX9-NEXT: v_max_f32_e32 v32, v1, v17212; GFX9-NEXT: v_mov_b32_e32 v33, 0x7fc00000213; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v1, v17214; GFX9-NEXT: v_max_f32_e32 v1, v0, v16215; GFX9-NEXT: v_cmp_o_f32_e64 s[12:13], v0, v16216; GFX9-NEXT: v_max_f32_e32 v17, v2, v18217; GFX9-NEXT: v_cmp_o_f32_e64 s[0:1], v2, v18218; GFX9-NEXT: v_max_f32_e32 v18, v3, v19219; GFX9-NEXT: v_cmp_o_f32_e64 s[2:3], v3, v19220; GFX9-NEXT: v_max_f32_e32 v19, v4, v20221; GFX9-NEXT: v_cmp_o_f32_e64 s[4:5], v4, v20222; GFX9-NEXT: v_max_f32_e32 v20, v5, v21223; GFX9-NEXT: v_cmp_o_f32_e64 s[6:7], v5, v21224; GFX9-NEXT: v_max_f32_e32 v21, v6, v22225; GFX9-NEXT: v_cmp_o_f32_e64 s[8:9], v6, v22226; GFX9-NEXT: v_max_f32_e32 v22, v7, v23227; GFX9-NEXT: v_cmp_o_f32_e64 s[10:11], v7, v23228; GFX9-NEXT: v_max_f32_e32 v23, v8, v24229; GFX9-NEXT: v_cndmask_b32_e64 v0, v33, v1, s[12:13]230; GFX9-NEXT: v_cndmask_b32_e32 v1, v33, v32, vcc231; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v8, v24232; GFX9-NEXT: v_max_f32_e32 v34, v9, v25233; GFX9-NEXT: v_cndmask_b32_e32 v8, v33, v23, vcc234; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v9, v25235; GFX9-NEXT: v_max_f32_e32 v35, v10, v26236; GFX9-NEXT: v_cndmask_b32_e32 v9, v33, v34, vcc237; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v10, v26238; GFX9-NEXT: v_max_f32_e32 v36, v11, v27239; GFX9-NEXT: v_cndmask_b32_e32 v10, v33, v35, vcc240; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v11, v27241; GFX9-NEXT: v_max_f32_e32 v37, v12, v28242; GFX9-NEXT: v_cndmask_b32_e32 v11, v33, v36, vcc243; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v12, v28244; GFX9-NEXT: v_max_f32_e32 v16, v13, v29245; GFX9-NEXT: v_cndmask_b32_e32 v12, v33, v37, vcc246; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v13, v29247; GFX9-NEXT: v_cndmask_b32_e32 v13, v33, v16, vcc248; GFX9-NEXT: v_max_f32_e32 v16, v14, v30249; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v14, v30250; GFX9-NEXT: v_cndmask_b32_e32 v14, v33, v16, vcc251; GFX9-NEXT: v_max_f32_e32 v16, v15, v31252; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v15, v31253; GFX9-NEXT: v_cndmask_b32_e64 v2, v33, v17, s[0:1]254; GFX9-NEXT: v_cndmask_b32_e64 v3, v33, v18, s[2:3]255; GFX9-NEXT: v_cndmask_b32_e64 v4, v33, v19, s[4:5]256; GFX9-NEXT: v_cndmask_b32_e64 v5, v33, v20, s[6:7]257; GFX9-NEXT: v_cndmask_b32_e64 v6, v33, v21, s[8:9]258; GFX9-NEXT: v_cndmask_b32_e64 v7, v33, v22, s[10:11]259; GFX9-NEXT: v_cndmask_b32_e32 v15, v33, v16, vcc260; GFX9-NEXT: ; return to shader part epilog261;262; GFX12-LABEL: test_fmaximum_v16f32:263; GFX12: ; %bb.0:264; GFX12-NEXT: v_maximum_f32 v0, v0, v16265; GFX12-NEXT: v_maximum_f32 v1, v1, v17266; GFX12-NEXT: v_maximum_f32 v2, v2, v18267; GFX12-NEXT: v_maximum_f32 v3, v3, v19268; GFX12-NEXT: v_maximum_f32 v4, v4, v20269; GFX12-NEXT: v_maximum_f32 v5, v5, v21270; GFX12-NEXT: v_maximum_f32 v6, v6, v22271; GFX12-NEXT: v_maximum_f32 v7, v7, v23272; GFX12-NEXT: v_maximum_f32 v8, v8, v24273; GFX12-NEXT: v_maximum_f32 v9, v9, v25274; GFX12-NEXT: v_maximum_f32 v10, v10, v26275; GFX12-NEXT: v_maximum_f32 v11, v11, v27276; GFX12-NEXT: v_maximum_f32 v12, v12, v28277; GFX12-NEXT: v_maximum_f32 v13, v13, v29278; GFX12-NEXT: v_maximum_f32 v14, v14, v30279; GFX12-NEXT: v_maximum_f32 v15, v15, v31280; GFX12-NEXT: ; return to shader part epilog281 %val = call <16 x float> @llvm.maximum.v16f32(<16 x float> %a, <16 x float> %b)282 ret <16 x float> %val283}284 285define amdgpu_ps half @test_fmaximum_f16_vv(half %a, half %b) {286; GFX9-LABEL: test_fmaximum_f16_vv:287; GFX9: ; %bb.0:288; GFX9-NEXT: v_max_f16_e32 v2, v0, v1289; GFX9-NEXT: v_mov_b32_e32 v3, 0x7e00290; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v0, v1291; GFX9-NEXT: v_cndmask_b32_e32 v0, v3, v2, vcc292; GFX9-NEXT: ; return to shader part epilog293;294; GFX12-SDAG-TRUE16-LABEL: test_fmaximum_f16_vv:295; GFX12-SDAG-TRUE16: ; %bb.0:296; GFX12-SDAG-TRUE16-NEXT: v_maximum_f16 v0.l, v0.l, v1.l297; GFX12-SDAG-TRUE16-NEXT: ; return to shader part epilog298;299; GFX12-SDAG-FAKE16-LABEL: test_fmaximum_f16_vv:300; GFX12-SDAG-FAKE16: ; %bb.0:301; GFX12-SDAG-FAKE16-NEXT: v_maximum_f16 v0, v0, v1302; GFX12-SDAG-FAKE16-NEXT: ; return to shader part epilog303;304; GFX12-GISEL-TRUE16-LABEL: test_fmaximum_f16_vv:305; GFX12-GISEL-TRUE16: ; %bb.0:306; GFX12-GISEL-TRUE16-NEXT: v_maximum_f16 v0.l, v0.l, v1.l307; GFX12-GISEL-TRUE16-NEXT: ; return to shader part epilog308;309; GFX12-GISEL-FAKE16-LABEL: test_fmaximum_f16_vv:310; GFX12-GISEL-FAKE16: ; %bb.0:311; GFX12-GISEL-FAKE16-NEXT: v_maximum_f16 v0, v0, v1312; GFX12-GISEL-FAKE16-NEXT: ; return to shader part epilog313 %val = call half @llvm.maximum.f16(half %a, half %b)314 ret half %val315}316 317define amdgpu_ps half @test_fmaximum_f16_ss(half inreg %a, half inreg %b) {318; GFX9-LABEL: test_fmaximum_f16_ss:319; GFX9: ; %bb.0:320; GFX9-NEXT: v_mov_b32_e32 v0, s1321; GFX9-NEXT: v_max_f16_e32 v1, s0, v0322; GFX9-NEXT: v_mov_b32_e32 v2, 0x7e00323; GFX9-NEXT: v_cmp_o_f16_e32 vcc, s0, v0324; GFX9-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc325; GFX9-NEXT: ; return to shader part epilog326;327; GFX12-LABEL: test_fmaximum_f16_ss:328; GFX12: ; %bb.0:329; GFX12-NEXT: s_maximum_f16 s0, s0, s1330; GFX12-NEXT: s_delay_alu instid0(SALU_CYCLE_3)331; GFX12-NEXT: v_mov_b32_e32 v0, s0332; GFX12-NEXT: ; return to shader part epilog333 %val = call half @llvm.maximum.f16(half %a, half %b)334 ret half %val335}336 337define amdgpu_ps <2 x half> @test_fmaximum_v2f16_vv(<2 x half> %a, <2 x half> %b) {338; GFX9-SDAG-LABEL: test_fmaximum_v2f16_vv:339; GFX9-SDAG: ; %bb.0:340; GFX9-SDAG-NEXT: v_pk_max_f16 v2, v0, v1341; GFX9-SDAG-NEXT: v_mov_b32_e32 v3, 0x7e00342; GFX9-SDAG-NEXT: v_cmp_o_f16_e32 vcc, v0, v1343; GFX9-SDAG-NEXT: v_cndmask_b32_e32 v4, v3, v2, vcc344; GFX9-SDAG-NEXT: v_cmp_o_f16_sdwa vcc, v0, v1 src0_sel:WORD_1 src1_sel:WORD_1345; GFX9-SDAG-NEXT: v_cndmask_b32_sdwa v0, v3, v2, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1346; GFX9-SDAG-NEXT: s_mov_b32 s0, 0x5040100347; GFX9-SDAG-NEXT: v_perm_b32 v0, v0, v4, s0348; GFX9-SDAG-NEXT: ; return to shader part epilog349;350; GFX9-GISEL-LABEL: test_fmaximum_v2f16_vv:351; GFX9-GISEL: ; %bb.0:352; GFX9-GISEL-NEXT: v_pk_max_f16 v2, v0, v1353; GFX9-GISEL-NEXT: v_mov_b32_e32 v3, 0x7e00354; GFX9-GISEL-NEXT: v_cmp_o_f16_e64 s[0:1], v0, v1355; GFX9-GISEL-NEXT: v_cmp_o_f16_sdwa vcc, v0, v1 src0_sel:WORD_1 src1_sel:WORD_1356; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v0, v3, v2, s[0:1]357; GFX9-GISEL-NEXT: v_cndmask_b32_sdwa v1, v3, v2, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1358; GFX9-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0359; GFX9-GISEL-NEXT: v_lshl_or_b32 v0, v1, 16, v0360; GFX9-GISEL-NEXT: ; return to shader part epilog361;362; GFX12-LABEL: test_fmaximum_v2f16_vv:363; GFX12: ; %bb.0:364; GFX12-NEXT: v_pk_maximum_f16 v0, v0, v1365; GFX12-NEXT: ; return to shader part epilog366 %val = call <2 x half> @llvm.maximum.v2f16(<2 x half> %a, <2 x half> %b)367 ret <2 x half> %val368}369 370define amdgpu_ps <2 x half> @test_fmaximum_v2f16_ss(<2 x half> inreg %a, <2 x half> inreg %b) {371; GFX9-SDAG-LABEL: test_fmaximum_v2f16_ss:372; GFX9-SDAG: ; %bb.0:373; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s1374; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, s1375; GFX9-SDAG-NEXT: s_lshr_b32 s1, s1, 16376; GFX9-SDAG-NEXT: v_pk_max_f16 v1, s0, v1377; GFX9-SDAG-NEXT: v_mov_b32_e32 v2, 0x7e00378; GFX9-SDAG-NEXT: v_cmp_o_f16_e32 vcc, s0, v0379; GFX9-SDAG-NEXT: s_lshr_b32 s0, s0, 16380; GFX9-SDAG-NEXT: v_mov_b32_e32 v3, s1381; GFX9-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc382; GFX9-SDAG-NEXT: v_cmp_o_f16_e32 vcc, s0, v3383; GFX9-SDAG-NEXT: v_cndmask_b32_sdwa v1, v2, v1, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1384; GFX9-SDAG-NEXT: v_and_b32_e32 v0, 0xffff, v0385; GFX9-SDAG-NEXT: v_lshl_or_b32 v0, v1, 16, v0386; GFX9-SDAG-NEXT: ; return to shader part epilog387;388; GFX9-GISEL-LABEL: test_fmaximum_v2f16_ss:389; GFX9-GISEL: ; %bb.0:390; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, s1391; GFX9-GISEL-NEXT: s_lshr_b32 s1, s1, 16392; GFX9-GISEL-NEXT: s_lshr_b32 s2, s0, 16393; GFX9-GISEL-NEXT: v_mov_b32_e32 v2, s1394; GFX9-GISEL-NEXT: v_pk_max_f16 v1, s0, v0395; GFX9-GISEL-NEXT: v_cmp_o_f16_e32 vcc, s2, v2396; GFX9-GISEL-NEXT: v_mov_b32_e32 v2, 0x7e00397; GFX9-GISEL-NEXT: v_cmp_o_f16_e64 s[0:1], s0, v0398; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v0, v2, v1, s[0:1]399; GFX9-GISEL-NEXT: v_cndmask_b32_sdwa v1, v2, v1, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1400; GFX9-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0401; GFX9-GISEL-NEXT: v_lshl_or_b32 v0, v1, 16, v0402; GFX9-GISEL-NEXT: ; return to shader part epilog403;404; GFX12-LABEL: test_fmaximum_v2f16_ss:405; GFX12: ; %bb.0:406; GFX12-NEXT: v_pk_maximum_f16 v0, s0, s1407; GFX12-NEXT: ; return to shader part epilog408 %val = call <2 x half> @llvm.maximum.v2f16(<2 x half> %a, <2 x half> %b)409 ret <2 x half> %val410}411 412define amdgpu_ps <3 x half> @test_fmaximum_v3f16_vv(<3 x half> %a, <3 x half> %b) {413; GFX9-SDAG-LABEL: test_fmaximum_v3f16_vv:414; GFX9-SDAG: ; %bb.0:415; GFX9-SDAG-NEXT: v_pk_max_f16 v4, v1, v3416; GFX9-SDAG-NEXT: v_mov_b32_e32 v5, 0x7e00417; GFX9-SDAG-NEXT: v_cmp_o_f16_e32 vcc, v1, v3418; GFX9-SDAG-NEXT: v_cndmask_b32_e32 v1, v5, v4, vcc419; GFX9-SDAG-NEXT: v_pk_max_f16 v3, v0, v2420; GFX9-SDAG-NEXT: v_cmp_o_f16_e32 vcc, v0, v2421; GFX9-SDAG-NEXT: v_cndmask_b32_e32 v4, v5, v3, vcc422; GFX9-SDAG-NEXT: v_cmp_o_f16_sdwa vcc, v0, v2 src0_sel:WORD_1 src1_sel:WORD_1423; GFX9-SDAG-NEXT: v_cndmask_b32_sdwa v0, v5, v3, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1424; GFX9-SDAG-NEXT: s_mov_b32 s0, 0x5040100425; GFX9-SDAG-NEXT: v_perm_b32 v0, v0, v4, s0426; GFX9-SDAG-NEXT: ; return to shader part epilog427;428; GFX9-GISEL-LABEL: test_fmaximum_v3f16_vv:429; GFX9-GISEL: ; %bb.0:430; GFX9-GISEL-NEXT: v_pk_max_f16 v4, v0, v2431; GFX9-GISEL-NEXT: v_mov_b32_e32 v5, 0x7e00432; GFX9-GISEL-NEXT: v_cmp_o_f16_e64 s[0:1], v0, v2433; GFX9-GISEL-NEXT: v_cmp_o_f16_sdwa vcc, v0, v2 src0_sel:WORD_1 src1_sel:WORD_1434; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v0, v5, v4, s[0:1]435; GFX9-GISEL-NEXT: v_cndmask_b32_sdwa v2, v5, v4, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1436; GFX9-GISEL-NEXT: v_pk_max_f16 v4, v1, v3437; GFX9-GISEL-NEXT: v_cmp_o_f16_e32 vcc, v1, v3438; GFX9-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0439; GFX9-GISEL-NEXT: v_cndmask_b32_e32 v1, v5, v4, vcc440; GFX9-GISEL-NEXT: v_lshl_or_b32 v0, v2, 16, v0441; GFX9-GISEL-NEXT: ; return to shader part epilog442;443; GFX12-SDAG-LABEL: test_fmaximum_v3f16_vv:444; GFX12-SDAG: ; %bb.0:445; GFX12-SDAG-NEXT: v_pk_maximum_f16 v0, v0, v2446; GFX12-SDAG-NEXT: v_pk_maximum_f16 v1, v1, v3447; GFX12-SDAG-NEXT: ; return to shader part epilog448;449; GFX12-GISEL-TRUE16-LABEL: test_fmaximum_v3f16_vv:450; GFX12-GISEL-TRUE16: ; %bb.0:451; GFX12-GISEL-TRUE16-NEXT: v_pk_maximum_f16 v0, v0, v2452; GFX12-GISEL-TRUE16-NEXT: v_maximum_f16 v1.l, v1.l, v3.l453; GFX12-GISEL-TRUE16-NEXT: ; return to shader part epilog454;455; GFX12-GISEL-FAKE16-LABEL: test_fmaximum_v3f16_vv:456; GFX12-GISEL-FAKE16: ; %bb.0:457; GFX12-GISEL-FAKE16-NEXT: v_pk_maximum_f16 v0, v0, v2458; GFX12-GISEL-FAKE16-NEXT: v_maximum_f16 v1, v1, v3459; GFX12-GISEL-FAKE16-NEXT: ; return to shader part epilog460 %val = call <3 x half> @llvm.maximum.v3f16(<3 x half> %a, <3 x half> %b)461 ret <3 x half> %val462}463 464define amdgpu_ps <3 x half> @test_fmaximum_v3f16_ss(<3 x half> inreg %a, <3 x half> inreg %b) {465; GFX9-SDAG-LABEL: test_fmaximum_v3f16_ss:466; GFX9-SDAG: ; %bb.0:467; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s3468; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, s3469; GFX9-SDAG-NEXT: v_pk_max_f16 v1, s1, v1470; GFX9-SDAG-NEXT: v_mov_b32_e32 v2, 0x7e00471; GFX9-SDAG-NEXT: v_cmp_o_f16_e32 vcc, s1, v0472; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s2473; GFX9-SDAG-NEXT: v_mov_b32_e32 v3, s2474; GFX9-SDAG-NEXT: s_lshr_b32 s1, s2, 16475; GFX9-SDAG-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc476; GFX9-SDAG-NEXT: v_pk_max_f16 v3, s0, v3477; GFX9-SDAG-NEXT: v_cmp_o_f16_e32 vcc, s0, v0478; GFX9-SDAG-NEXT: s_lshr_b32 s0, s0, 16479; GFX9-SDAG-NEXT: v_mov_b32_e32 v4, s1480; GFX9-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v3, vcc481; GFX9-SDAG-NEXT: v_cmp_o_f16_e32 vcc, s0, v4482; GFX9-SDAG-NEXT: v_cndmask_b32_sdwa v2, v2, v3, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1483; GFX9-SDAG-NEXT: v_and_b32_e32 v0, 0xffff, v0484; GFX9-SDAG-NEXT: v_lshl_or_b32 v0, v2, 16, v0485; GFX9-SDAG-NEXT: ; return to shader part epilog486;487; GFX9-GISEL-LABEL: test_fmaximum_v3f16_ss:488; GFX9-GISEL: ; %bb.0:489; GFX9-GISEL-NEXT: s_lshr_b32 s5, s2, 16490; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, s2491; GFX9-GISEL-NEXT: s_lshr_b32 s4, s0, 16492; GFX9-GISEL-NEXT: v_pk_max_f16 v1, s0, v0493; GFX9-GISEL-NEXT: v_mov_b32_e32 v2, s5494; GFX9-GISEL-NEXT: v_mov_b32_e32 v4, 0x7e00495; GFX9-GISEL-NEXT: v_cmp_o_f16_e32 vcc, s0, v0496; GFX9-GISEL-NEXT: v_lshrrev_b32_e32 v3, 16, v1497; GFX9-GISEL-NEXT: v_cndmask_b32_e32 v0, v4, v1, vcc498; GFX9-GISEL-NEXT: v_cmp_o_f16_e32 vcc, s4, v2499; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s3500; GFX9-GISEL-NEXT: v_cndmask_b32_e32 v2, v4, v3, vcc501; GFX9-GISEL-NEXT: v_pk_max_f16 v3, s1, v1502; GFX9-GISEL-NEXT: v_cmp_o_f16_e32 vcc, s1, v1503; GFX9-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0504; GFX9-GISEL-NEXT: v_cndmask_b32_e32 v1, v4, v3, vcc505; GFX9-GISEL-NEXT: v_lshl_or_b32 v0, v2, 16, v0506; GFX9-GISEL-NEXT: ; return to shader part epilog507;508; GFX12-SDAG-LABEL: test_fmaximum_v3f16_ss:509; GFX12-SDAG: ; %bb.0:510; GFX12-SDAG-NEXT: v_pk_maximum_f16 v0, s0, s2511; GFX12-SDAG-NEXT: v_pk_maximum_f16 v1, s1, s3512; GFX12-SDAG-NEXT: ; return to shader part epilog513;514; GFX12-GISEL-LABEL: test_fmaximum_v3f16_ss:515; GFX12-GISEL: ; %bb.0:516; GFX12-GISEL-NEXT: v_pk_maximum_f16 v0, s0, s2517; GFX12-GISEL-NEXT: s_maximum_f16 s0, s1, s3518; GFX12-GISEL-NEXT: s_wait_alu depctr_sa_sdst(0)519; GFX12-GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_2)520; GFX12-GISEL-NEXT: v_mov_b32_e32 v1, s0521; GFX12-GISEL-NEXT: ; return to shader part epilog522 %val = call <3 x half> @llvm.maximum.v3f16(<3 x half> %a, <3 x half> %b)523 ret <3 x half> %val524}525 526define amdgpu_ps <4 x half> @test_fmaximum_v4f16(<4 x half> %a, <4 x half> %b) {527; GFX9-SDAG-LABEL: test_fmaximum_v4f16:528; GFX9-SDAG: ; %bb.0:529; GFX9-SDAG-NEXT: v_pk_max_f16 v4, v1, v3530; GFX9-SDAG-NEXT: v_mov_b32_e32 v5, 0x7e00531; GFX9-SDAG-NEXT: v_cmp_o_f16_e32 vcc, v1, v3532; GFX9-SDAG-NEXT: v_cndmask_b32_e32 v6, v5, v4, vcc533; GFX9-SDAG-NEXT: v_cmp_o_f16_sdwa vcc, v1, v3 src0_sel:WORD_1 src1_sel:WORD_1534; GFX9-SDAG-NEXT: v_cndmask_b32_sdwa v1, v5, v4, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1535; GFX9-SDAG-NEXT: v_pk_max_f16 v3, v0, v2536; GFX9-SDAG-NEXT: v_cmp_o_f16_e32 vcc, v0, v2537; GFX9-SDAG-NEXT: v_cndmask_b32_e32 v4, v5, v3, vcc538; GFX9-SDAG-NEXT: v_cmp_o_f16_sdwa vcc, v0, v2 src0_sel:WORD_1 src1_sel:WORD_1539; GFX9-SDAG-NEXT: v_cndmask_b32_sdwa v0, v5, v3, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1540; GFX9-SDAG-NEXT: s_mov_b32 s0, 0x5040100541; GFX9-SDAG-NEXT: v_perm_b32 v0, v0, v4, s0542; GFX9-SDAG-NEXT: v_perm_b32 v1, v1, v6, s0543; GFX9-SDAG-NEXT: ; return to shader part epilog544;545; GFX9-GISEL-LABEL: test_fmaximum_v4f16:546; GFX9-GISEL: ; %bb.0:547; GFX9-GISEL-NEXT: v_pk_max_f16 v4, v0, v2548; GFX9-GISEL-NEXT: v_mov_b32_e32 v6, 0x7e00549; GFX9-GISEL-NEXT: v_cmp_o_f16_e32 vcc, v0, v2550; GFX9-GISEL-NEXT: v_lshrrev_b32_e32 v5, 16, v4551; GFX9-GISEL-NEXT: v_cndmask_b32_e32 v4, v6, v4, vcc552; GFX9-GISEL-NEXT: v_cmp_o_f16_sdwa vcc, v0, v2 src0_sel:WORD_1 src1_sel:WORD_1553; GFX9-GISEL-NEXT: v_cndmask_b32_e32 v0, v6, v5, vcc554; GFX9-GISEL-NEXT: v_and_b32_e32 v2, 0xffff, v4555; GFX9-GISEL-NEXT: v_lshl_or_b32 v0, v0, 16, v2556; GFX9-GISEL-NEXT: v_pk_max_f16 v2, v1, v3557; GFX9-GISEL-NEXT: v_cmp_o_f16_e64 s[0:1], v1, v3558; GFX9-GISEL-NEXT: v_cmp_o_f16_sdwa vcc, v1, v3 src0_sel:WORD_1 src1_sel:WORD_1559; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v1, v6, v2, s[0:1]560; GFX9-GISEL-NEXT: v_cndmask_b32_sdwa v2, v6, v2, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1561; GFX9-GISEL-NEXT: v_and_b32_e32 v1, 0xffff, v1562; GFX9-GISEL-NEXT: v_lshl_or_b32 v1, v2, 16, v1563; GFX9-GISEL-NEXT: ; return to shader part epilog564;565; GFX12-LABEL: test_fmaximum_v4f16:566; GFX12: ; %bb.0:567; GFX12-NEXT: v_pk_maximum_f16 v0, v0, v2568; GFX12-NEXT: v_pk_maximum_f16 v1, v1, v3569; GFX12-NEXT: ; return to shader part epilog570 %val = call <4 x half> @llvm.maximum.v4f16(<4 x half> %a, <4 x half> %b)571 ret <4 x half> %val572}573 574define amdgpu_ps <4 x half> @test_fmaximum_v4f16_ss(<4 x half> inreg %a, <4 x half> inreg %b) {575; GFX9-SDAG-LABEL: test_fmaximum_v4f16_ss:576; GFX9-SDAG: ; %bb.0:577; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s3578; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, s3579; GFX9-SDAG-NEXT: s_lshr_b32 s3, s3, 16580; GFX9-SDAG-NEXT: v_pk_max_f16 v1, s1, v1581; GFX9-SDAG-NEXT: v_mov_b32_e32 v2, 0x7e00582; GFX9-SDAG-NEXT: v_cmp_o_f16_e32 vcc, s1, v0583; GFX9-SDAG-NEXT: s_lshr_b32 s1, s1, 16584; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s3585; GFX9-SDAG-NEXT: v_cndmask_b32_e32 v3, v2, v1, vcc586; GFX9-SDAG-NEXT: v_lshrrev_b32_e32 v1, 16, v1587; GFX9-SDAG-NEXT: v_cmp_o_f16_e32 vcc, s1, v0588; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s2589; GFX9-SDAG-NEXT: v_mov_b32_e32 v4, s2590; GFX9-SDAG-NEXT: s_lshr_b32 s1, s2, 16591; GFX9-SDAG-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc592; GFX9-SDAG-NEXT: v_pk_max_f16 v4, s0, v4593; GFX9-SDAG-NEXT: v_cmp_o_f16_e32 vcc, s0, v0594; GFX9-SDAG-NEXT: s_lshr_b32 s0, s0, 16595; GFX9-SDAG-NEXT: v_mov_b32_e32 v5, s1596; GFX9-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v4, vcc597; GFX9-SDAG-NEXT: v_cmp_o_f16_e32 vcc, s0, v5598; GFX9-SDAG-NEXT: v_cndmask_b32_sdwa v2, v2, v4, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1599; GFX9-SDAG-NEXT: v_and_b32_e32 v0, 0xffff, v0600; GFX9-SDAG-NEXT: v_lshl_or_b32 v0, v2, 16, v0601; GFX9-SDAG-NEXT: v_and_b32_e32 v2, 0xffff, v3602; GFX9-SDAG-NEXT: v_lshl_or_b32 v1, v1, 16, v2603; GFX9-SDAG-NEXT: ; return to shader part epilog604;605; GFX9-GISEL-LABEL: test_fmaximum_v4f16_ss:606; GFX9-GISEL: ; %bb.0:607; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, s2608; GFX9-GISEL-NEXT: s_lshr_b32 s2, s2, 16609; GFX9-GISEL-NEXT: v_pk_max_f16 v1, s0, v0610; GFX9-GISEL-NEXT: s_lshr_b32 s4, s0, 16611; GFX9-GISEL-NEXT: v_mov_b32_e32 v2, s2612; GFX9-GISEL-NEXT: v_mov_b32_e32 v4, 0x7e00613; GFX9-GISEL-NEXT: v_cmp_o_f16_e32 vcc, s0, v0614; GFX9-GISEL-NEXT: v_lshrrev_b32_e32 v3, 16, v1615; GFX9-GISEL-NEXT: v_cndmask_b32_e32 v0, v4, v1, vcc616; GFX9-GISEL-NEXT: v_cmp_o_f16_e32 vcc, s4, v2617; GFX9-GISEL-NEXT: v_cndmask_b32_e32 v1, v4, v3, vcc618; GFX9-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0619; GFX9-GISEL-NEXT: s_lshr_b32 s2, s3, 16620; GFX9-GISEL-NEXT: v_lshl_or_b32 v0, v1, 16, v0621; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s3622; GFX9-GISEL-NEXT: s_lshr_b32 s0, s1, 16623; GFX9-GISEL-NEXT: v_mov_b32_e32 v3, s2624; GFX9-GISEL-NEXT: v_pk_max_f16 v2, s1, v1625; GFX9-GISEL-NEXT: v_cmp_o_f16_e32 vcc, s0, v3626; GFX9-GISEL-NEXT: v_cmp_o_f16_e64 s[0:1], s1, v1627; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v1, v4, v2, s[0:1]628; GFX9-GISEL-NEXT: v_cndmask_b32_sdwa v2, v4, v2, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1629; GFX9-GISEL-NEXT: v_and_b32_e32 v1, 0xffff, v1630; GFX9-GISEL-NEXT: v_lshl_or_b32 v1, v2, 16, v1631; GFX9-GISEL-NEXT: ; return to shader part epilog632;633; GFX12-LABEL: test_fmaximum_v4f16_ss:634; GFX12: ; %bb.0:635; GFX12-NEXT: v_pk_maximum_f16 v0, s0, s2636; GFX12-NEXT: v_pk_maximum_f16 v1, s1, s3637; GFX12-NEXT: ; return to shader part epilog638 %val = call <4 x half> @llvm.maximum.v4f16(<4 x half> %a, <4 x half> %b)639 ret <4 x half> %val640}641 642define amdgpu_ps <2 x float> @test_fmaximum_f64_vv(double %a, double %b) {643; GFX9-SDAG-LABEL: test_fmaximum_f64_vv:644; GFX9-SDAG: ; %bb.0:645; GFX9-SDAG-NEXT: v_max_f64 v[4:5], v[0:1], v[2:3]646; GFX9-SDAG-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[2:3]647; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, 0x7ff80000648; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v0, v4, 0, vcc649; GFX9-SDAG-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc650; GFX9-SDAG-NEXT: ; return to shader part epilog651;652; GFX9-GISEL-LABEL: test_fmaximum_f64_vv:653; GFX9-GISEL: ; %bb.0:654; GFX9-GISEL-NEXT: v_max_f64 v[4:5], v[0:1], v[2:3]655; GFX9-GISEL-NEXT: v_cmp_o_f64_e32 vcc, v[0:1], v[2:3]656; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, 0x7ff80000657; GFX9-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v4, vcc658; GFX9-GISEL-NEXT: v_cndmask_b32_e32 v1, v1, v5, vcc659; GFX9-GISEL-NEXT: ; return to shader part epilog660;661; GFX12-LABEL: test_fmaximum_f64_vv:662; GFX12: ; %bb.0:663; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[2:3]664; GFX12-NEXT: ; return to shader part epilog665 %val = call double @llvm.maximum.f64(double %a, double %b)666 %ret = bitcast double %val to <2 x float>667 ret <2 x float> %ret668}669 670define amdgpu_ps <2 x float> @test_fmaximum_f64_ss(double inreg %a, double inreg %b) {671; GFX9-SDAG-LABEL: test_fmaximum_f64_ss:672; GFX9-SDAG: ; %bb.0:673; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s2674; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, s3675; GFX9-SDAG-NEXT: v_max_f64 v[2:3], s[0:1], v[0:1]676; GFX9-SDAG-NEXT: v_cmp_u_f64_e32 vcc, s[0:1], v[0:1]677; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, 0x7ff80000678; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc679; GFX9-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc680; GFX9-SDAG-NEXT: ; return to shader part epilog681;682; GFX9-GISEL-LABEL: test_fmaximum_f64_ss:683; GFX9-GISEL: ; %bb.0:684; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, s2685; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s3686; GFX9-GISEL-NEXT: v_max_f64 v[2:3], s[0:1], v[0:1]687; GFX9-GISEL-NEXT: v_cmp_o_f64_e32 vcc, s[0:1], v[0:1]688; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, 0x7ff80000689; GFX9-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v2, vcc690; GFX9-GISEL-NEXT: v_cndmask_b32_e32 v1, v1, v3, vcc691; GFX9-GISEL-NEXT: ; return to shader part epilog692;693; GFX12-LABEL: test_fmaximum_f64_ss:694; GFX12: ; %bb.0:695; GFX12-NEXT: v_maximum_f64 v[0:1], s[0:1], s[2:3]696; GFX12-NEXT: ; return to shader part epilog697 %val = call double @llvm.maximum.f64(double %a, double %b)698 %ret = bitcast double %val to <2 x float>699 ret <2 x float> %ret700}701 702define amdgpu_ps <4 x float> @test_fmaximum_v2f64_ss(<2 x double> inreg %a, <2 x double> inreg %b) {703; GFX9-SDAG-LABEL: test_fmaximum_v2f64_ss:704; GFX9-SDAG: ; %bb.0:705; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s4706; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, s5707; GFX9-SDAG-NEXT: v_max_f64 v[2:3], s[0:1], v[0:1]708; GFX9-SDAG-NEXT: v_cmp_u_f64_e32 vcc, s[0:1], v[0:1]709; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s6710; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, s7711; GFX9-SDAG-NEXT: v_max_f64 v[4:5], s[2:3], v[0:1]712; GFX9-SDAG-NEXT: v_cmp_u_f64_e64 s[0:1], s[2:3], v[0:1]713; GFX9-SDAG-NEXT: v_mov_b32_e32 v6, 0x7ff80000714; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc715; GFX9-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v6, vcc716; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v2, v4, 0, s[0:1]717; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v3, v5, v6, s[0:1]718; GFX9-SDAG-NEXT: ; return to shader part epilog719;720; GFX9-GISEL-LABEL: test_fmaximum_v2f64_ss:721; GFX9-GISEL: ; %bb.0:722; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, s4723; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s5724; GFX9-GISEL-NEXT: v_max_f64 v[2:3], s[0:1], v[0:1]725; GFX9-GISEL-NEXT: v_cmp_o_f64_e32 vcc, s[0:1], v[0:1]726; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, s6727; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s7728; GFX9-GISEL-NEXT: v_max_f64 v[4:5], s[2:3], v[0:1]729; GFX9-GISEL-NEXT: v_cmp_o_f64_e64 s[0:1], s[2:3], v[0:1]730; GFX9-GISEL-NEXT: v_mov_b32_e32 v6, 0x7ff80000731; GFX9-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v2, vcc732; GFX9-GISEL-NEXT: v_cndmask_b32_e32 v1, v6, v3, vcc733; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, v4, s[0:1]734; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v3, v6, v5, s[0:1]735; GFX9-GISEL-NEXT: ; return to shader part epilog736;737; GFX12-LABEL: test_fmaximum_v2f64_ss:738; GFX12: ; %bb.0:739; GFX12-NEXT: v_maximum_f64 v[0:1], s[0:1], s[4:5]740; GFX12-NEXT: v_maximum_f64 v[2:3], s[2:3], s[6:7]741; GFX12-NEXT: ; return to shader part epilog742 %val = call <2 x double> @llvm.maximum.v2f64(<2 x double> %a, <2 x double> %b)743 %ret = bitcast <2 x double> %val to <4 x float>744 ret <4 x float> %ret745}746 747define amdgpu_ps <8 x float> @test_fmaximum_v4f64(<4 x double> %a, <4 x double> %b) {748; GFX9-SDAG-LABEL: test_fmaximum_v4f64:749; GFX9-SDAG: ; %bb.0:750; GFX9-SDAG-NEXT: v_max_f64 v[16:17], v[0:1], v[8:9]751; GFX9-SDAG-NEXT: v_cmp_u_f64_e32 vcc, v[0:1], v[8:9]752; GFX9-SDAG-NEXT: v_max_f64 v[8:9], v[2:3], v[10:11]753; GFX9-SDAG-NEXT: v_cmp_u_f64_e64 s[0:1], v[2:3], v[10:11]754; GFX9-SDAG-NEXT: v_max_f64 v[10:11], v[4:5], v[12:13]755; GFX9-SDAG-NEXT: v_cmp_u_f64_e64 s[2:3], v[4:5], v[12:13]756; GFX9-SDAG-NEXT: v_max_f64 v[12:13], v[6:7], v[14:15]757; GFX9-SDAG-NEXT: v_cmp_u_f64_e64 s[4:5], v[6:7], v[14:15]758; GFX9-SDAG-NEXT: v_mov_b32_e32 v7, 0x7ff80000759; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v0, v16, 0, vcc760; GFX9-SDAG-NEXT: v_cndmask_b32_e32 v1, v17, v7, vcc761; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v2, v8, 0, s[0:1]762; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v3, v9, v7, s[0:1]763; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v4, v10, 0, s[2:3]764; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v5, v11, v7, s[2:3]765; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v6, v12, 0, s[4:5]766; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v7, v13, v7, s[4:5]767; GFX9-SDAG-NEXT: ; return to shader part epilog768;769; GFX9-GISEL-LABEL: test_fmaximum_v4f64:770; GFX9-GISEL: ; %bb.0:771; GFX9-GISEL-NEXT: v_max_f64 v[16:17], v[0:1], v[8:9]772; GFX9-GISEL-NEXT: v_cmp_o_f64_e32 vcc, v[0:1], v[8:9]773; GFX9-GISEL-NEXT: v_max_f64 v[8:9], v[2:3], v[10:11]774; GFX9-GISEL-NEXT: v_cmp_o_f64_e64 s[0:1], v[2:3], v[10:11]775; GFX9-GISEL-NEXT: v_max_f64 v[10:11], v[4:5], v[12:13]776; GFX9-GISEL-NEXT: v_cmp_o_f64_e64 s[2:3], v[4:5], v[12:13]777; GFX9-GISEL-NEXT: v_max_f64 v[12:13], v[6:7], v[14:15]778; GFX9-GISEL-NEXT: v_cmp_o_f64_e64 s[4:5], v[6:7], v[14:15]779; GFX9-GISEL-NEXT: v_mov_b32_e32 v18, 0x7ff80000780; GFX9-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v16, vcc781; GFX9-GISEL-NEXT: v_cndmask_b32_e32 v1, v18, v17, vcc782; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, v8, s[0:1]783; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v3, v18, v9, s[0:1]784; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, v10, s[2:3]785; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v5, v18, v11, s[2:3]786; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, v12, s[4:5]787; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v7, v18, v13, s[4:5]788; GFX9-GISEL-NEXT: ; return to shader part epilog789;790; GFX12-LABEL: test_fmaximum_v4f64:791; GFX12: ; %bb.0:792; GFX12-NEXT: v_maximum_f64 v[0:1], v[0:1], v[8:9]793; GFX12-NEXT: v_maximum_f64 v[2:3], v[2:3], v[10:11]794; GFX12-NEXT: v_maximum_f64 v[4:5], v[4:5], v[12:13]795; GFX12-NEXT: v_maximum_f64 v[6:7], v[6:7], v[14:15]796; GFX12-NEXT: ; return to shader part epilog797 %val = call <4 x double> @llvm.maximum.v4f64(<4 x double> %a, <4 x double> %b)798 %ret = bitcast <4 x double> %val to <8 x float>799 ret <8 x float> %ret800}801 802define amdgpu_ps <8 x float> @test_fmaximum_v4f64_ss(<4 x double> inreg %a, <4 x double> inreg %b) {803; GFX9-SDAG-LABEL: test_fmaximum_v4f64_ss:804; GFX9-SDAG: ; %bb.0:805; GFX9-SDAG-NEXT: v_mov_b32_e32 v0, s8806; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, s9807; GFX9-SDAG-NEXT: v_max_f64 v[2:3], s[0:1], v[0:1]808; GFX9-SDAG-NEXT: v_cmp_u_f64_e32 vcc, s[0:1], v[0:1]809; GFX9-SDAG-NEXT: v_mov_b32_e32 v10, 0x7ff80000810; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v0, v2, 0, vcc811; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, s10812; GFX9-SDAG-NEXT: v_mov_b32_e32 v2, s11813; GFX9-SDAG-NEXT: v_max_f64 v[4:5], s[2:3], v[1:2]814; GFX9-SDAG-NEXT: v_cmp_u_f64_e64 s[0:1], s[2:3], v[1:2]815; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, s12816; GFX9-SDAG-NEXT: v_mov_b32_e32 v2, s13817; GFX9-SDAG-NEXT: v_max_f64 v[6:7], s[4:5], v[1:2]818; GFX9-SDAG-NEXT: v_cmp_u_f64_e64 s[2:3], s[4:5], v[1:2]819; GFX9-SDAG-NEXT: v_mov_b32_e32 v1, s14820; GFX9-SDAG-NEXT: v_mov_b32_e32 v2, s15821; GFX9-SDAG-NEXT: v_max_f64 v[8:9], s[6:7], v[1:2]822; GFX9-SDAG-NEXT: v_cmp_u_f64_e64 s[4:5], s[6:7], v[1:2]823; GFX9-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v10, vcc824; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v2, v4, 0, s[0:1]825; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v3, v5, v10, s[0:1]826; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v4, v6, 0, s[2:3]827; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v5, v7, v10, s[2:3]828; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v6, v8, 0, s[4:5]829; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v7, v9, v10, s[4:5]830; GFX9-SDAG-NEXT: ; return to shader part epilog831;832; GFX9-GISEL-LABEL: test_fmaximum_v4f64_ss:833; GFX9-GISEL: ; %bb.0:834; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, s8835; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s9836; GFX9-GISEL-NEXT: v_max_f64 v[2:3], s[0:1], v[0:1]837; GFX9-GISEL-NEXT: v_cmp_o_f64_e32 vcc, s[0:1], v[0:1]838; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, s10839; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s11840; GFX9-GISEL-NEXT: v_max_f64 v[4:5], s[2:3], v[0:1]841; GFX9-GISEL-NEXT: v_cmp_o_f64_e64 s[0:1], s[2:3], v[0:1]842; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, s12843; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s13844; GFX9-GISEL-NEXT: v_max_f64 v[6:7], s[4:5], v[0:1]845; GFX9-GISEL-NEXT: v_cmp_o_f64_e64 s[2:3], s[4:5], v[0:1]846; GFX9-GISEL-NEXT: v_mov_b32_e32 v0, s14847; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, s15848; GFX9-GISEL-NEXT: v_max_f64 v[8:9], s[6:7], v[0:1]849; GFX9-GISEL-NEXT: v_cmp_o_f64_e64 s[4:5], s[6:7], v[0:1]850; GFX9-GISEL-NEXT: v_mov_b32_e32 v10, 0x7ff80000851; GFX9-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v2, vcc852; GFX9-GISEL-NEXT: v_cndmask_b32_e32 v1, v10, v3, vcc853; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, v4, s[0:1]854; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v3, v10, v5, s[0:1]855; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, v6, s[2:3]856; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v5, v10, v7, s[2:3]857; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, v8, s[4:5]858; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v7, v10, v9, s[4:5]859; GFX9-GISEL-NEXT: ; return to shader part epilog860;861; GFX12-LABEL: test_fmaximum_v4f64_ss:862; GFX12: ; %bb.0:863; GFX12-NEXT: v_maximum_f64 v[0:1], s[0:1], s[8:9]864; GFX12-NEXT: v_maximum_f64 v[2:3], s[2:3], s[10:11]865; GFX12-NEXT: v_maximum_f64 v[4:5], s[4:5], s[12:13]866; GFX12-NEXT: v_maximum_f64 v[6:7], s[6:7], s[14:15]867; GFX12-NEXT: ; return to shader part epilog868 %val = call <4 x double> @llvm.maximum.v4f64(<4 x double> %a, <4 x double> %b)869 %ret = bitcast <4 x double> %val to <8 x float>870 ret <8 x float> %ret871}872 873define amdgpu_kernel void @fmaximumi_f32_move_to_valu(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr) {874; GFX9-LABEL: fmaximumi_f32_move_to_valu:875; GFX9: ; %bb.0:876; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24877; GFX9-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34878; GFX9-NEXT: v_mov_b32_e32 v0, 0879; GFX9-NEXT: v_mov_b32_e32 v3, 0x7fc00000880; GFX9-NEXT: s_waitcnt lgkmcnt(0)881; GFX9-NEXT: global_load_dword v1, v0, s[2:3] glc882; GFX9-NEXT: s_waitcnt vmcnt(0)883; GFX9-NEXT: global_load_dword v2, v0, s[6:7] glc884; GFX9-NEXT: s_waitcnt vmcnt(0)885; GFX9-NEXT: v_max_f32_e32 v4, v1, v2886; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v1, v2887; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v4, vcc888; GFX9-NEXT: global_store_dword v0, v1, s[0:1]889; GFX9-NEXT: s_endpgm890;891; GFX12-LABEL: fmaximumi_f32_move_to_valu:892; GFX12: ; %bb.0:893; GFX12-NEXT: s_clause 0x1894; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x24895; GFX12-NEXT: s_load_b64 s[4:5], s[4:5], 0x34896; GFX12-NEXT: v_mov_b32_e32 v0, 0897; GFX12-NEXT: s_wait_kmcnt 0x0898; GFX12-NEXT: global_load_b32 v1, v0, s[2:3] scope:SCOPE_SYS899; GFX12-NEXT: s_wait_loadcnt 0x0900; GFX12-NEXT: global_load_b32 v2, v0, s[4:5] scope:SCOPE_SYS901; GFX12-NEXT: s_wait_loadcnt 0x0902; GFX12-NEXT: v_maximum_f32 v1, v1, v2903; GFX12-NEXT: global_store_b32 v0, v1, s[0:1]904; GFX12-NEXT: s_endpgm905 %a = load volatile float, ptr addrspace(1) %aptr, align 4906 %b = load volatile float, ptr addrspace(1) %bptr, align 4907 %v = call float @llvm.maximum.f32(float %a, float %b)908 store float %v, ptr addrspace(1) %out, align 4909 ret void910}911 912define amdgpu_kernel void @fmaximum_f16_move_to_valu(ptr addrspace(1) %out, ptr addrspace(1) %aptr, ptr addrspace(1) %bptr) {913; GFX9-LABEL: fmaximum_f16_move_to_valu:914; GFX9: ; %bb.0:915; GFX9-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24916; GFX9-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x34917; GFX9-NEXT: v_mov_b32_e32 v0, 0918; GFX9-NEXT: v_mov_b32_e32 v3, 0x7e00919; GFX9-NEXT: s_waitcnt lgkmcnt(0)920; GFX9-NEXT: global_load_ushort v1, v0, s[2:3] glc921; GFX9-NEXT: s_waitcnt vmcnt(0)922; GFX9-NEXT: global_load_ushort v2, v0, s[6:7] glc923; GFX9-NEXT: s_waitcnt vmcnt(0)924; GFX9-NEXT: v_max_f16_e32 v4, v1, v2925; GFX9-NEXT: v_cmp_o_f16_e32 vcc, v1, v2926; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v4, vcc927; GFX9-NEXT: global_store_short v0, v1, s[0:1]928; GFX9-NEXT: s_endpgm929;930; GFX12-SDAG-TRUE16-LABEL: fmaximum_f16_move_to_valu:931; GFX12-SDAG-TRUE16: ; %bb.0:932; GFX12-SDAG-TRUE16-NEXT: s_clause 0x1933; GFX12-SDAG-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24934; GFX12-SDAG-TRUE16-NEXT: s_load_b64 s[4:5], s[4:5], 0x34935; GFX12-SDAG-TRUE16-NEXT: v_mov_b32_e32 v1, 0936; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x0937; GFX12-SDAG-TRUE16-NEXT: global_load_d16_b16 v0, v1, s[2:3] scope:SCOPE_SYS938; GFX12-SDAG-TRUE16-NEXT: s_wait_loadcnt 0x0939; GFX12-SDAG-TRUE16-NEXT: global_load_d16_hi_b16 v0, v1, s[4:5] scope:SCOPE_SYS940; GFX12-SDAG-TRUE16-NEXT: s_wait_loadcnt 0x0941; GFX12-SDAG-TRUE16-NEXT: v_maximum_f16 v0.l, v0.l, v0.h942; GFX12-SDAG-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]943; GFX12-SDAG-TRUE16-NEXT: s_endpgm944;945; GFX12-SDAG-FAKE16-LABEL: fmaximum_f16_move_to_valu:946; GFX12-SDAG-FAKE16: ; %bb.0:947; GFX12-SDAG-FAKE16-NEXT: s_clause 0x1948; GFX12-SDAG-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24949; GFX12-SDAG-FAKE16-NEXT: s_load_b64 s[4:5], s[4:5], 0x34950; GFX12-SDAG-FAKE16-NEXT: v_mov_b32_e32 v0, 0951; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x0952; GFX12-SDAG-FAKE16-NEXT: global_load_u16 v1, v0, s[2:3] scope:SCOPE_SYS953; GFX12-SDAG-FAKE16-NEXT: s_wait_loadcnt 0x0954; GFX12-SDAG-FAKE16-NEXT: global_load_u16 v2, v0, s[4:5] scope:SCOPE_SYS955; GFX12-SDAG-FAKE16-NEXT: s_wait_loadcnt 0x0956; GFX12-SDAG-FAKE16-NEXT: v_maximum_f16 v1, v1, v2957; GFX12-SDAG-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]958; GFX12-SDAG-FAKE16-NEXT: s_endpgm959;960; GFX12-GISEL-TRUE16-LABEL: fmaximum_f16_move_to_valu:961; GFX12-GISEL-TRUE16: ; %bb.0:962; GFX12-GISEL-TRUE16-NEXT: s_clause 0x1963; GFX12-GISEL-TRUE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24964; GFX12-GISEL-TRUE16-NEXT: s_load_b64 s[4:5], s[4:5], 0x34965; GFX12-GISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0966; GFX12-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x0967; GFX12-GISEL-TRUE16-NEXT: global_load_d16_b16 v0, v1, s[2:3] scope:SCOPE_SYS968; GFX12-GISEL-TRUE16-NEXT: s_wait_loadcnt 0x0969; GFX12-GISEL-TRUE16-NEXT: global_load_d16_hi_b16 v0, v1, s[4:5] scope:SCOPE_SYS970; GFX12-GISEL-TRUE16-NEXT: s_wait_loadcnt 0x0971; GFX12-GISEL-TRUE16-NEXT: v_maximum_f16 v0.l, v0.l, v0.h972; GFX12-GISEL-TRUE16-NEXT: global_store_b16 v1, v0, s[0:1]973; GFX12-GISEL-TRUE16-NEXT: s_endpgm974;975; GFX12-GISEL-FAKE16-LABEL: fmaximum_f16_move_to_valu:976; GFX12-GISEL-FAKE16: ; %bb.0:977; GFX12-GISEL-FAKE16-NEXT: s_clause 0x1978; GFX12-GISEL-FAKE16-NEXT: s_load_b128 s[0:3], s[4:5], 0x24979; GFX12-GISEL-FAKE16-NEXT: s_load_b64 s[4:5], s[4:5], 0x34980; GFX12-GISEL-FAKE16-NEXT: v_mov_b32_e32 v0, 0981; GFX12-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x0982; GFX12-GISEL-FAKE16-NEXT: global_load_u16 v1, v0, s[2:3] scope:SCOPE_SYS983; GFX12-GISEL-FAKE16-NEXT: s_wait_loadcnt 0x0984; GFX12-GISEL-FAKE16-NEXT: global_load_u16 v2, v0, s[4:5] scope:SCOPE_SYS985; GFX12-GISEL-FAKE16-NEXT: s_wait_loadcnt 0x0986; GFX12-GISEL-FAKE16-NEXT: v_maximum_f16 v1, v1, v2987; GFX12-GISEL-FAKE16-NEXT: global_store_b16 v0, v1, s[0:1]988; GFX12-GISEL-FAKE16-NEXT: s_endpgm989 %a = load volatile half, ptr addrspace(1) %aptr, align 4990 %b = load volatile half, ptr addrspace(1) %bptr, align 4991 %v = call half @llvm.maximum.f16(half %a, half %b)992 store half %v, ptr addrspace(1) %out, align 4993 ret void994}995 996define amdgpu_ps float @test_fmaximum_f32_ieee_on(float %a, float %b) #0 {997; GFX9-LABEL: test_fmaximum_f32_ieee_on:998; GFX9: ; %bb.0:999; GFX9-NEXT: v_max_f32_e32 v2, v0, v11000; GFX9-NEXT: v_mov_b32_e32 v3, 0x7fc000001001; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v11002; GFX9-NEXT: v_cndmask_b32_e32 v0, v3, v2, vcc1003; GFX9-NEXT: ; return to shader part epilog1004;1005; GFX12-LABEL: test_fmaximum_f32_ieee_on:1006; GFX12: ; %bb.0:1007; GFX12-NEXT: v_maximum_f32 v0, v0, v11008; GFX12-NEXT: ; return to shader part epilog1009 %val = call float @llvm.maximum.f32(float %a, float %b)1010 ret float %val1011}1012 1013define amdgpu_ps float @test_fmaximum_f32_ieee_off(float %a, float %b) #1 {1014; GFX9-LABEL: test_fmaximum_f32_ieee_off:1015; GFX9: ; %bb.0:1016; GFX9-NEXT: v_max_f32_e32 v2, v0, v11017; GFX9-NEXT: v_mov_b32_e32 v3, 0x7fc000001018; GFX9-NEXT: v_cmp_o_f32_e32 vcc, v0, v11019; GFX9-NEXT: v_cndmask_b32_e32 v0, v3, v2, vcc1020; GFX9-NEXT: ; return to shader part epilog1021;1022; GFX12-LABEL: test_fmaximum_f32_ieee_off:1023; GFX12: ; %bb.0:1024; GFX12-NEXT: v_maximum_f32 v0, v0, v11025; GFX12-NEXT: ; return to shader part epilog1026 %val = call float @llvm.maximum.f32(float %a, float %b)1027 ret float %val1028}1029 1030declare float @llvm.maximum.f32(float, float)1031declare <2 x float> @llvm.maximum.v2f32(<2 x float>, <2 x float>)1032declare <3 x float> @llvm.maximum.v3f32(<3 x float>, <3 x float>)1033declare <4 x float> @llvm.maximum.v4f32(<4 x float>, <4 x float>)1034declare <16 x float> @llvm.maximum.v16f32(<16 x float>, <16 x float>)1035declare half @llvm.maximum.f16(half, half)1036declare <2 x half> @llvm.maximum.v2f16(<2 x half>, <2 x half>)1037declare <3 x half> @llvm.maximum.v3f16(<3 x half>, <3 x half>)1038declare <4 x half> @llvm.maximum.v4f16(<4 x half>, <4 x half>)1039declare double @llvm.maximum.f64(double, double)1040declare <2 x double> @llvm.maximum.v2f64(<2 x double>, <2 x double>)1041declare <4 x double> @llvm.maximum.v4f64(<4 x double>, <4 x double>)1042 1043attributes #0 = { nounwind "amdgpu-ieee"="true" }1044attributes #1 = { nounwind "amdgpu-ieee"="false" }1045