1; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s 2; RUN: llc -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s 3 4declare i64 @llvm.amdgcn.icmp.i32(i32, i32, i32) #0 5declare i64 @llvm.amdgcn.icmp.i64(i64, i64, i32) #0 6 7; GCN-LABEL: {{^}}v_icmp_i32_eq: 8; GCN: v_cmp_eq_u32_e64 9define void @v_icmp_i32_eq(i64 addrspace(1)* %out, i32 %src) { 10 %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 32) 11 store i64 %result, i64 addrspace(1)* %out 12 ret void 13} 14 15; GCN-LABEL: {{^}}v_icmp: 16; GCN-NOT: v_cmp_eq_u32_e64 17define void @v_icmp(i64 addrspace(1)* %out, i32 %src) { 18 %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 30) 19 store i64 %result, i64 addrspace(1)* %out 20 ret void 21} 22; GCN-LABEL: {{^}}v_icmp_i32_ne: 23; GCN: v_cmp_ne_u32_e64 24define void @v_icmp_i32_ne(i64 addrspace(1)* %out, i32 %src) { 25 %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 33) 26 store i64 %result, i64 addrspace(1)* %out 27 ret void 28} 29 30; GCN-LABEL: {{^}}v_icmp_u32_ugt: 31; GCN: v_cmp_gt_u32_e64 32define void @v_icmp_u32_ugt(i64 addrspace(1)* %out, i32 %src) { 33 %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 34) 34 store i64 %result, i64 addrspace(1)* %out 35 ret void 36} 37 38; GCN-LABEL: {{^}}v_icmp_u32_uge: 39; GCN: v_cmp_ge_u32_e64 40define void @v_icmp_u32_uge(i64 addrspace(1)* %out, i32 %src) { 41 %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 35) 42 store i64 %result, i64 addrspace(1)* %out 43 ret void 44} 45 46; GCN-LABEL: {{^}}v_icmp_u32_ult: 47; GCN: v_cmp_lt_u32_e64 48define void @v_icmp_u32_ult(i64 addrspace(1)* %out, i32 %src) { 49 %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 36) 50 store i64 %result, i64 addrspace(1)* %out 51 ret void 52} 53 54; GCN-LABEL: {{^}}v_icmp_u32_ule: 55; GCN: v_cmp_le_u32_e64 56define void @v_icmp_u32_ule(i64 addrspace(1)* %out, i32 %src) { 57 %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 37) 58 store i64 %result, i64 addrspace(1)* %out 59 ret void 60} 61 62; GCN-LABEL: {{^}}v_icmp_i32_sgt: 63; GCN: v_cmp_gt_i32_e64 64define void @v_icmp_i32_sgt(i64 addrspace(1)* %out, i32 %src) #1 { 65 %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 38) 66 store i64 %result, i64 addrspace(1)* %out 67 ret void 68} 69 70; GCN-LABEL: {{^}}v_icmp_i32_sge: 71; GCN: v_cmp_ge_i32_e64 72define void @v_icmp_i32_sge(i64 addrspace(1)* %out, i32 %src) { 73 %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 39) 74 store i64 %result, i64 addrspace(1)* %out 75 ret void 76} 77 78; GCN-LABEL: {{^}}v_icmp_i32_slt: 79; GCN: v_cmp_lt_i32_e64 80define void @v_icmp_i32_slt(i64 addrspace(1)* %out, i32 %src) { 81 %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 40) 82 store i64 %result, i64 addrspace(1)* %out 83 ret void 84} 85; GCN-LABEL: {{^}}v_icmp_i32_sle: 86; GCN: v_cmp_le_i32_e64 87define void @v_icmp_i32_sle(i64 addrspace(1)* %out, i32 %src) { 88 %result = call i64 @llvm.amdgcn.icmp.i32(i32 %src, i32 100, i32 41) 89 store i64 %result, i64 addrspace(1)* %out 90 ret void 91} 92 93; GCN-LABEL: {{^}}v_icmp_i64_eq: 94; GCN: v_cmp_eq_u64_e64 95define void @v_icmp_i64_eq(i64 addrspace(1)* %out, i64 %src) { 96 %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 32) 97 store i64 %result, i64 addrspace(1)* %out 98 ret void 99} 100 101; GCN-LABEL: {{^}}v_icmp_i64_ne: 102; GCN: v_cmp_ne_u64_e64 103define void @v_icmp_i64_ne(i64 addrspace(1)* %out, i64 %src) { 104 %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 33) 105 store i64 %result, i64 addrspace(1)* %out 106 ret void 107} 108 109; GCN-LABEL: {{^}}v_icmp_u64_ugt: 110; GCN: v_cmp_gt_u64_e64 111define void @v_icmp_u64_ugt(i64 addrspace(1)* %out, i64 %src) { 112 %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 34) 113 store i64 %result, i64 addrspace(1)* %out 114 ret void 115} 116 117; GCN-LABEL: {{^}}v_icmp_u64_uge: 118; GCN: v_cmp_ge_u64_e64 119define void @v_icmp_u64_uge(i64 addrspace(1)* %out, i64 %src) { 120 %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 35) 121 store i64 %result, i64 addrspace(1)* %out 122 ret void 123} 124 125; GCN-LABEL: {{^}}v_icmp_u64_ult: 126; GCN: v_cmp_lt_u64_e64 127define void @v_icmp_u64_ult(i64 addrspace(1)* %out, i64 %src) { 128 %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 36) 129 store i64 %result, i64 addrspace(1)* %out 130 ret void 131} 132 133; GCN-LABEL: {{^}}v_icmp_u64_ule: 134; GCN: v_cmp_le_u64_e64 135define void @v_icmp_u64_ule(i64 addrspace(1)* %out, i64 %src) { 136 %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 37) 137 store i64 %result, i64 addrspace(1)* %out 138 ret void 139} 140 141; GCN-LABEL: {{^}}v_icmp_i64_sgt: 142; GCN: v_cmp_gt_i64_e64 143define void @v_icmp_i64_sgt(i64 addrspace(1)* %out, i64 %src) { 144 %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 38) 145 store i64 %result, i64 addrspace(1)* %out 146 ret void 147} 148 149; GCN-LABEL: {{^}}v_icmp_i64_sge: 150; GCN: v_cmp_ge_i64_e64 151define void @v_icmp_i64_sge(i64 addrspace(1)* %out, i64 %src) { 152 %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 39) 153 store i64 %result, i64 addrspace(1)* %out 154 ret void 155} 156 157; GCN-LABEL: {{^}}v_icmp_i64_slt: 158; GCN: v_cmp_lt_i64_e64 159define void @v_icmp_i64_slt(i64 addrspace(1)* %out, i64 %src) { 160 %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 40) 161 store i64 %result, i64 addrspace(1)* %out 162 ret void 163} 164; GCN-LABEL: {{^}}v_icmp_i64_sle: 165; GCN: v_cmp_le_i64_e64 166define void @v_icmp_i64_sle(i64 addrspace(1)* %out, i64 %src) { 167 %result = call i64 @llvm.amdgcn.icmp.i64(i64 %src, i64 100, i32 41) 168 store i64 %result, i64 addrspace(1)* %out 169 ret void 170} 171 172attributes #0 = { nounwind readnone convergent } 173