brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.7 KiB · f5068f5 Raw
212 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-amd-mesa3d -mcpu=gfx802 < %s | FileCheck -check-prefixes=GFX89,GFX8 %s3; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-amd-mesa3d -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX89,GFX9 %s4; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-amd-mesa3d -mcpu=gfx1010 < %s | FileCheck -check-prefix=GFX10 %s5 6define i32 @test_min_max_ValK0_K1_u32(i32 %a) {7; GFX89-LABEL: test_min_max_ValK0_K1_u32:8; GFX89:       ; %bb.0:9; GFX89-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10; GFX89-NEXT:    v_med3_u32 v0, v0, 12, 1711; GFX89-NEXT:    s_setpc_b64 s[30:31]12;13; GFX10-LABEL: test_min_max_ValK0_K1_u32:14; GFX10:       ; %bb.0:15; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)16; GFX10-NEXT:    v_med3_u32 v0, v0, 12, 1717; GFX10-NEXT:    s_setpc_b64 s[30:31]18  %umax = call i32 @llvm.umax.i32(i32 %a, i32 12)19  %umed = call i32 @llvm.umin.i32(i32 %umax, i32 17)20  ret i32 %umed21}22 23define i32 @min_max_ValK0_K1_i32(i32 %a) {24; GFX89-LABEL: min_max_ValK0_K1_i32:25; GFX89:       ; %bb.0:26; GFX89-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)27; GFX89-NEXT:    v_med3_u32 v0, v0, 12, 1728; GFX89-NEXT:    s_setpc_b64 s[30:31]29;30; GFX10-LABEL: min_max_ValK0_K1_i32:31; GFX10:       ; %bb.0:32; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)33; GFX10-NEXT:    v_med3_u32 v0, v0, 12, 1734; GFX10-NEXT:    s_setpc_b64 s[30:31]35  %umax = call i32 @llvm.umax.i32(i32 12, i32 %a)36  %umed = call i32 @llvm.umin.i32(i32 %umax, i32 17)37  ret i32 %umed38}39 40define i32 @test_min_K1max_ValK0__u32(i32 %a) {41; GFX89-LABEL: test_min_K1max_ValK0__u32:42; GFX89:       ; %bb.0:43; GFX89-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)44; GFX89-NEXT:    v_med3_u32 v0, v0, 12, 1745; GFX89-NEXT:    s_setpc_b64 s[30:31]46;47; GFX10-LABEL: test_min_K1max_ValK0__u32:48; GFX10:       ; %bb.0:49; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)50; GFX10-NEXT:    v_med3_u32 v0, v0, 12, 1751; GFX10-NEXT:    s_setpc_b64 s[30:31]52  %umax = call i32 @llvm.umax.i32(i32 %a, i32 12)53  %umed = call i32 @llvm.umin.i32(i32 17, i32 %umax)54  ret i32 %umed55}56 57define i32 @test_min_K1max_K0Val__u32(i32 %a) {58; GFX89-LABEL: test_min_K1max_K0Val__u32:59; GFX89:       ; %bb.0:60; GFX89-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)61; GFX89-NEXT:    v_med3_u32 v0, v0, 12, 1762; GFX89-NEXT:    s_setpc_b64 s[30:31]63;64; GFX10-LABEL: test_min_K1max_K0Val__u32:65; GFX10:       ; %bb.0:66; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)67; GFX10-NEXT:    v_med3_u32 v0, v0, 12, 1768; GFX10-NEXT:    s_setpc_b64 s[30:31]69  %umax = call i32 @llvm.umax.i32(i32 12, i32 %a)70  %umed = call i32 @llvm.umin.i32(i32 17, i32 %umax)71  ret i32 %umed72}73 74define i32 @test_max_min_ValK1_K0_u32(i32 %a) {75; GFX89-LABEL: test_max_min_ValK1_K0_u32:76; GFX89:       ; %bb.0:77; GFX89-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)78; GFX89-NEXT:    v_med3_u32 v0, v0, 12, 1779; GFX89-NEXT:    s_setpc_b64 s[30:31]80;81; GFX10-LABEL: test_max_min_ValK1_K0_u32:82; GFX10:       ; %bb.0:83; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)84; GFX10-NEXT:    v_med3_u32 v0, v0, 12, 1785; GFX10-NEXT:    s_setpc_b64 s[30:31]86  %umin = call i32 @llvm.umin.i32(i32 %a, i32 17)87  %umed = call i32 @llvm.umax.i32(i32 %umin, i32 12)88  ret i32 %umed89}90 91define i32 @test_max_min_K1Val_K0_u32(i32 %a) {92; GFX89-LABEL: test_max_min_K1Val_K0_u32:93; GFX89:       ; %bb.0:94; GFX89-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)95; GFX89-NEXT:    v_med3_u32 v0, v0, 12, 1796; GFX89-NEXT:    s_setpc_b64 s[30:31]97;98; GFX10-LABEL: test_max_min_K1Val_K0_u32:99; GFX10:       ; %bb.0:100; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)101; GFX10-NEXT:    v_med3_u32 v0, v0, 12, 17102; GFX10-NEXT:    s_setpc_b64 s[30:31]103  %umin = call i32 @llvm.umin.i32(i32 17, i32 %a)104  %umed = call i32 @llvm.umax.i32(i32 %umin, i32 12)105  ret i32 %umed106}107 108define i32 @test_max_K0min_ValK1__u32(i32 %a) {109; GFX89-LABEL: test_max_K0min_ValK1__u32:110; GFX89:       ; %bb.0:111; GFX89-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)112; GFX89-NEXT:    v_med3_u32 v0, v0, 12, 17113; GFX89-NEXT:    s_setpc_b64 s[30:31]114;115; GFX10-LABEL: test_max_K0min_ValK1__u32:116; GFX10:       ; %bb.0:117; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)118; GFX10-NEXT:    v_med3_u32 v0, v0, 12, 17119; GFX10-NEXT:    s_setpc_b64 s[30:31]120  %umin = call i32 @llvm.umin.i32(i32 %a, i32 17)121  %umed = call i32 @llvm.umax.i32(i32 12, i32 %umin)122  ret i32 %umed123}124 125define i32 @test_max_K0min_K1Val__u32(i32 %a) {126; GFX89-LABEL: test_max_K0min_K1Val__u32:127; GFX89:       ; %bb.0:128; GFX89-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)129; GFX89-NEXT:    v_med3_u32 v0, v0, 12, 17130; GFX89-NEXT:    s_setpc_b64 s[30:31]131;132; GFX10-LABEL: test_max_K0min_K1Val__u32:133; GFX10:       ; %bb.0:134; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)135; GFX10-NEXT:    v_med3_u32 v0, v0, 12, 17136; GFX10-NEXT:    s_setpc_b64 s[30:31]137  %umin = call i32 @llvm.umin.i32(i32 17, i32 %a)138  %umed = call i32 @llvm.umax.i32(i32 12, i32 %umin)139  ret i32 %umed140}141 142define <2 x i16> @test_max_K0min_K1Val__v2u16(<2 x i16> %a) {143; GFX8-LABEL: test_max_K0min_K1Val__v2u16:144; GFX8:       ; %bb.0:145; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)146; GFX8-NEXT:    v_mov_b32_e32 v2, 17147; GFX8-NEXT:    v_min_u16_e32 v1, 17, v0148; GFX8-NEXT:    v_min_u16_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD149; GFX8-NEXT:    v_mov_b32_e32 v2, 12150; GFX8-NEXT:    v_max_u16_e32 v1, 12, v1151; GFX8-NEXT:    v_max_u16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD152; GFX8-NEXT:    v_or_b32_e32 v0, v1, v0153; GFX8-NEXT:    s_setpc_b64 s[30:31]154;155; GFX9-LABEL: test_max_K0min_K1Val__v2u16:156; GFX9:       ; %bb.0:157; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)158; GFX9-NEXT:    v_pk_min_u16 v0, 17, v0 op_sel_hi:[0,1]159; GFX9-NEXT:    v_pk_max_u16 v0, 12, v0 op_sel_hi:[0,1]160; GFX9-NEXT:    s_setpc_b64 s[30:31]161;162; GFX10-LABEL: test_max_K0min_K1Val__v2u16:163; GFX10:       ; %bb.0:164; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)165; GFX10-NEXT:    v_pk_min_u16 v0, 17, v0 op_sel_hi:[0,1]166; GFX10-NEXT:    v_pk_max_u16 v0, 12, v0 op_sel_hi:[0,1]167; GFX10-NEXT:    s_setpc_b64 s[30:31]168  %umin = call <2 x i16> @llvm.umin.v2i16(<2 x i16> <i16 17, i16 17>, <2 x i16> %a)169  %umed = call <2 x i16> @llvm.umax.v2i16(<2 x i16> <i16 12, i16 12>, <2 x i16> %umin)170  ret <2 x i16> %umed171}172 173define amdgpu_ps i32 @test_uniform_min_max(i32 inreg %a) {174; GFX89-LABEL: test_uniform_min_max:175; GFX89:       ; %bb.0:176; GFX89-NEXT:    s_max_u32 s0, s2, 12177; GFX89-NEXT:    s_min_u32 s0, s0, 17178; GFX89-NEXT:    ; return to shader part epilog179;180; GFX10-LABEL: test_uniform_min_max:181; GFX10:       ; %bb.0:182; GFX10-NEXT:    s_max_u32 s0, s2, 12183; GFX10-NEXT:    s_min_u32 s0, s0, 17184; GFX10-NEXT:    ; return to shader part epilog185  %umax = call i32 @llvm.umax.i32(i32 %a, i32 12)186  %umed = call i32 @llvm.umin.i32(i32 %umax, i32 17)187  ret i32 %umed188}189 190define i32 @test_non_inline_constant_u32(i32 %a) {191; GFX89-LABEL: test_non_inline_constant_u32:192; GFX89:       ; %bb.0:193; GFX89-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)194; GFX89-NEXT:    v_mov_b32_e32 v1, 0x41195; GFX89-NEXT:    v_med3_u32 v0, v0, 12, v1196; GFX89-NEXT:    s_setpc_b64 s[30:31]197;198; GFX10-LABEL: test_non_inline_constant_u32:199; GFX10:       ; %bb.0:200; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)201; GFX10-NEXT:    v_med3_u32 v0, v0, 12, 0x41202; GFX10-NEXT:    s_setpc_b64 s[30:31]203  %umax = call i32 @llvm.umax.i32(i32 %a, i32 12)204  %umed = call i32 @llvm.umin.i32(i32 %umax, i32 65)205  ret i32 %umed206}207 208declare i32 @llvm.umin.i32(i32, i32)209declare i32 @llvm.umax.i32(i32, i32)210declare <2 x i16> @llvm.umin.v2i16(<2 x i16>, <2 x i16>)211declare <2 x i16> @llvm.umax.v2i16(<2 x i16>, <2 x i16>)212