1467 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn -amdgpu-sdwa-peephole=0 < %s | FileCheck -check-prefix=GCN %s3 4declare i32 @llvm.amdgcn.workitem.id.x() #05 6; --------------------------------------------------------------------------------7; i32 compares8; --------------------------------------------------------------------------------9 10define amdgpu_kernel void @commute_eq_64_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {11; GCN-LABEL: commute_eq_64_i32:12; GCN: ; %bb.0:13; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x914; GCN-NEXT: s_mov_b32 s7, 0xf00015; GCN-NEXT: s_mov_b32 s6, 016; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v017; GCN-NEXT: v_mov_b32_e32 v1, 018; GCN-NEXT: s_waitcnt lgkmcnt(0)19; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]20; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr6421; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]22; GCN-NEXT: s_waitcnt vmcnt(0)23; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 64, v224; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc25; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr6426; GCN-NEXT: s_endpgm27 %tid = call i32 @llvm.amdgcn.workitem.id.x() #028 %gep.in = getelementptr i32, ptr addrspace(1) %in, i32 %tid29 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid30 %val = load i32, ptr addrspace(1) %gep.in31 %cmp = icmp eq i32 %val, 6432 %ext = sext i1 %cmp to i3233 store i32 %ext, ptr addrspace(1) %gep.out34 ret void35}36 37define amdgpu_kernel void @commute_ne_64_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {38; GCN-LABEL: commute_ne_64_i32:39; GCN: ; %bb.0:40; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x941; GCN-NEXT: s_mov_b32 s7, 0xf00042; GCN-NEXT: s_mov_b32 s6, 043; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v044; GCN-NEXT: v_mov_b32_e32 v1, 045; GCN-NEXT: s_waitcnt lgkmcnt(0)46; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]47; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr6448; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]49; GCN-NEXT: s_waitcnt vmcnt(0)50; GCN-NEXT: v_cmp_ne_u32_e32 vcc, 64, v251; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc52; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr6453; GCN-NEXT: s_endpgm54 %tid = call i32 @llvm.amdgcn.workitem.id.x() #055 %gep.in = getelementptr i32, ptr addrspace(1) %in, i32 %tid56 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid57 %val = load i32, ptr addrspace(1) %gep.in58 %cmp = icmp ne i32 %val, 6459 %ext = sext i1 %cmp to i3260 store i32 %ext, ptr addrspace(1) %gep.out61 ret void62}63 64; FIXME: Why isn't this being folded as a constant?65define amdgpu_kernel void @commute_ne_litk_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {66; GCN-LABEL: commute_ne_litk_i32:67; GCN: ; %bb.0:68; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x969; GCN-NEXT: s_mov_b32 s7, 0xf00070; GCN-NEXT: s_mov_b32 s6, 071; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v072; GCN-NEXT: v_mov_b32_e32 v1, 073; GCN-NEXT: s_waitcnt lgkmcnt(0)74; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]75; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr6476; GCN-NEXT: s_movk_i32 s4, 0x303977; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]78; GCN-NEXT: s_waitcnt vmcnt(0)79; GCN-NEXT: v_cmp_ne_u32_e32 vcc, s4, v280; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc81; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr6482; GCN-NEXT: s_endpgm83 %tid = call i32 @llvm.amdgcn.workitem.id.x() #084 %gep.in = getelementptr i32, ptr addrspace(1) %in, i32 %tid85 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid86 %val = load i32, ptr addrspace(1) %gep.in87 %cmp = icmp ne i32 %val, 1234588 %ext = sext i1 %cmp to i3289 store i32 %ext, ptr addrspace(1) %gep.out90 ret void91}92 93define amdgpu_kernel void @commute_ugt_64_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {94; GCN-LABEL: commute_ugt_64_i32:95; GCN: ; %bb.0:96; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x997; GCN-NEXT: s_mov_b32 s7, 0xf00098; GCN-NEXT: s_mov_b32 s6, 099; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0100; GCN-NEXT: v_mov_b32_e32 v1, 0101; GCN-NEXT: s_waitcnt lgkmcnt(0)102; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]103; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64104; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]105; GCN-NEXT: s_waitcnt vmcnt(0)106; GCN-NEXT: v_cmp_lt_u32_e32 vcc, 64, v2107; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc108; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64109; GCN-NEXT: s_endpgm110 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0111 %gep.in = getelementptr i32, ptr addrspace(1) %in, i32 %tid112 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid113 %val = load i32, ptr addrspace(1) %gep.in114 %cmp = icmp ugt i32 %val, 64115 %ext = sext i1 %cmp to i32116 store i32 %ext, ptr addrspace(1) %gep.out117 ret void118}119 120define amdgpu_kernel void @commute_uge_64_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {121; GCN-LABEL: commute_uge_64_i32:122; GCN: ; %bb.0:123; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9124; GCN-NEXT: s_mov_b32 s7, 0xf000125; GCN-NEXT: s_mov_b32 s6, 0126; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0127; GCN-NEXT: v_mov_b32_e32 v1, 0128; GCN-NEXT: s_waitcnt lgkmcnt(0)129; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]130; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64131; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]132; GCN-NEXT: s_waitcnt vmcnt(0)133; GCN-NEXT: v_cmp_lt_u32_e32 vcc, 63, v2134; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc135; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64136; GCN-NEXT: s_endpgm137 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0138 %gep.in = getelementptr i32, ptr addrspace(1) %in, i32 %tid139 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid140 %val = load i32, ptr addrspace(1) %gep.in141 %cmp = icmp uge i32 %val, 64142 %ext = sext i1 %cmp to i32143 store i32 %ext, ptr addrspace(1) %gep.out144 ret void145}146 147define amdgpu_kernel void @commute_ult_64_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {148; GCN-LABEL: commute_ult_64_i32:149; GCN: ; %bb.0:150; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9151; GCN-NEXT: s_mov_b32 s7, 0xf000152; GCN-NEXT: s_mov_b32 s6, 0153; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0154; GCN-NEXT: v_mov_b32_e32 v1, 0155; GCN-NEXT: s_waitcnt lgkmcnt(0)156; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]157; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64158; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]159; GCN-NEXT: s_waitcnt vmcnt(0)160; GCN-NEXT: v_cmp_gt_u32_e32 vcc, 64, v2161; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc162; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64163; GCN-NEXT: s_endpgm164 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0165 %gep.in = getelementptr i32, ptr addrspace(1) %in, i32 %tid166 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid167 %val = load i32, ptr addrspace(1) %gep.in168 %cmp = icmp ult i32 %val, 64169 %ext = sext i1 %cmp to i32170 store i32 %ext, ptr addrspace(1) %gep.out171 ret void172}173 174define amdgpu_kernel void @commute_ule_63_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {175; GCN-LABEL: commute_ule_63_i32:176; GCN: ; %bb.0:177; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9178; GCN-NEXT: s_mov_b32 s7, 0xf000179; GCN-NEXT: s_mov_b32 s6, 0180; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0181; GCN-NEXT: v_mov_b32_e32 v1, 0182; GCN-NEXT: s_waitcnt lgkmcnt(0)183; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]184; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64185; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]186; GCN-NEXT: s_waitcnt vmcnt(0)187; GCN-NEXT: v_cmp_gt_u32_e32 vcc, 64, v2188; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc189; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64190; GCN-NEXT: s_endpgm191 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0192 %gep.in = getelementptr i32, ptr addrspace(1) %in, i32 %tid193 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid194 %val = load i32, ptr addrspace(1) %gep.in195 %cmp = icmp ule i32 %val, 63196 %ext = sext i1 %cmp to i32197 store i32 %ext, ptr addrspace(1) %gep.out198 ret void199}200 201define amdgpu_kernel void @commute_ule_64_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {202; GCN-LABEL: commute_ule_64_i32:203; GCN: ; %bb.0:204; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9205; GCN-NEXT: s_mov_b32 s7, 0xf000206; GCN-NEXT: s_mov_b32 s6, 0207; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0208; GCN-NEXT: v_mov_b32_e32 v1, 0209; GCN-NEXT: s_waitcnt lgkmcnt(0)210; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]211; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64212; GCN-NEXT: s_movk_i32 s4, 0x41213; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]214; GCN-NEXT: s_waitcnt vmcnt(0)215; GCN-NEXT: v_cmp_gt_u32_e32 vcc, s4, v2216; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc217; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64218; GCN-NEXT: s_endpgm219 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0220 %gep.in = getelementptr i32, ptr addrspace(1) %in, i32 %tid221 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid222 %val = load i32, ptr addrspace(1) %gep.in223 %cmp = icmp ule i32 %val, 64224 %ext = sext i1 %cmp to i32225 store i32 %ext, ptr addrspace(1) %gep.out226 ret void227}228 229define amdgpu_kernel void @commute_sgt_neg1_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {230; GCN-LABEL: commute_sgt_neg1_i32:231; GCN: ; %bb.0:232; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9233; GCN-NEXT: s_mov_b32 s7, 0xf000234; GCN-NEXT: s_mov_b32 s6, 0235; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0236; GCN-NEXT: v_mov_b32_e32 v1, 0237; GCN-NEXT: s_waitcnt lgkmcnt(0)238; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]239; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64240; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]241; GCN-NEXT: s_waitcnt vmcnt(0)242; GCN-NEXT: v_not_b32_e32 v2, v2243; GCN-NEXT: v_ashrrev_i32_e32 v2, 31, v2244; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64245; GCN-NEXT: s_endpgm246 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0247 %gep.in = getelementptr i32, ptr addrspace(1) %in, i32 %tid248 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid249 %val = load i32, ptr addrspace(1) %gep.in250 %cmp = icmp sgt i32 %val, -1251 %ext = sext i1 %cmp to i32252 store i32 %ext, ptr addrspace(1) %gep.out253 ret void254}255 256define amdgpu_kernel void @commute_sge_neg2_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {257; GCN-LABEL: commute_sge_neg2_i32:258; GCN: ; %bb.0:259; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9260; GCN-NEXT: s_mov_b32 s7, 0xf000261; GCN-NEXT: s_mov_b32 s6, 0262; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0263; GCN-NEXT: v_mov_b32_e32 v1, 0264; GCN-NEXT: s_waitcnt lgkmcnt(0)265; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]266; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64267; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]268; GCN-NEXT: s_waitcnt vmcnt(0)269; GCN-NEXT: v_cmp_lt_i32_e32 vcc, -3, v2270; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc271; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64272; GCN-NEXT: s_endpgm273 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0274 %gep.in = getelementptr i32, ptr addrspace(1) %in, i32 %tid275 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid276 %val = load i32, ptr addrspace(1) %gep.in277 %cmp = icmp sge i32 %val, -2278 %ext = sext i1 %cmp to i32279 store i32 %ext, ptr addrspace(1) %gep.out280 ret void281}282 283define amdgpu_kernel void @commute_slt_neg16_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {284; GCN-LABEL: commute_slt_neg16_i32:285; GCN: ; %bb.0:286; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9287; GCN-NEXT: s_mov_b32 s7, 0xf000288; GCN-NEXT: s_mov_b32 s6, 0289; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0290; GCN-NEXT: v_mov_b32_e32 v1, 0291; GCN-NEXT: s_waitcnt lgkmcnt(0)292; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]293; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64294; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]295; GCN-NEXT: s_waitcnt vmcnt(0)296; GCN-NEXT: v_cmp_gt_i32_e32 vcc, -16, v2297; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc298; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64299; GCN-NEXT: s_endpgm300 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0301 %gep.in = getelementptr i32, ptr addrspace(1) %in, i32 %tid302 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid303 %val = load i32, ptr addrspace(1) %gep.in304 %cmp = icmp slt i32 %val, -16305 %ext = sext i1 %cmp to i32306 store i32 %ext, ptr addrspace(1) %gep.out307 ret void308}309 310define amdgpu_kernel void @commute_sle_5_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {311; GCN-LABEL: commute_sle_5_i32:312; GCN: ; %bb.0:313; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9314; GCN-NEXT: s_mov_b32 s7, 0xf000315; GCN-NEXT: s_mov_b32 s6, 0316; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0317; GCN-NEXT: v_mov_b32_e32 v1, 0318; GCN-NEXT: s_waitcnt lgkmcnt(0)319; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]320; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64321; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]322; GCN-NEXT: s_waitcnt vmcnt(0)323; GCN-NEXT: v_cmp_gt_i32_e32 vcc, 6, v2324; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc325; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64326; GCN-NEXT: s_endpgm327 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0328 %gep.in = getelementptr i32, ptr addrspace(1) %in, i32 %tid329 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid330 %val = load i32, ptr addrspace(1) %gep.in331 %cmp = icmp sle i32 %val, 5332 %ext = sext i1 %cmp to i32333 store i32 %ext, ptr addrspace(1) %gep.out334 ret void335}336 337; --------------------------------------------------------------------------------338; i64 compares339; --------------------------------------------------------------------------------340 341define amdgpu_kernel void @commute_eq_64_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {342; GCN-LABEL: commute_eq_64_i64:343; GCN: ; %bb.0:344; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9345; GCN-NEXT: s_mov_b32 s7, 0xf000346; GCN-NEXT: s_mov_b32 s6, 0347; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v0348; GCN-NEXT: v_mov_b32_e32 v2, 0349; GCN-NEXT: s_waitcnt lgkmcnt(0)350; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]351; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr64352; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v0353; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]354; GCN-NEXT: s_waitcnt vmcnt(0)355; GCN-NEXT: v_cmp_eq_u64_e32 vcc, 64, v[3:4]356; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc357; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr64358; GCN-NEXT: s_endpgm359 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0360 %gep.in = getelementptr i64, ptr addrspace(1) %in, i32 %tid361 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid362 %val = load i64, ptr addrspace(1) %gep.in363 %cmp = icmp eq i64 %val, 64364 %ext = sext i1 %cmp to i32365 store i32 %ext, ptr addrspace(1) %gep.out366 ret void367}368 369define amdgpu_kernel void @commute_ne_64_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {370; GCN-LABEL: commute_ne_64_i64:371; GCN: ; %bb.0:372; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9373; GCN-NEXT: s_mov_b32 s7, 0xf000374; GCN-NEXT: s_mov_b32 s6, 0375; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v0376; GCN-NEXT: v_mov_b32_e32 v2, 0377; GCN-NEXT: s_waitcnt lgkmcnt(0)378; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]379; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr64380; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v0381; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]382; GCN-NEXT: s_waitcnt vmcnt(0)383; GCN-NEXT: v_cmp_ne_u64_e32 vcc, 64, v[3:4]384; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc385; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr64386; GCN-NEXT: s_endpgm387 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0388 %gep.in = getelementptr i64, ptr addrspace(1) %in, i32 %tid389 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid390 %val = load i64, ptr addrspace(1) %gep.in391 %cmp = icmp ne i64 %val, 64392 %ext = sext i1 %cmp to i32393 store i32 %ext, ptr addrspace(1) %gep.out394 ret void395}396 397define amdgpu_kernel void @commute_ugt_64_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {398; GCN-LABEL: commute_ugt_64_i64:399; GCN: ; %bb.0:400; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9401; GCN-NEXT: s_mov_b32 s7, 0xf000402; GCN-NEXT: s_mov_b32 s6, 0403; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v0404; GCN-NEXT: v_mov_b32_e32 v2, 0405; GCN-NEXT: s_waitcnt lgkmcnt(0)406; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]407; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr64408; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v0409; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]410; GCN-NEXT: s_waitcnt vmcnt(0)411; GCN-NEXT: v_cmp_lt_u64_e32 vcc, 64, v[3:4]412; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc413; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr64414; GCN-NEXT: s_endpgm415 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0416 %gep.in = getelementptr i64, ptr addrspace(1) %in, i32 %tid417 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid418 %val = load i64, ptr addrspace(1) %gep.in419 %cmp = icmp ugt i64 %val, 64420 %ext = sext i1 %cmp to i32421 store i32 %ext, ptr addrspace(1) %gep.out422 ret void423}424 425define amdgpu_kernel void @commute_uge_64_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {426; GCN-LABEL: commute_uge_64_i64:427; GCN: ; %bb.0:428; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9429; GCN-NEXT: s_mov_b32 s7, 0xf000430; GCN-NEXT: s_mov_b32 s6, 0431; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v0432; GCN-NEXT: v_mov_b32_e32 v2, 0433; GCN-NEXT: s_waitcnt lgkmcnt(0)434; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]435; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr64436; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v0437; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]438; GCN-NEXT: s_waitcnt vmcnt(0)439; GCN-NEXT: v_cmp_lt_u64_e32 vcc, 63, v[3:4]440; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc441; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr64442; GCN-NEXT: s_endpgm443 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0444 %gep.in = getelementptr i64, ptr addrspace(1) %in, i32 %tid445 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid446 %val = load i64, ptr addrspace(1) %gep.in447 %cmp = icmp uge i64 %val, 64448 %ext = sext i1 %cmp to i32449 store i32 %ext, ptr addrspace(1) %gep.out450 ret void451}452 453define amdgpu_kernel void @commute_ult_64_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {454; GCN-LABEL: commute_ult_64_i64:455; GCN: ; %bb.0:456; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9457; GCN-NEXT: s_mov_b32 s7, 0xf000458; GCN-NEXT: s_mov_b32 s6, 0459; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v0460; GCN-NEXT: v_mov_b32_e32 v2, 0461; GCN-NEXT: s_waitcnt lgkmcnt(0)462; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]463; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr64464; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v0465; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]466; GCN-NEXT: s_waitcnt vmcnt(0)467; GCN-NEXT: v_cmp_gt_u64_e32 vcc, 64, v[3:4]468; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc469; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr64470; GCN-NEXT: s_endpgm471 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0472 %gep.in = getelementptr i64, ptr addrspace(1) %in, i32 %tid473 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid474 %val = load i64, ptr addrspace(1) %gep.in475 %cmp = icmp ult i64 %val, 64476 %ext = sext i1 %cmp to i32477 store i32 %ext, ptr addrspace(1) %gep.out478 ret void479}480 481define amdgpu_kernel void @commute_ule_63_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {482; GCN-LABEL: commute_ule_63_i64:483; GCN: ; %bb.0:484; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9485; GCN-NEXT: s_mov_b32 s7, 0xf000486; GCN-NEXT: s_mov_b32 s6, 0487; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v0488; GCN-NEXT: v_mov_b32_e32 v2, 0489; GCN-NEXT: s_waitcnt lgkmcnt(0)490; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]491; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr64492; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v0493; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]494; GCN-NEXT: s_waitcnt vmcnt(0)495; GCN-NEXT: v_cmp_gt_u64_e32 vcc, 64, v[3:4]496; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc497; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr64498; GCN-NEXT: s_endpgm499 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0500 %gep.in = getelementptr i64, ptr addrspace(1) %in, i32 %tid501 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid502 %val = load i64, ptr addrspace(1) %gep.in503 %cmp = icmp ule i64 %val, 63504 %ext = sext i1 %cmp to i32505 store i32 %ext, ptr addrspace(1) %gep.out506 ret void507}508 509; FIXME: Undo canonicalization to gt (x + 1) since it doesn't use the inline imm510 511define amdgpu_kernel void @commute_ule_64_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {512; GCN-LABEL: commute_ule_64_i64:513; GCN: ; %bb.0:514; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9515; GCN-NEXT: s_mov_b32 s7, 0xf000516; GCN-NEXT: s_mov_b32 s6, 0517; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v0518; GCN-NEXT: v_mov_b32_e32 v2, 0519; GCN-NEXT: s_waitcnt lgkmcnt(0)520; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]521; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr64522; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v0523; GCN-NEXT: s_mov_b64 s[4:5], 0x41524; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]525; GCN-NEXT: s_waitcnt vmcnt(0)526; GCN-NEXT: v_cmp_gt_u64_e32 vcc, s[4:5], v[3:4]527; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc528; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr64529; GCN-NEXT: s_endpgm530 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0531 %gep.in = getelementptr i64, ptr addrspace(1) %in, i32 %tid532 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid533 %val = load i64, ptr addrspace(1) %gep.in534 %cmp = icmp ule i64 %val, 64535 %ext = sext i1 %cmp to i32536 store i32 %ext, ptr addrspace(1) %gep.out537 ret void538}539 540define amdgpu_kernel void @commute_sgt_neg1_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {541; GCN-LABEL: commute_sgt_neg1_i64:542; GCN: ; %bb.0:543; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9544; GCN-NEXT: s_mov_b32 s7, 0xf000545; GCN-NEXT: s_mov_b32 s6, 0546; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v0547; GCN-NEXT: v_mov_b32_e32 v2, 0548; GCN-NEXT: s_waitcnt lgkmcnt(0)549; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]550; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr64551; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v0552; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]553; GCN-NEXT: s_waitcnt vmcnt(0)554; GCN-NEXT: v_cmp_lt_i64_e32 vcc, -1, v[3:4]555; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc556; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr64557; GCN-NEXT: s_endpgm558 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0559 %gep.in = getelementptr i64, ptr addrspace(1) %in, i32 %tid560 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid561 %val = load i64, ptr addrspace(1) %gep.in562 %cmp = icmp sgt i64 %val, -1563 %ext = sext i1 %cmp to i32564 store i32 %ext, ptr addrspace(1) %gep.out565 ret void566}567 568define amdgpu_kernel void @commute_sge_neg2_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {569; GCN-LABEL: commute_sge_neg2_i64:570; GCN: ; %bb.0:571; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9572; GCN-NEXT: s_mov_b32 s7, 0xf000573; GCN-NEXT: s_mov_b32 s6, 0574; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v0575; GCN-NEXT: v_mov_b32_e32 v2, 0576; GCN-NEXT: s_waitcnt lgkmcnt(0)577; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]578; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr64579; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v0580; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]581; GCN-NEXT: s_waitcnt vmcnt(0)582; GCN-NEXT: v_cmp_lt_i64_e32 vcc, -3, v[3:4]583; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc584; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr64585; GCN-NEXT: s_endpgm586 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0587 %gep.in = getelementptr i64, ptr addrspace(1) %in, i32 %tid588 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid589 %val = load i64, ptr addrspace(1) %gep.in590 %cmp = icmp sge i64 %val, -2591 %ext = sext i1 %cmp to i32592 store i32 %ext, ptr addrspace(1) %gep.out593 ret void594}595 596define amdgpu_kernel void @commute_slt_neg16_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {597; GCN-LABEL: commute_slt_neg16_i64:598; GCN: ; %bb.0:599; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9600; GCN-NEXT: s_mov_b32 s7, 0xf000601; GCN-NEXT: s_mov_b32 s6, 0602; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v0603; GCN-NEXT: v_mov_b32_e32 v2, 0604; GCN-NEXT: s_waitcnt lgkmcnt(0)605; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]606; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr64607; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v0608; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]609; GCN-NEXT: s_waitcnt vmcnt(0)610; GCN-NEXT: v_cmp_gt_i64_e32 vcc, -16, v[3:4]611; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc612; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr64613; GCN-NEXT: s_endpgm614 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0615 %gep.in = getelementptr i64, ptr addrspace(1) %in, i32 %tid616 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid617 %val = load i64, ptr addrspace(1) %gep.in618 %cmp = icmp slt i64 %val, -16619 %ext = sext i1 %cmp to i32620 store i32 %ext, ptr addrspace(1) %gep.out621 ret void622}623 624define amdgpu_kernel void @commute_sle_5_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {625; GCN-LABEL: commute_sle_5_i64:626; GCN: ; %bb.0:627; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9628; GCN-NEXT: s_mov_b32 s7, 0xf000629; GCN-NEXT: s_mov_b32 s6, 0630; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v0631; GCN-NEXT: v_mov_b32_e32 v2, 0632; GCN-NEXT: s_waitcnt lgkmcnt(0)633; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]634; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr64635; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v0636; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]637; GCN-NEXT: s_waitcnt vmcnt(0)638; GCN-NEXT: v_cmp_gt_i64_e32 vcc, 6, v[3:4]639; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc640; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr64641; GCN-NEXT: s_endpgm642 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0643 %gep.in = getelementptr i64, ptr addrspace(1) %in, i32 %tid644 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid645 %val = load i64, ptr addrspace(1) %gep.in646 %cmp = icmp sle i64 %val, 5647 %ext = sext i1 %cmp to i32648 store i32 %ext, ptr addrspace(1) %gep.out649 ret void650}651 652; --------------------------------------------------------------------------------653; f32 compares654; --------------------------------------------------------------------------------655 656define amdgpu_kernel void @commute_oeq_2.0_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {657; GCN-LABEL: commute_oeq_2.0_f32:658; GCN: ; %bb.0:659; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9660; GCN-NEXT: s_mov_b32 s7, 0xf000661; GCN-NEXT: s_mov_b32 s6, 0662; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0663; GCN-NEXT: v_mov_b32_e32 v1, 0664; GCN-NEXT: s_waitcnt lgkmcnt(0)665; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]666; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64667; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]668; GCN-NEXT: s_waitcnt vmcnt(0)669; GCN-NEXT: v_cmp_eq_f32_e32 vcc, 2.0, v2670; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc671; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64672; GCN-NEXT: s_endpgm673 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0674 %gep.in = getelementptr float, ptr addrspace(1) %in, i32 %tid675 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid676 %val = load float, ptr addrspace(1) %gep.in677 %cmp = fcmp oeq float %val, 2.0678 %ext = sext i1 %cmp to i32679 store i32 %ext, ptr addrspace(1) %gep.out680 ret void681}682 683define amdgpu_kernel void @commute_ogt_2.0_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {684; GCN-LABEL: commute_ogt_2.0_f32:685; GCN: ; %bb.0:686; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9687; GCN-NEXT: s_mov_b32 s7, 0xf000688; GCN-NEXT: s_mov_b32 s6, 0689; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0690; GCN-NEXT: v_mov_b32_e32 v1, 0691; GCN-NEXT: s_waitcnt lgkmcnt(0)692; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]693; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64694; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]695; GCN-NEXT: s_waitcnt vmcnt(0)696; GCN-NEXT: v_cmp_lt_f32_e32 vcc, 2.0, v2697; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc698; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64699; GCN-NEXT: s_endpgm700 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0701 %gep.in = getelementptr float, ptr addrspace(1) %in, i32 %tid702 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid703 %val = load float, ptr addrspace(1) %gep.in704 %cmp = fcmp ogt float %val, 2.0705 %ext = sext i1 %cmp to i32706 store i32 %ext, ptr addrspace(1) %gep.out707 ret void708}709 710define amdgpu_kernel void @commute_oge_2.0_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {711; GCN-LABEL: commute_oge_2.0_f32:712; GCN: ; %bb.0:713; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9714; GCN-NEXT: s_mov_b32 s7, 0xf000715; GCN-NEXT: s_mov_b32 s6, 0716; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0717; GCN-NEXT: v_mov_b32_e32 v1, 0718; GCN-NEXT: s_waitcnt lgkmcnt(0)719; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]720; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64721; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]722; GCN-NEXT: s_waitcnt vmcnt(0)723; GCN-NEXT: v_cmp_le_f32_e32 vcc, 2.0, v2724; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc725; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64726; GCN-NEXT: s_endpgm727 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0728 %gep.in = getelementptr float, ptr addrspace(1) %in, i32 %tid729 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid730 %val = load float, ptr addrspace(1) %gep.in731 %cmp = fcmp oge float %val, 2.0732 %ext = sext i1 %cmp to i32733 store i32 %ext, ptr addrspace(1) %gep.out734 ret void735}736 737define amdgpu_kernel void @commute_olt_2.0_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {738; GCN-LABEL: commute_olt_2.0_f32:739; GCN: ; %bb.0:740; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9741; GCN-NEXT: s_mov_b32 s7, 0xf000742; GCN-NEXT: s_mov_b32 s6, 0743; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0744; GCN-NEXT: v_mov_b32_e32 v1, 0745; GCN-NEXT: s_waitcnt lgkmcnt(0)746; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]747; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64748; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]749; GCN-NEXT: s_waitcnt vmcnt(0)750; GCN-NEXT: v_cmp_gt_f32_e32 vcc, 2.0, v2751; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc752; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64753; GCN-NEXT: s_endpgm754 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0755 %gep.in = getelementptr float, ptr addrspace(1) %in, i32 %tid756 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid757 %val = load float, ptr addrspace(1) %gep.in758 %cmp = fcmp olt float %val, 2.0759 %ext = sext i1 %cmp to i32760 store i32 %ext, ptr addrspace(1) %gep.out761 ret void762}763 764define amdgpu_kernel void @commute_ole_2.0_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {765; GCN-LABEL: commute_ole_2.0_f32:766; GCN: ; %bb.0:767; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9768; GCN-NEXT: s_mov_b32 s7, 0xf000769; GCN-NEXT: s_mov_b32 s6, 0770; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0771; GCN-NEXT: v_mov_b32_e32 v1, 0772; GCN-NEXT: s_waitcnt lgkmcnt(0)773; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]774; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64775; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]776; GCN-NEXT: s_waitcnt vmcnt(0)777; GCN-NEXT: v_cmp_ge_f32_e32 vcc, 2.0, v2778; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc779; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64780; GCN-NEXT: s_endpgm781 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0782 %gep.in = getelementptr float, ptr addrspace(1) %in, i32 %tid783 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid784 %val = load float, ptr addrspace(1) %gep.in785 %cmp = fcmp ole float %val, 2.0786 %ext = sext i1 %cmp to i32787 store i32 %ext, ptr addrspace(1) %gep.out788 ret void789}790 791define amdgpu_kernel void @commute_one_2.0_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {792; GCN-LABEL: commute_one_2.0_f32:793; GCN: ; %bb.0:794; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9795; GCN-NEXT: s_mov_b32 s7, 0xf000796; GCN-NEXT: s_mov_b32 s6, 0797; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0798; GCN-NEXT: v_mov_b32_e32 v1, 0799; GCN-NEXT: s_waitcnt lgkmcnt(0)800; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]801; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64802; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]803; GCN-NEXT: s_waitcnt vmcnt(0)804; GCN-NEXT: v_cmp_lg_f32_e32 vcc, 2.0, v2805; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc806; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64807; GCN-NEXT: s_endpgm808 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0809 %gep.in = getelementptr float, ptr addrspace(1) %in, i32 %tid810 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid811 %val = load float, ptr addrspace(1) %gep.in812 %cmp = fcmp one float %val, 2.0813 %ext = sext i1 %cmp to i32814 store i32 %ext, ptr addrspace(1) %gep.out815 ret void816}817 818define amdgpu_kernel void @commute_ord_2.0_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {819; GCN-LABEL: commute_ord_2.0_f32:820; GCN: ; %bb.0:821; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9822; GCN-NEXT: s_mov_b32 s7, 0xf000823; GCN-NEXT: s_mov_b32 s6, 0824; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0825; GCN-NEXT: v_mov_b32_e32 v1, 0826; GCN-NEXT: s_waitcnt lgkmcnt(0)827; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]828; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64829; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]830; GCN-NEXT: s_waitcnt vmcnt(0)831; GCN-NEXT: v_cmp_o_f32_e32 vcc, v2, v2832; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc833; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64834; GCN-NEXT: s_endpgm835 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0836 %gep.in = getelementptr float, ptr addrspace(1) %in, i32 %tid837 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid838 %val = load float, ptr addrspace(1) %gep.in839 %cmp = fcmp ord float %val, 2.0840 %ext = sext i1 %cmp to i32841 store i32 %ext, ptr addrspace(1) %gep.out842 ret void843}844 845define amdgpu_kernel void @commute_ueq_2.0_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {846; GCN-LABEL: commute_ueq_2.0_f32:847; GCN: ; %bb.0:848; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9849; GCN-NEXT: s_mov_b32 s7, 0xf000850; GCN-NEXT: s_mov_b32 s6, 0851; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0852; GCN-NEXT: v_mov_b32_e32 v1, 0853; GCN-NEXT: s_waitcnt lgkmcnt(0)854; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]855; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64856; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]857; GCN-NEXT: s_waitcnt vmcnt(0)858; GCN-NEXT: v_cmp_nlg_f32_e32 vcc, 2.0, v2859; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc860; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64861; GCN-NEXT: s_endpgm862 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0863 %gep.in = getelementptr float, ptr addrspace(1) %in, i32 %tid864 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid865 %val = load float, ptr addrspace(1) %gep.in866 %cmp = fcmp ueq float %val, 2.0867 %ext = sext i1 %cmp to i32868 store i32 %ext, ptr addrspace(1) %gep.out869 ret void870}871 872define amdgpu_kernel void @commute_ugt_2.0_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {873; GCN-LABEL: commute_ugt_2.0_f32:874; GCN: ; %bb.0:875; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9876; GCN-NEXT: s_mov_b32 s7, 0xf000877; GCN-NEXT: s_mov_b32 s6, 0878; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0879; GCN-NEXT: v_mov_b32_e32 v1, 0880; GCN-NEXT: s_waitcnt lgkmcnt(0)881; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]882; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64883; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]884; GCN-NEXT: s_waitcnt vmcnt(0)885; GCN-NEXT: v_cmp_nge_f32_e32 vcc, 2.0, v2886; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc887; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64888; GCN-NEXT: s_endpgm889 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0890 %gep.in = getelementptr float, ptr addrspace(1) %in, i32 %tid891 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid892 %val = load float, ptr addrspace(1) %gep.in893 %cmp = fcmp ugt float %val, 2.0894 %ext = sext i1 %cmp to i32895 store i32 %ext, ptr addrspace(1) %gep.out896 ret void897}898 899define amdgpu_kernel void @commute_uge_2.0_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {900; GCN-LABEL: commute_uge_2.0_f32:901; GCN: ; %bb.0:902; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9903; GCN-NEXT: s_mov_b32 s7, 0xf000904; GCN-NEXT: s_mov_b32 s6, 0905; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0906; GCN-NEXT: v_mov_b32_e32 v1, 0907; GCN-NEXT: s_waitcnt lgkmcnt(0)908; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]909; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64910; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]911; GCN-NEXT: s_waitcnt vmcnt(0)912; GCN-NEXT: v_cmp_ngt_f32_e32 vcc, 2.0, v2913; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc914; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64915; GCN-NEXT: s_endpgm916 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0917 %gep.in = getelementptr float, ptr addrspace(1) %in, i32 %tid918 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid919 %val = load float, ptr addrspace(1) %gep.in920 %cmp = fcmp uge float %val, 2.0921 %ext = sext i1 %cmp to i32922 store i32 %ext, ptr addrspace(1) %gep.out923 ret void924}925 926define amdgpu_kernel void @commute_ult_2.0_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {927; GCN-LABEL: commute_ult_2.0_f32:928; GCN: ; %bb.0:929; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9930; GCN-NEXT: s_mov_b32 s7, 0xf000931; GCN-NEXT: s_mov_b32 s6, 0932; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0933; GCN-NEXT: v_mov_b32_e32 v1, 0934; GCN-NEXT: s_waitcnt lgkmcnt(0)935; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]936; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64937; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]938; GCN-NEXT: s_waitcnt vmcnt(0)939; GCN-NEXT: v_cmp_nle_f32_e32 vcc, 2.0, v2940; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc941; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64942; GCN-NEXT: s_endpgm943 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0944 %gep.in = getelementptr float, ptr addrspace(1) %in, i32 %tid945 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid946 %val = load float, ptr addrspace(1) %gep.in947 %cmp = fcmp ult float %val, 2.0948 %ext = sext i1 %cmp to i32949 store i32 %ext, ptr addrspace(1) %gep.out950 ret void951}952 953define amdgpu_kernel void @commute_ule_2.0_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {954; GCN-LABEL: commute_ule_2.0_f32:955; GCN: ; %bb.0:956; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9957; GCN-NEXT: s_mov_b32 s7, 0xf000958; GCN-NEXT: s_mov_b32 s6, 0959; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0960; GCN-NEXT: v_mov_b32_e32 v1, 0961; GCN-NEXT: s_waitcnt lgkmcnt(0)962; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]963; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64964; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]965; GCN-NEXT: s_waitcnt vmcnt(0)966; GCN-NEXT: v_cmp_nlt_f32_e32 vcc, 2.0, v2967; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc968; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64969; GCN-NEXT: s_endpgm970 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0971 %gep.in = getelementptr float, ptr addrspace(1) %in, i32 %tid972 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid973 %val = load float, ptr addrspace(1) %gep.in974 %cmp = fcmp ule float %val, 2.0975 %ext = sext i1 %cmp to i32976 store i32 %ext, ptr addrspace(1) %gep.out977 ret void978}979 980define amdgpu_kernel void @commute_une_2.0_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {981; GCN-LABEL: commute_une_2.0_f32:982; GCN: ; %bb.0:983; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9984; GCN-NEXT: s_mov_b32 s7, 0xf000985; GCN-NEXT: s_mov_b32 s6, 0986; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v0987; GCN-NEXT: v_mov_b32_e32 v1, 0988; GCN-NEXT: s_waitcnt lgkmcnt(0)989; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]990; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr64991; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]992; GCN-NEXT: s_waitcnt vmcnt(0)993; GCN-NEXT: v_cmp_neq_f32_e32 vcc, 2.0, v2994; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc995; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr64996; GCN-NEXT: s_endpgm997 %tid = call i32 @llvm.amdgcn.workitem.id.x() #0998 %gep.in = getelementptr float, ptr addrspace(1) %in, i32 %tid999 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid1000 %val = load float, ptr addrspace(1) %gep.in1001 %cmp = fcmp une float %val, 2.01002 %ext = sext i1 %cmp to i321003 store i32 %ext, ptr addrspace(1) %gep.out1004 ret void1005}1006 1007define amdgpu_kernel void @commute_uno_2.0_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {1008; GCN-LABEL: commute_uno_2.0_f32:1009; GCN: ; %bb.0:1010; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91011; GCN-NEXT: s_mov_b32 s7, 0xf0001012; GCN-NEXT: s_mov_b32 s6, 01013; GCN-NEXT: v_lshlrev_b32_e32 v0, 2, v01014; GCN-NEXT: v_mov_b32_e32 v1, 01015; GCN-NEXT: s_waitcnt lgkmcnt(0)1016; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]1017; GCN-NEXT: buffer_load_dword v2, v[0:1], s[4:7], 0 addr641018; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]1019; GCN-NEXT: s_waitcnt vmcnt(0)1020; GCN-NEXT: v_cmp_u_f32_e32 vcc, v2, v21021; GCN-NEXT: v_cndmask_b32_e64 v2, 0, -1, vcc1022; GCN-NEXT: buffer_store_dword v2, v[0:1], s[0:3], 0 addr641023; GCN-NEXT: s_endpgm1024 %tid = call i32 @llvm.amdgcn.workitem.id.x() #01025 %gep.in = getelementptr float, ptr addrspace(1) %in, i32 %tid1026 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid1027 %val = load float, ptr addrspace(1) %gep.in1028 %cmp = fcmp uno float %val, 2.01029 %ext = sext i1 %cmp to i321030 store i32 %ext, ptr addrspace(1) %gep.out1031 ret void1032}1033 1034; --------------------------------------------------------------------------------1035; f64 compares1036; --------------------------------------------------------------------------------1037 1038define amdgpu_kernel void @commute_oeq_2.0_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {1039; GCN-LABEL: commute_oeq_2.0_f64:1040; GCN: ; %bb.0:1041; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91042; GCN-NEXT: s_mov_b32 s7, 0xf0001043; GCN-NEXT: s_mov_b32 s6, 01044; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v01045; GCN-NEXT: v_mov_b32_e32 v2, 01046; GCN-NEXT: s_waitcnt lgkmcnt(0)1047; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]1048; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr641049; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v01050; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]1051; GCN-NEXT: s_waitcnt vmcnt(0)1052; GCN-NEXT: v_cmp_eq_f64_e32 vcc, 2.0, v[3:4]1053; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc1054; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr641055; GCN-NEXT: s_endpgm1056 %tid = call i32 @llvm.amdgcn.workitem.id.x() #01057 %gep.in = getelementptr double, ptr addrspace(1) %in, i32 %tid1058 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid1059 %val = load double, ptr addrspace(1) %gep.in1060 %cmp = fcmp oeq double %val, 2.01061 %ext = sext i1 %cmp to i321062 store i32 %ext, ptr addrspace(1) %gep.out1063 ret void1064}1065 1066define amdgpu_kernel void @commute_ogt_2.0_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {1067; GCN-LABEL: commute_ogt_2.0_f64:1068; GCN: ; %bb.0:1069; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91070; GCN-NEXT: s_mov_b32 s7, 0xf0001071; GCN-NEXT: s_mov_b32 s6, 01072; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v01073; GCN-NEXT: v_mov_b32_e32 v2, 01074; GCN-NEXT: s_waitcnt lgkmcnt(0)1075; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]1076; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr641077; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v01078; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]1079; GCN-NEXT: s_waitcnt vmcnt(0)1080; GCN-NEXT: v_cmp_lt_f64_e32 vcc, 2.0, v[3:4]1081; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc1082; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr641083; GCN-NEXT: s_endpgm1084 %tid = call i32 @llvm.amdgcn.workitem.id.x() #01085 %gep.in = getelementptr double, ptr addrspace(1) %in, i32 %tid1086 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid1087 %val = load double, ptr addrspace(1) %gep.in1088 %cmp = fcmp ogt double %val, 2.01089 %ext = sext i1 %cmp to i321090 store i32 %ext, ptr addrspace(1) %gep.out1091 ret void1092}1093 1094define amdgpu_kernel void @commute_oge_2.0_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {1095; GCN-LABEL: commute_oge_2.0_f64:1096; GCN: ; %bb.0:1097; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91098; GCN-NEXT: s_mov_b32 s7, 0xf0001099; GCN-NEXT: s_mov_b32 s6, 01100; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v01101; GCN-NEXT: v_mov_b32_e32 v2, 01102; GCN-NEXT: s_waitcnt lgkmcnt(0)1103; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]1104; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr641105; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v01106; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]1107; GCN-NEXT: s_waitcnt vmcnt(0)1108; GCN-NEXT: v_cmp_le_f64_e32 vcc, 2.0, v[3:4]1109; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc1110; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr641111; GCN-NEXT: s_endpgm1112 %tid = call i32 @llvm.amdgcn.workitem.id.x() #01113 %gep.in = getelementptr double, ptr addrspace(1) %in, i32 %tid1114 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid1115 %val = load double, ptr addrspace(1) %gep.in1116 %cmp = fcmp oge double %val, 2.01117 %ext = sext i1 %cmp to i321118 store i32 %ext, ptr addrspace(1) %gep.out1119 ret void1120}1121 1122define amdgpu_kernel void @commute_olt_2.0_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {1123; GCN-LABEL: commute_olt_2.0_f64:1124; GCN: ; %bb.0:1125; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91126; GCN-NEXT: s_mov_b32 s7, 0xf0001127; GCN-NEXT: s_mov_b32 s6, 01128; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v01129; GCN-NEXT: v_mov_b32_e32 v2, 01130; GCN-NEXT: s_waitcnt lgkmcnt(0)1131; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]1132; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr641133; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v01134; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]1135; GCN-NEXT: s_waitcnt vmcnt(0)1136; GCN-NEXT: v_cmp_gt_f64_e32 vcc, 2.0, v[3:4]1137; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc1138; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr641139; GCN-NEXT: s_endpgm1140 %tid = call i32 @llvm.amdgcn.workitem.id.x() #01141 %gep.in = getelementptr double, ptr addrspace(1) %in, i32 %tid1142 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid1143 %val = load double, ptr addrspace(1) %gep.in1144 %cmp = fcmp olt double %val, 2.01145 %ext = sext i1 %cmp to i321146 store i32 %ext, ptr addrspace(1) %gep.out1147 ret void1148}1149 1150define amdgpu_kernel void @commute_ole_2.0_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {1151; GCN-LABEL: commute_ole_2.0_f64:1152; GCN: ; %bb.0:1153; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91154; GCN-NEXT: s_mov_b32 s7, 0xf0001155; GCN-NEXT: s_mov_b32 s6, 01156; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v01157; GCN-NEXT: v_mov_b32_e32 v2, 01158; GCN-NEXT: s_waitcnt lgkmcnt(0)1159; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]1160; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr641161; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v01162; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]1163; GCN-NEXT: s_waitcnt vmcnt(0)1164; GCN-NEXT: v_cmp_ge_f64_e32 vcc, 2.0, v[3:4]1165; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc1166; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr641167; GCN-NEXT: s_endpgm1168 %tid = call i32 @llvm.amdgcn.workitem.id.x() #01169 %gep.in = getelementptr double, ptr addrspace(1) %in, i32 %tid1170 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid1171 %val = load double, ptr addrspace(1) %gep.in1172 %cmp = fcmp ole double %val, 2.01173 %ext = sext i1 %cmp to i321174 store i32 %ext, ptr addrspace(1) %gep.out1175 ret void1176}1177 1178define amdgpu_kernel void @commute_one_2.0_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {1179; GCN-LABEL: commute_one_2.0_f64:1180; GCN: ; %bb.0:1181; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91182; GCN-NEXT: s_mov_b32 s7, 0xf0001183; GCN-NEXT: s_mov_b32 s6, 01184; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v01185; GCN-NEXT: v_mov_b32_e32 v2, 01186; GCN-NEXT: s_waitcnt lgkmcnt(0)1187; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]1188; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr641189; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v01190; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]1191; GCN-NEXT: s_waitcnt vmcnt(0)1192; GCN-NEXT: v_cmp_lg_f64_e32 vcc, 2.0, v[3:4]1193; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc1194; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr641195; GCN-NEXT: s_endpgm1196 %tid = call i32 @llvm.amdgcn.workitem.id.x() #01197 %gep.in = getelementptr double, ptr addrspace(1) %in, i32 %tid1198 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid1199 %val = load double, ptr addrspace(1) %gep.in1200 %cmp = fcmp one double %val, 2.01201 %ext = sext i1 %cmp to i321202 store i32 %ext, ptr addrspace(1) %gep.out1203 ret void1204}1205 1206define amdgpu_kernel void @commute_ord_2.0_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {1207; GCN-LABEL: commute_ord_2.0_f64:1208; GCN: ; %bb.0:1209; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91210; GCN-NEXT: s_mov_b32 s7, 0xf0001211; GCN-NEXT: s_mov_b32 s6, 01212; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v01213; GCN-NEXT: v_mov_b32_e32 v2, 01214; GCN-NEXT: s_waitcnt lgkmcnt(0)1215; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]1216; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr641217; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v01218; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]1219; GCN-NEXT: s_waitcnt vmcnt(0)1220; GCN-NEXT: v_cmp_o_f64_e32 vcc, v[3:4], v[3:4]1221; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc1222; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr641223; GCN-NEXT: s_endpgm1224 %tid = call i32 @llvm.amdgcn.workitem.id.x() #01225 %gep.in = getelementptr double, ptr addrspace(1) %in, i32 %tid1226 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid1227 %val = load double, ptr addrspace(1) %gep.in1228 %cmp = fcmp ord double %val, 2.01229 %ext = sext i1 %cmp to i321230 store i32 %ext, ptr addrspace(1) %gep.out1231 ret void1232}1233 1234define amdgpu_kernel void @commute_ueq_2.0_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {1235; GCN-LABEL: commute_ueq_2.0_f64:1236; GCN: ; %bb.0:1237; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91238; GCN-NEXT: s_mov_b32 s7, 0xf0001239; GCN-NEXT: s_mov_b32 s6, 01240; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v01241; GCN-NEXT: v_mov_b32_e32 v2, 01242; GCN-NEXT: s_waitcnt lgkmcnt(0)1243; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]1244; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr641245; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v01246; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]1247; GCN-NEXT: s_waitcnt vmcnt(0)1248; GCN-NEXT: v_cmp_nlg_f64_e32 vcc, 2.0, v[3:4]1249; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc1250; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr641251; GCN-NEXT: s_endpgm1252 %tid = call i32 @llvm.amdgcn.workitem.id.x() #01253 %gep.in = getelementptr double, ptr addrspace(1) %in, i32 %tid1254 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid1255 %val = load double, ptr addrspace(1) %gep.in1256 %cmp = fcmp ueq double %val, 2.01257 %ext = sext i1 %cmp to i321258 store i32 %ext, ptr addrspace(1) %gep.out1259 ret void1260}1261 1262define amdgpu_kernel void @commute_ugt_2.0_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {1263; GCN-LABEL: commute_ugt_2.0_f64:1264; GCN: ; %bb.0:1265; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91266; GCN-NEXT: s_mov_b32 s7, 0xf0001267; GCN-NEXT: s_mov_b32 s6, 01268; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v01269; GCN-NEXT: v_mov_b32_e32 v2, 01270; GCN-NEXT: s_waitcnt lgkmcnt(0)1271; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]1272; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr641273; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v01274; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]1275; GCN-NEXT: s_waitcnt vmcnt(0)1276; GCN-NEXT: v_cmp_nge_f64_e32 vcc, 2.0, v[3:4]1277; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc1278; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr641279; GCN-NEXT: s_endpgm1280 %tid = call i32 @llvm.amdgcn.workitem.id.x() #01281 %gep.in = getelementptr double, ptr addrspace(1) %in, i32 %tid1282 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid1283 %val = load double, ptr addrspace(1) %gep.in1284 %cmp = fcmp ugt double %val, 2.01285 %ext = sext i1 %cmp to i321286 store i32 %ext, ptr addrspace(1) %gep.out1287 ret void1288}1289 1290define amdgpu_kernel void @commute_uge_2.0_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {1291; GCN-LABEL: commute_uge_2.0_f64:1292; GCN: ; %bb.0:1293; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91294; GCN-NEXT: s_mov_b32 s7, 0xf0001295; GCN-NEXT: s_mov_b32 s6, 01296; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v01297; GCN-NEXT: v_mov_b32_e32 v2, 01298; GCN-NEXT: s_waitcnt lgkmcnt(0)1299; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]1300; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr641301; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v01302; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]1303; GCN-NEXT: s_waitcnt vmcnt(0)1304; GCN-NEXT: v_cmp_ngt_f64_e32 vcc, 2.0, v[3:4]1305; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc1306; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr641307; GCN-NEXT: s_endpgm1308 %tid = call i32 @llvm.amdgcn.workitem.id.x() #01309 %gep.in = getelementptr double, ptr addrspace(1) %in, i32 %tid1310 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid1311 %val = load double, ptr addrspace(1) %gep.in1312 %cmp = fcmp uge double %val, 2.01313 %ext = sext i1 %cmp to i321314 store i32 %ext, ptr addrspace(1) %gep.out1315 ret void1316}1317 1318define amdgpu_kernel void @commute_ult_2.0_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {1319; GCN-LABEL: commute_ult_2.0_f64:1320; GCN: ; %bb.0:1321; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91322; GCN-NEXT: s_mov_b32 s7, 0xf0001323; GCN-NEXT: s_mov_b32 s6, 01324; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v01325; GCN-NEXT: v_mov_b32_e32 v2, 01326; GCN-NEXT: s_waitcnt lgkmcnt(0)1327; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]1328; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr641329; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v01330; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]1331; GCN-NEXT: s_waitcnt vmcnt(0)1332; GCN-NEXT: v_cmp_nle_f64_e32 vcc, 2.0, v[3:4]1333; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc1334; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr641335; GCN-NEXT: s_endpgm1336 %tid = call i32 @llvm.amdgcn.workitem.id.x() #01337 %gep.in = getelementptr double, ptr addrspace(1) %in, i32 %tid1338 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid1339 %val = load double, ptr addrspace(1) %gep.in1340 %cmp = fcmp ult double %val, 2.01341 %ext = sext i1 %cmp to i321342 store i32 %ext, ptr addrspace(1) %gep.out1343 ret void1344}1345 1346define amdgpu_kernel void @commute_ule_2.0_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {1347; GCN-LABEL: commute_ule_2.0_f64:1348; GCN: ; %bb.0:1349; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91350; GCN-NEXT: s_mov_b32 s7, 0xf0001351; GCN-NEXT: s_mov_b32 s6, 01352; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v01353; GCN-NEXT: v_mov_b32_e32 v2, 01354; GCN-NEXT: s_waitcnt lgkmcnt(0)1355; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]1356; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr641357; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v01358; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]1359; GCN-NEXT: s_waitcnt vmcnt(0)1360; GCN-NEXT: v_cmp_nlt_f64_e32 vcc, 2.0, v[3:4]1361; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc1362; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr641363; GCN-NEXT: s_endpgm1364 %tid = call i32 @llvm.amdgcn.workitem.id.x() #01365 %gep.in = getelementptr double, ptr addrspace(1) %in, i32 %tid1366 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid1367 %val = load double, ptr addrspace(1) %gep.in1368 %cmp = fcmp ule double %val, 2.01369 %ext = sext i1 %cmp to i321370 store i32 %ext, ptr addrspace(1) %gep.out1371 ret void1372}1373 1374define amdgpu_kernel void @commute_une_2.0_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {1375; GCN-LABEL: commute_une_2.0_f64:1376; GCN: ; %bb.0:1377; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91378; GCN-NEXT: s_mov_b32 s7, 0xf0001379; GCN-NEXT: s_mov_b32 s6, 01380; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v01381; GCN-NEXT: v_mov_b32_e32 v2, 01382; GCN-NEXT: s_waitcnt lgkmcnt(0)1383; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]1384; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr641385; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v01386; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]1387; GCN-NEXT: s_waitcnt vmcnt(0)1388; GCN-NEXT: v_cmp_neq_f64_e32 vcc, 2.0, v[3:4]1389; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc1390; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr641391; GCN-NEXT: s_endpgm1392 %tid = call i32 @llvm.amdgcn.workitem.id.x() #01393 %gep.in = getelementptr double, ptr addrspace(1) %in, i32 %tid1394 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid1395 %val = load double, ptr addrspace(1) %gep.in1396 %cmp = fcmp une double %val, 2.01397 %ext = sext i1 %cmp to i321398 store i32 %ext, ptr addrspace(1) %gep.out1399 ret void1400}1401 1402define amdgpu_kernel void @commute_uno_2.0_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {1403; GCN-LABEL: commute_uno_2.0_f64:1404; GCN: ; %bb.0:1405; GCN-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x91406; GCN-NEXT: s_mov_b32 s7, 0xf0001407; GCN-NEXT: s_mov_b32 s6, 01408; GCN-NEXT: v_lshlrev_b32_e32 v1, 3, v01409; GCN-NEXT: v_mov_b32_e32 v2, 01410; GCN-NEXT: s_waitcnt lgkmcnt(0)1411; GCN-NEXT: s_mov_b64 s[4:5], s[2:3]1412; GCN-NEXT: buffer_load_dwordx2 v[3:4], v[1:2], s[4:7], 0 addr641413; GCN-NEXT: v_lshlrev_b32_e32 v1, 2, v01414; GCN-NEXT: s_mov_b64 s[2:3], s[6:7]1415; GCN-NEXT: s_waitcnt vmcnt(0)1416; GCN-NEXT: v_cmp_u_f64_e32 vcc, v[3:4], v[3:4]1417; GCN-NEXT: v_cndmask_b32_e64 v0, 0, -1, vcc1418; GCN-NEXT: buffer_store_dword v0, v[1:2], s[0:3], 0 addr641419; GCN-NEXT: s_endpgm1420 %tid = call i32 @llvm.amdgcn.workitem.id.x() #01421 %gep.in = getelementptr double, ptr addrspace(1) %in, i32 %tid1422 %gep.out = getelementptr i32, ptr addrspace(1) %out, i32 %tid1423 %val = load double, ptr addrspace(1) %gep.in1424 %cmp = fcmp uno double %val, 2.01425 %ext = sext i1 %cmp to i321426 store i32 %ext, ptr addrspace(1) %gep.out1427 ret void1428}1429 1430 1431; FIXME: Should be able to fold this frameindex1432; Without commuting the frame index in the pre-regalloc run of1433; SIShrinkInstructions, this was using the VOP3 compare.1434 1435define amdgpu_kernel void @commute_frameindex(ptr addrspace(1) nocapture %out) #0 {1436; GCN-LABEL: commute_frameindex:1437; GCN: ; %bb.0: ; %entry1438; GCN-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD01439; GCN-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD11440; GCN-NEXT: s_mov_b32 s14, -11441; GCN-NEXT: s_mov_b32 s15, 0xe8f0001442; GCN-NEXT: s_add_u32 s12, s12, s111443; GCN-NEXT: s_addc_u32 s13, s13, 01444; GCN-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x91445; GCN-NEXT: s_mov_b32 s3, 0xf0001446; GCN-NEXT: s_mov_b32 s2, -11447; GCN-NEXT: s_waitcnt lgkmcnt(0)1448; GCN-NEXT: buffer_load_dword v0, off, s[0:3], 0 glc1449; GCN-NEXT: s_waitcnt vmcnt(0)1450; GCN-NEXT: s_mov_b32 s4, 01451; GCN-NEXT: v_cmp_eq_u32_e32 vcc, s4, v01452; GCN-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1453; GCN-NEXT: buffer_store_dword v0, off, s[0:3], 01454; GCN-NEXT: s_waitcnt vmcnt(0)1455; GCN-NEXT: s_endpgm1456entry:1457 %stack0 = alloca i32, addrspace(5)1458 %ptr0 = load volatile ptr addrspace(5), ptr addrspace(1) poison1459 %eq = icmp eq ptr addrspace(5) %ptr0, %stack01460 %ext = zext i1 %eq to i321461 store volatile i32 %ext, ptr addrspace(1) %out1462 ret void1463}1464 1465attributes #0 = { nounwind readnone }1466attributes #1 = { nounwind }1467