brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.8 KiB · 388cc97 Raw
277 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti < %s | FileCheck -check-prefix=GFX6 %s3; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=hawaii < %s | FileCheck -check-prefix=GFX6 %s4; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji < %s | FileCheck -check-prefix=GFX8 %s5 6define float @v_test_fmax_legacy_ogt_f32(float %a, float %b) {7; GFX6-LABEL: v_test_fmax_legacy_ogt_f32:8; GFX6:       ; %bb.0:9; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10; GFX6-NEXT:    v_max_legacy_f32_e32 v0, v0, v111; GFX6-NEXT:    s_setpc_b64 s[30:31]12;13; GFX8-LABEL: v_test_fmax_legacy_ogt_f32:14; GFX8:       ; %bb.0:15; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)16; GFX8-NEXT:    v_cmp_gt_f32_e32 vcc, v0, v117; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc18; GFX8-NEXT:    s_setpc_b64 s[30:31]19  %cmp = fcmp ogt float %a, %b20  %val = select i1 %cmp, float %a, float %b21  ret float %val22}23 24define float @v_test_fmax_legacy_oge_f32(float %a, float %b) {25; GFX6-LABEL: v_test_fmax_legacy_oge_f32:26; GFX6:       ; %bb.0:27; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)28; GFX6-NEXT:    v_max_legacy_f32_e32 v0, v0, v129; GFX6-NEXT:    s_setpc_b64 s[30:31]30;31; GFX8-LABEL: v_test_fmax_legacy_oge_f32:32; GFX8:       ; %bb.0:33; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)34; GFX8-NEXT:    v_cmp_ge_f32_e32 vcc, v0, v135; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc36; GFX8-NEXT:    s_setpc_b64 s[30:31]37  %cmp = fcmp oge float %a, %b38  %val = select i1 %cmp, float %a, float %b39  ret float %val40}41 42define float @v_test_fmax_legacy_uge_f32(float %a, float %b) {43; GFX6-LABEL: v_test_fmax_legacy_uge_f32:44; GFX6:       ; %bb.0:45; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)46; GFX6-NEXT:    v_max_legacy_f32_e32 v0, v1, v047; GFX6-NEXT:    s_setpc_b64 s[30:31]48;49; GFX8-LABEL: v_test_fmax_legacy_uge_f32:50; GFX8:       ; %bb.0:51; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)52; GFX8-NEXT:    v_cmp_nlt_f32_e32 vcc, v0, v153; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc54; GFX8-NEXT:    s_setpc_b64 s[30:31]55  %cmp = fcmp uge float %a, %b56  %val = select i1 %cmp, float %a, float %b57  ret float %val58}59 60define float @v_test_fmax_legacy_ugt_f32(float %a, float %b) {61; GFX6-LABEL: v_test_fmax_legacy_ugt_f32:62; GFX6:       ; %bb.0:63; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)64; GFX6-NEXT:    v_max_legacy_f32_e32 v0, v1, v065; GFX6-NEXT:    s_setpc_b64 s[30:31]66;67; GFX8-LABEL: v_test_fmax_legacy_ugt_f32:68; GFX8:       ; %bb.0:69; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)70; GFX8-NEXT:    v_cmp_nle_f32_e32 vcc, v0, v171; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc72; GFX8-NEXT:    s_setpc_b64 s[30:31]73  %cmp = fcmp ugt float %a, %b74  %val = select i1 %cmp, float %a, float %b75  ret float %val76}77 78define float @v_test_fmax_legacy_ole_f32(float %a, float %b) {79; GFX6-LABEL: v_test_fmax_legacy_ole_f32:80; GFX6:       ; %bb.0:81; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)82; GFX6-NEXT:    v_max_legacy_f32_e32 v0, v1, v083; GFX6-NEXT:    s_setpc_b64 s[30:31]84;85; GFX8-LABEL: v_test_fmax_legacy_ole_f32:86; GFX8:       ; %bb.0:87; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)88; GFX8-NEXT:    v_cmp_le_f32_e32 vcc, v0, v189; GFX8-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc90; GFX8-NEXT:    s_setpc_b64 s[30:31]91  %cmp = fcmp ole float %a, %b92  %val = select i1 %cmp, float %b, float %a93  ret float %val94}95 96define float @v_test_fmax_legacy_olt_f32(float %a, float %b) {97; GFX6-LABEL: v_test_fmax_legacy_olt_f32:98; GFX6:       ; %bb.0:99; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)100; GFX6-NEXT:    v_max_legacy_f32_e32 v0, v1, v0101; GFX6-NEXT:    s_setpc_b64 s[30:31]102;103; GFX8-LABEL: v_test_fmax_legacy_olt_f32:104; GFX8:       ; %bb.0:105; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)106; GFX8-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1107; GFX8-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc108; GFX8-NEXT:    s_setpc_b64 s[30:31]109  %cmp = fcmp olt float %a, %b110  %val = select i1 %cmp, float %b, float %a111  ret float %val112}113 114define float @v_test_fmax_legacy_ule_f32(float %a, float %b) {115; GFX6-LABEL: v_test_fmax_legacy_ule_f32:116; GFX6:       ; %bb.0:117; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)118; GFX6-NEXT:    v_max_legacy_f32_e32 v0, v0, v1119; GFX6-NEXT:    s_setpc_b64 s[30:31]120;121; GFX8-LABEL: v_test_fmax_legacy_ule_f32:122; GFX8:       ; %bb.0:123; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)124; GFX8-NEXT:    v_cmp_ngt_f32_e32 vcc, v0, v1125; GFX8-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc126; GFX8-NEXT:    s_setpc_b64 s[30:31]127  %cmp = fcmp ule float %a, %b128  %val = select i1 %cmp, float %b, float %a129  ret float %val130}131 132define float @v_test_fmax_legacy_ult_f32(float %a, float %b) {133; GFX6-LABEL: v_test_fmax_legacy_ult_f32:134; GFX6:       ; %bb.0:135; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)136; GFX6-NEXT:    v_max_legacy_f32_e32 v0, v0, v1137; GFX6-NEXT:    s_setpc_b64 s[30:31]138;139; GFX8-LABEL: v_test_fmax_legacy_ult_f32:140; GFX8:       ; %bb.0:141; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)142; GFX8-NEXT:    v_cmp_nge_f32_e32 vcc, v0, v1143; GFX8-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc144; GFX8-NEXT:    s_setpc_b64 s[30:31]145  %cmp = fcmp ult float %a, %b146  %val = select i1 %cmp, float %b, float %a147  ret float %val148}149 150define float @v_test_fmax_legacy_oge_f32_fneg_lhs(float %a, float %b) {151; GFX6-LABEL: v_test_fmax_legacy_oge_f32_fneg_lhs:152; GFX6:       ; %bb.0:153; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)154; GFX6-NEXT:    v_max_legacy_f32_e64 v0, -v0, v1155; GFX6-NEXT:    s_setpc_b64 s[30:31]156;157; GFX8-LABEL: v_test_fmax_legacy_oge_f32_fneg_lhs:158; GFX8:       ; %bb.0:159; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)160; GFX8-NEXT:    v_cmp_ge_f32_e64 s[4:5], -v0, v1161; GFX8-NEXT:    v_cndmask_b32_e64 v0, v1, -v0, s[4:5]162; GFX8-NEXT:    s_setpc_b64 s[30:31]163  %a.neg = fneg float %a164  %cmp = fcmp oge float %a.neg, %b165  %val = select i1 %cmp, float %a.neg, float %b166  ret float %val167}168 169define float @v_test_fmax_legacy_oge_f32_fneg_rhs(float %a, float %b) {170; GFX6-LABEL: v_test_fmax_legacy_oge_f32_fneg_rhs:171; GFX6:       ; %bb.0:172; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)173; GFX6-NEXT:    v_max_legacy_f32_e64 v0, v0, -v1174; GFX6-NEXT:    s_setpc_b64 s[30:31]175;176; GFX8-LABEL: v_test_fmax_legacy_oge_f32_fneg_rhs:177; GFX8:       ; %bb.0:178; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)179; GFX8-NEXT:    v_cmp_ge_f32_e64 s[4:5], v0, -v1180; GFX8-NEXT:    v_cndmask_b32_e64 v0, -v1, v0, s[4:5]181; GFX8-NEXT:    s_setpc_b64 s[30:31]182  %b.neg = fneg float %b183  %cmp = fcmp oge float %a, %b.neg184  %val = select i1 %cmp, float %a, float %b.neg185  ret float %val186}187 188define float @v_test_fcmp_select_ord(float %a, float %b) {189; GFX6-LABEL: v_test_fcmp_select_ord:190; GFX6:       ; %bb.0:191; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)192; GFX6-NEXT:    v_cmp_o_f32_e32 vcc, v0, v1193; GFX6-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc194; GFX6-NEXT:    s_setpc_b64 s[30:31]195;196; GFX8-LABEL: v_test_fcmp_select_ord:197; GFX8:       ; %bb.0:198; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)199; GFX8-NEXT:    v_cmp_o_f32_e32 vcc, v0, v1200; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc201; GFX8-NEXT:    s_setpc_b64 s[30:31]202  %cmp = fcmp ord float %a, %b203  %val = select i1 %cmp, float %a, float %b204  ret float %val205}206 207define float @v_test_fmax_legacy_ule_f32_multi_use(float %a, float %b) {208; GFX6-LABEL: v_test_fmax_legacy_ule_f32_multi_use:209; GFX6:       ; %bb.0:210; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)211; GFX6-NEXT:    v_cmp_gt_f32_e32 vcc, v0, v1212; GFX6-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc213; GFX6-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc214; GFX6-NEXT:    s_mov_b32 m0, -1215; GFX6-NEXT:    ds_write_b32 v0, v1216; GFX6-NEXT:    s_waitcnt lgkmcnt(0)217; GFX6-NEXT:    s_setpc_b64 s[30:31]218;219; GFX8-LABEL: v_test_fmax_legacy_ule_f32_multi_use:220; GFX8:       ; %bb.0:221; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)222; GFX8-NEXT:    v_cmp_gt_f32_e32 vcc, v0, v1223; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc224; GFX8-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc225; GFX8-NEXT:    s_mov_b32 m0, -1226; GFX8-NEXT:    ds_write_b32 v0, v1227; GFX8-NEXT:    s_waitcnt lgkmcnt(0)228; GFX8-NEXT:    s_setpc_b64 s[30:31]229  %cmp = fcmp ogt float %a, %b230  %val0 = select i1 %cmp, float %a, float %b231  %val1 = zext i1 %cmp to i32232  store i32 %val1, ptr addrspace(3) poison233  ret float %val0234}235 236define double @v_test_fmax_legacy_ult_f64(double %a, double %b) {237; GFX6-LABEL: v_test_fmax_legacy_ult_f64:238; GFX6:       ; %bb.0:239; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)240; GFX6-NEXT:    v_cmp_nge_f64_e32 vcc, v[0:1], v[2:3]241; GFX6-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc242; GFX6-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc243; GFX6-NEXT:    s_setpc_b64 s[30:31]244;245; GFX8-LABEL: v_test_fmax_legacy_ult_f64:246; GFX8:       ; %bb.0:247; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)248; GFX8-NEXT:    v_cmp_nge_f64_e32 vcc, v[0:1], v[2:3]249; GFX8-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc250; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc251; GFX8-NEXT:    s_setpc_b64 s[30:31]252  %cmp = fcmp ult double %a, %b253  %val = select i1 %cmp, double %b, double %a254  ret double %val255}256 257define <2 x float> @v_test_fmax_legacy_ogt_v2f32(<2 x float> %a, <2 x float> %b) {258; GFX6-LABEL: v_test_fmax_legacy_ogt_v2f32:259; GFX6:       ; %bb.0:260; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)261; GFX6-NEXT:    v_max_legacy_f32_e32 v0, v0, v2262; GFX6-NEXT:    v_max_legacy_f32_e32 v1, v1, v3263; GFX6-NEXT:    s_setpc_b64 s[30:31]264;265; GFX8-LABEL: v_test_fmax_legacy_ogt_v2f32:266; GFX8:       ; %bb.0:267; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)268; GFX8-NEXT:    v_cmp_gt_f32_e32 vcc, v0, v2269; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc270; GFX8-NEXT:    v_cmp_gt_f32_e32 vcc, v1, v3271; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v1, vcc272; GFX8-NEXT:    s_setpc_b64 s[30:31]273  %cmp = fcmp ogt <2 x float> %a, %b274  %val = select <2 x i1> %cmp, <2 x float> %a, <2 x float> %b275  ret <2 x float> %val276}277