brintos

brintos / llvm-project-archived public Read only

0
0
Text · 57.7 KiB · ce46094 Raw
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