148 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 %s -o - | FileCheck %s3 4define i32 @xori64i32(i64 %a) {5; CHECK-LABEL: xori64i32:6; CHECK: ; %bb.0:7; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8; CHECK-NEXT: v_ashrrev_i32_e32 v0, 31, v19; CHECK-NEXT: v_xor_b32_e32 v0, 0x7fffffff, v010; CHECK-NEXT: s_setpc_b64 s[30:31]11 %shr4 = ashr i64 %a, 6312 %conv5 = trunc i64 %shr4 to i3213 %xor = xor i32 %conv5, 214748364714 ret i32 %xor15}16 17define i64 @selecti64i64(i64 %a) {18; CHECK-LABEL: selecti64i64:19; CHECK: ; %bb.0:20; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)21; CHECK-NEXT: v_ashrrev_i32_e32 v1, 31, v122; CHECK-NEXT: v_xor_b32_e32 v0, 0x7fffffff, v123; CHECK-NEXT: s_setpc_b64 s[30:31]24 %c = icmp sgt i64 %a, -125 %s = select i1 %c, i64 2147483647, i64 -214748364826 ret i64 %s27}28 29define i32 @selecti64i32(i64 %a) {30; CHECK-LABEL: selecti64i32:31; CHECK: ; %bb.0:32; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)33; CHECK-NEXT: v_ashrrev_i32_e32 v0, 31, v134; CHECK-NEXT: v_xor_b32_e32 v0, 0x7fffffff, v035; CHECK-NEXT: s_setpc_b64 s[30:31]36 %c = icmp sgt i64 %a, -137 %s = select i1 %c, i32 2147483647, i32 -214748364838 ret i32 %s39}40 41define i64 @selecti32i64(i32 %a) {42; CHECK-LABEL: selecti32i64:43; CHECK: ; %bb.0:44; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)45; CHECK-NEXT: v_ashrrev_i32_e32 v1, 31, v046; CHECK-NEXT: v_xor_b32_e32 v0, 0x7fffffff, v147; CHECK-NEXT: v_ashrrev_i32_e32 v1, 31, v148; CHECK-NEXT: s_setpc_b64 s[30:31]49 %c = icmp sgt i32 %a, -150 %s = select i1 %c, i64 2147483647, i64 -214748364851 ret i64 %s52}53 54 55 56define i8 @xori32i8(i32 %a) {57; CHECK-LABEL: xori32i8:58; CHECK: ; %bb.0:59; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)60; CHECK-NEXT: v_ashrrev_i32_e32 v0, 31, v061; CHECK-NEXT: v_xor_b32_e32 v0, 0x54, v062; CHECK-NEXT: s_setpc_b64 s[30:31]63 %shr4 = ashr i32 %a, 3164 %conv5 = trunc i32 %shr4 to i865 %xor = xor i8 %conv5, 8466 ret i8 %xor67}68 69define i32 @selecti32i32(i32 %a) {70; CHECK-LABEL: selecti32i32:71; CHECK: ; %bb.0:72; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)73; CHECK-NEXT: v_ashrrev_i32_e32 v0, 31, v074; CHECK-NEXT: v_xor_b32_e32 v0, 0x54, v075; CHECK-NEXT: s_setpc_b64 s[30:31]76 %c = icmp sgt i32 %a, -177 %s = select i1 %c, i32 84, i32 -8578 ret i32 %s79}80 81define i8 @selecti32i8(i32 %a) {82; CHECK-LABEL: selecti32i8:83; CHECK: ; %bb.0:84; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)85; CHECK-NEXT: v_ashrrev_i32_e32 v0, 31, v086; CHECK-NEXT: v_xor_b32_e32 v0, 0x54, v087; CHECK-NEXT: s_setpc_b64 s[30:31]88 %c = icmp sgt i32 %a, -189 %s = select i1 %c, i8 84, i8 -8590 ret i8 %s91}92 93define i32 @selecti8i32(i8 %a) {94; CHECK-LABEL: selecti8i32:95; CHECK: ; %bb.0:96; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)97; CHECK-NEXT: v_bfe_i32 v0, v0, 0, 898; CHECK-NEXT: v_mov_b32_e32 v1, 0x5499; CHECK-NEXT: v_ashrrev_i16 v0, 7, v0100; CHECK-NEXT: v_xor_b32_sdwa v0, sext(v0), v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD101; CHECK-NEXT: s_setpc_b64 s[30:31]102 %c = icmp sgt i8 %a, -1103 %s = select i1 %c, i32 84, i32 -85104 ret i32 %s105}106 107define i32 @icmpasreq(i32 %input, i32 %a, i32 %b) {108; CHECK-LABEL: icmpasreq:109; CHECK: ; %bb.0:110; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)111; CHECK-NEXT: v_cmp_gt_i32_e32 vcc_lo, 0, v0112; CHECK-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo113; CHECK-NEXT: s_setpc_b64 s[30:31]114 %sh = ashr i32 %input, 31115 %c = icmp eq i32 %sh, -1116 %s = select i1 %c, i32 %a, i32 %b117 ret i32 %s118}119 120define i32 @icmpasrne(i32 %input, i32 %a, i32 %b) {121; CHECK-LABEL: icmpasrne:122; CHECK: ; %bb.0:123; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)124; CHECK-NEXT: v_cmp_lt_i32_e32 vcc_lo, -1, v0125; CHECK-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo126; CHECK-NEXT: s_setpc_b64 s[30:31]127 %sh = ashr i32 %input, 31128 %c = icmp ne i32 %sh, -1129 %s = select i1 %c, i32 %a, i32 %b130 ret i32 %s131}132 133define i32 @oneusecmp(i32 %a, i32 %b, i32 %d) {134; CHECK-LABEL: oneusecmp:135; CHECK: ; %bb.0:136; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)137; CHECK-NEXT: v_cmp_gt_i32_e32 vcc_lo, 0, v0138; CHECK-NEXT: v_ashrrev_i32_e32 v3, 31, v0139; CHECK-NEXT: v_cndmask_b32_e32 v0, v1, v2, vcc_lo140; CHECK-NEXT: v_xad_u32 v0, 0x7f, v3, v0141; CHECK-NEXT: s_setpc_b64 s[30:31]142 %c = icmp sle i32 %a, -1143 %s = select i1 %c, i32 -128, i32 127144 %s2 = select i1 %c, i32 %d, i32 %b145 %x = add i32 %s, %s2146 ret i32 %x147}148