525 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc -mtriple=amdgcn-amdhsa -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck -check-prefix=GCN %s3; RUN: opt -S -si-annotate-control-flow -mtriple=amdgcn-amdhsa -simplifycfg-require-and-preserve-domtree=1 < %s | FileCheck -check-prefix=SI-OPT %s4 5define hidden void @widget() {6; GCN-LABEL: widget:7; GCN: ; %bb.0: ; %bb8; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9; GCN-NEXT: s_mov_b32 s16, s3310; GCN-NEXT: s_mov_b32 s33, s3211; GCN-NEXT: s_or_saveexec_b64 s[18:19], -112; GCN-NEXT: buffer_store_dword v41, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill13; GCN-NEXT: s_mov_b64 exec, s[18:19]14; GCN-NEXT: v_writelane_b32 v41, s16, 1615; GCN-NEXT: s_addk_i32 s32, 0x40016; GCN-NEXT: buffer_store_dword v40, off, s[0:3], s33 ; 4-byte Folded Spill17; GCN-NEXT: v_writelane_b32 v41, s30, 018; GCN-NEXT: v_writelane_b32 v41, s31, 119; GCN-NEXT: v_writelane_b32 v41, s34, 220; GCN-NEXT: v_writelane_b32 v41, s35, 321; GCN-NEXT: v_writelane_b32 v41, s36, 422; GCN-NEXT: v_writelane_b32 v41, s37, 523; GCN-NEXT: v_writelane_b32 v41, s38, 624; GCN-NEXT: v_writelane_b32 v41, s39, 725; GCN-NEXT: v_writelane_b32 v41, s48, 826; GCN-NEXT: v_writelane_b32 v41, s49, 927; GCN-NEXT: v_writelane_b32 v41, s50, 1028; GCN-NEXT: v_writelane_b32 v41, s51, 1129; GCN-NEXT: v_writelane_b32 v41, s52, 1230; GCN-NEXT: v_writelane_b32 v41, s53, 1331; GCN-NEXT: v_writelane_b32 v41, s54, 1432; GCN-NEXT: v_writelane_b32 v41, s55, 1533; GCN-NEXT: v_mov_b32_e32 v0, 034; GCN-NEXT: v_mov_b32_e32 v1, 035; GCN-NEXT: flat_load_dword v0, v[0:1]36; GCN-NEXT: s_mov_b64 s[20:21], -137; GCN-NEXT: s_mov_b64 s[16:17], 038; GCN-NEXT: s_waitcnt vmcnt(0)39; GCN-NEXT: v_cmp_gt_i32_e32 vcc, 21, v040; GCN-NEXT: s_mov_b64 s[54:55], 041; GCN-NEXT: s_mov_b64 s[18:19], 042; GCN-NEXT: s_cbranch_vccz .LBB0_943; GCN-NEXT: ; %bb.1: ; %Flow44; GCN-NEXT: s_andn2_b64 vcc, exec, s[20:21]45; GCN-NEXT: s_cbranch_vccz .LBB0_1046; GCN-NEXT: .LBB0_2: ; %Flow147; GCN-NEXT: s_andn2_b64 vcc, exec, s[18:19]48; GCN-NEXT: s_cbranch_vccnz .LBB0_449; GCN-NEXT: .LBB0_3: ; %bb950; GCN-NEXT: s_getpc_b64 s[16:17]51; GCN-NEXT: s_add_u32 s16, s16, wibble@rel32@lo+452; GCN-NEXT: s_addc_u32 s17, s17, wibble@rel32@hi+1253; GCN-NEXT: s_mov_b64 s[34:35], s[4:5]54; GCN-NEXT: s_mov_b64 s[36:37], s[6:7]55; GCN-NEXT: s_mov_b64 s[38:39], s[8:9]56; GCN-NEXT: s_mov_b64 s[48:49], s[10:11]57; GCN-NEXT: s_mov_b32 s50, s1258; GCN-NEXT: s_mov_b32 s51, s1359; GCN-NEXT: s_mov_b32 s52, s1460; GCN-NEXT: s_mov_b32 s53, s1561; GCN-NEXT: v_mov_b32_e32 v40, v3162; GCN-NEXT: s_swappc_b64 s[30:31], s[16:17]63; GCN-NEXT: v_mov_b32_e32 v31, v4064; GCN-NEXT: s_mov_b32 s12, s5065; GCN-NEXT: s_mov_b32 s13, s5166; GCN-NEXT: s_mov_b32 s14, s5267; GCN-NEXT: s_mov_b32 s15, s5368; GCN-NEXT: s_mov_b64 s[4:5], s[34:35]69; GCN-NEXT: s_mov_b64 s[6:7], s[36:37]70; GCN-NEXT: s_mov_b64 s[8:9], s[38:39]71; GCN-NEXT: s_mov_b64 s[10:11], s[48:49]72; GCN-NEXT: v_cmp_nlt_f32_e32 vcc, 0, v073; GCN-NEXT: s_mov_b64 s[16:17], 074; GCN-NEXT: s_andn2_b64 s[18:19], s[54:55], exec75; GCN-NEXT: s_and_b64 s[20:21], vcc, exec76; GCN-NEXT: s_or_b64 s[54:55], s[18:19], s[20:21]77; GCN-NEXT: .LBB0_4: ; %Flow278; GCN-NEXT: s_and_saveexec_b64 s[18:19], s[54:55]79; GCN-NEXT: s_xor_b64 s[18:19], exec, s[18:19]80; GCN-NEXT: s_cbranch_execz .LBB0_681; GCN-NEXT: ; %bb.5: ; %bb1282; GCN-NEXT: v_mov_b32_e32 v2, 083; GCN-NEXT: v_mov_b32_e32 v0, 084; GCN-NEXT: v_mov_b32_e32 v1, 085; GCN-NEXT: flat_store_dword v[0:1], v286; GCN-NEXT: .LBB0_6: ; %Flow387; GCN-NEXT: s_or_b64 exec, exec, s[18:19]88; GCN-NEXT: s_andn2_b64 vcc, exec, s[16:17]89; GCN-NEXT: s_cbranch_vccnz .LBB0_890; GCN-NEXT: ; %bb.7: ; %bb791; GCN-NEXT: s_getpc_b64 s[16:17]92; GCN-NEXT: s_add_u32 s16, s16, wibble@rel32@lo+493; GCN-NEXT: s_addc_u32 s17, s17, wibble@rel32@hi+1294; GCN-NEXT: s_swappc_b64 s[30:31], s[16:17]95; GCN-NEXT: .LBB0_8: ; %UnifiedReturnBlock96; GCN-NEXT: v_readlane_b32 s55, v41, 1597; GCN-NEXT: v_readlane_b32 s54, v41, 1498; GCN-NEXT: v_readlane_b32 s53, v41, 1399; GCN-NEXT: v_readlane_b32 s52, v41, 12100; GCN-NEXT: v_readlane_b32 s51, v41, 11101; GCN-NEXT: v_readlane_b32 s50, v41, 10102; GCN-NEXT: v_readlane_b32 s49, v41, 9103; GCN-NEXT: v_readlane_b32 s48, v41, 8104; GCN-NEXT: v_readlane_b32 s39, v41, 7105; GCN-NEXT: v_readlane_b32 s38, v41, 6106; GCN-NEXT: v_readlane_b32 s37, v41, 5107; GCN-NEXT: v_readlane_b32 s36, v41, 4108; GCN-NEXT: v_readlane_b32 s35, v41, 3109; GCN-NEXT: v_readlane_b32 s34, v41, 2110; GCN-NEXT: v_readlane_b32 s31, v41, 1111; GCN-NEXT: v_readlane_b32 s30, v41, 0112; GCN-NEXT: buffer_load_dword v40, off, s[0:3], s33 ; 4-byte Folded Reload113; GCN-NEXT: s_mov_b32 s32, s33114; GCN-NEXT: v_readlane_b32 s4, v41, 16115; GCN-NEXT: s_or_saveexec_b64 s[6:7], -1116; GCN-NEXT: buffer_load_dword v41, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload117; GCN-NEXT: s_mov_b64 exec, s[6:7]118; GCN-NEXT: s_mov_b32 s33, s4119; GCN-NEXT: s_waitcnt vmcnt(0)120; GCN-NEXT: s_setpc_b64 s[30:31]121; GCN-NEXT: .LBB0_9: ; %bb2122; GCN-NEXT: v_cmp_eq_u32_e64 s[54:55], 21, v0123; GCN-NEXT: v_cmp_ne_u32_e64 s[18:19], 21, v0124; GCN-NEXT: s_mov_b64 vcc, exec125; GCN-NEXT: s_cbranch_execnz .LBB0_2126; GCN-NEXT: .LBB0_10: ; %bb4127; GCN-NEXT: s_mov_b64 s[16:17], -1128; GCN-NEXT: v_cmp_ne_u32_e64 s[18:19], 9, v0129; GCN-NEXT: s_andn2_b64 vcc, exec, s[18:19]130; GCN-NEXT: s_cbranch_vccz .LBB0_3131; GCN-NEXT: s_branch .LBB0_4132; SI-OPT-LABEL: @widget(133; SI-OPT-NEXT: bb:134; SI-OPT-NEXT: [[TMP:%.*]] = load i32, ptr addrspace(1) null, align 16135; SI-OPT-NEXT: [[TMP1:%.*]] = icmp slt i32 [[TMP]], 21136; SI-OPT-NEXT: br i1 [[TMP1]], label [[BB4:%.*]], label [[BB2:%.*]]137; SI-OPT: bb2:138; SI-OPT-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP]], 21139; SI-OPT-NEXT: br i1 [[TMP3]], label [[BB12:%.*]], label [[BB9:%.*]]140; SI-OPT: bb4:141; SI-OPT-NEXT: [[TMP5:%.*]] = icmp eq i32 [[TMP]], 9142; SI-OPT-NEXT: br i1 [[TMP5]], label [[BB7:%.*]], label [[BB9]]143; SI-OPT: bb6:144; SI-OPT-NEXT: ret void145; SI-OPT: bb7:146; SI-OPT-NEXT: [[TMP8:%.*]] = call float @wibble()147; SI-OPT-NEXT: ret void148; SI-OPT: bb9:149; SI-OPT-NEXT: [[TMP10:%.*]] = call float @wibble()150; SI-OPT-NEXT: [[TMP11:%.*]] = fcmp nsz ogt float [[TMP10]], 0.000000e+00151; SI-OPT-NEXT: [[TMP0:%.*]] = call { i1, i64 } @llvm.amdgcn.if.i64(i1 [[TMP11]])152; SI-OPT-NEXT: [[TMP1:%.*]] = extractvalue { i1, i64 } [[TMP0]], 0153; SI-OPT-NEXT: [[TMP2:%.*]] = extractvalue { i1, i64 } [[TMP0]], 1154; SI-OPT-NEXT: br i1 [[TMP1]], label [[BB6:%.*]], label [[BB9_BB12_CRIT_EDGE:%.*]]155; SI-OPT: bb9.bb12_crit_edge:156; SI-OPT-NEXT: call void @llvm.amdgcn.end.cf.i64(i64 [[TMP2]])157; SI-OPT-NEXT: br label [[BB12]]158; SI-OPT: bb12:159; SI-OPT-NEXT: store float 0.000000e+00, ptr addrspace(1) null, align 8160; SI-OPT-NEXT: ret void161bb:162 %tmp = load i32, ptr addrspace(1) null, align 16163 %tmp1 = icmp slt i32 %tmp, 21164 br i1 %tmp1, label %bb4, label %bb2165 166bb2: ; preds = %bb167 %tmp3 = icmp eq i32 %tmp, 21168 br i1 %tmp3, label %bb12, label %bb9169 170bb4: ; preds = %bb171 %tmp5 = icmp eq i32 %tmp, 9172 br i1 %tmp5, label %bb7, label %bb9173 174bb6: ; preds = %bb9175 ret void176 177bb7: ; preds = %bb4178 %tmp8 = call float @wibble()179 ret void180 181bb9: ; preds = %bb4, %bb2182 %tmp10 = call float @wibble()183 %tmp11 = fcmp nsz ogt float %tmp10, 0.000000e+00184 br i1 %tmp11, label %bb6, label %bb12185 186bb12: ; preds = %bb9, %bb2187 store float 0.000000e+00, ptr addrspace(1) null, align 8188 ret void189}190 191declare hidden float @wibble() local_unnamed_addr192 193 194define hidden void @blam() {195; SI-OPT-LABEL: @blam(196; SI-OPT-NEXT: bb:197; SI-OPT-NEXT: [[TMP:%.*]] = load float, ptr null, align 16198; SI-OPT-NEXT: br label [[BB2:%.*]]199; SI-OPT: bb1:200; SI-OPT-NEXT: br label [[BB2]]201; SI-OPT: bb2:202; SI-OPT-NEXT: [[TID:%.*]] = call i32 @llvm.amdgcn.workitem.id.x()203; SI-OPT-NEXT: [[GEP:%.*]] = getelementptr inbounds i32, ptr addrspace(1) null, i32 [[TID]]204; SI-OPT-NEXT: [[TMP3:%.*]] = load i32, ptr addrspace(1) [[GEP]], align 16205; SI-OPT-NEXT: store float 0.000000e+00, ptr addrspace(5) null, align 8206; SI-OPT-NEXT: br label [[BB4:%.*]]207; SI-OPT: bb4:208; SI-OPT-NEXT: [[TMP5:%.*]] = icmp slt i32 [[TMP3]], 3209; SI-OPT-NEXT: [[TMP0:%.*]] = call { i1, i64 } @llvm.amdgcn.if.i64(i1 [[TMP5]])210; SI-OPT-NEXT: [[TMP1:%.*]] = extractvalue { i1, i64 } [[TMP0]], 0211; SI-OPT-NEXT: [[TMP2:%.*]] = extractvalue { i1, i64 } [[TMP0]], 1212; SI-OPT-NEXT: br i1 [[TMP1]], label [[BB8:%.*]], label [[BB6:%.*]]213; SI-OPT: bb6:214; SI-OPT-NEXT: call void @llvm.amdgcn.end.cf.i64(i64 [[TMP2]])215; SI-OPT-NEXT: [[TMP7:%.*]] = icmp eq i32 [[TMP3]], 3216; SI-OPT-NEXT: br i1 [[TMP7]], label [[BB11:%.*]], label [[BB1:%.*]]217; SI-OPT: bb8:218; SI-OPT-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP3]], 1219; SI-OPT-NEXT: [[TMP3:%.*]] = call { i1, i64 } @llvm.amdgcn.if.i64(i1 [[TMP9]])220; SI-OPT-NEXT: [[TMP4:%.*]] = extractvalue { i1, i64 } [[TMP3]], 0221; SI-OPT-NEXT: [[TMP5:%.*]] = extractvalue { i1, i64 } [[TMP3]], 1222; SI-OPT-NEXT: br i1 [[TMP4]], label [[BB10:%.*]], label [[BB8_BB1_CRIT_EDGE:%.*]]223; SI-OPT: bb8.bb1_crit_edge:224; SI-OPT-NEXT: call void @llvm.amdgcn.end.cf.i64(i64 [[TMP5]])225; SI-OPT-NEXT: br label [[BB1]]226; SI-OPT: bb10:227; SI-OPT-NEXT: store float 0x7FF8000000000000, ptr addrspace(5) null, align 16228; SI-OPT-NEXT: br label [[BB18:%.*]]229; SI-OPT: bb11:230; SI-OPT-NEXT: [[TMP12:%.*]] = call float @spam()231; SI-OPT-NEXT: [[TMP13:%.*]] = fcmp nsz oeq float [[TMP12]], 0.000000e+00232; SI-OPT-NEXT: [[TMP6:%.*]] = call { i1, i64 } @llvm.amdgcn.if.i64(i1 [[TMP13]])233; SI-OPT-NEXT: [[TMP7:%.*]] = extractvalue { i1, i64 } [[TMP6]], 0234; SI-OPT-NEXT: [[TMP8:%.*]] = extractvalue { i1, i64 } [[TMP6]], 1235; SI-OPT-NEXT: br i1 [[TMP7]], label [[BB2]], label [[BB14:%.*]]236; SI-OPT: bb14:237; SI-OPT-NEXT: call void @llvm.amdgcn.end.cf.i64(i64 [[TMP8]])238; SI-OPT-NEXT: [[TMP15:%.*]] = fcmp nsz oeq float [[TMP]], 0.000000e+00239; SI-OPT-NEXT: [[TMP9:%.*]] = call { i1, i64 } @llvm.amdgcn.if.i64(i1 [[TMP15]])240; SI-OPT-NEXT: [[TMP10:%.*]] = extractvalue { i1, i64 } [[TMP9]], 0241; SI-OPT-NEXT: [[TMP11:%.*]] = extractvalue { i1, i64 } [[TMP9]], 1242; SI-OPT-NEXT: br i1 [[TMP10]], label [[BB17:%.*]], label [[BB16:%.*]]243; SI-OPT: bb16:244; SI-OPT-NEXT: call void @llvm.amdgcn.end.cf.i64(i64 [[TMP11]])245; SI-OPT-NEXT: store float 0x7FF8000000000000, ptr addrspace(5) null, align 16246; SI-OPT-NEXT: br label [[BB17]]247; SI-OPT: bb17:248; SI-OPT-NEXT: store float [[TMP]], ptr addrspace(5) null, align 16249; SI-OPT-NEXT: br label [[BB18]]250; SI-OPT: bb18:251; SI-OPT-NEXT: store float 0x7FF8000000000000, ptr addrspace(5) null, align 4252; SI-OPT-NEXT: br label [[BB2]]253;254; GCN-LABEL: blam:255; GCN: ; %bb.0: ; %bb256; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)257; GCN-NEXT: s_mov_b32 s16, s33258; GCN-NEXT: s_mov_b32 s33, s32259; GCN-NEXT: s_or_saveexec_b64 s[18:19], -1260; GCN-NEXT: buffer_store_dword v45, off, s[0:3], s33 offset:20 ; 4-byte Folded Spill261; GCN-NEXT: s_mov_b64 exec, s[18:19]262; GCN-NEXT: v_writelane_b32 v45, s16, 26263; GCN-NEXT: s_addk_i32 s32, 0x800264; GCN-NEXT: buffer_store_dword v40, off, s[0:3], s33 offset:16 ; 4-byte Folded Spill265; GCN-NEXT: buffer_store_dword v41, off, s[0:3], s33 offset:12 ; 4-byte Folded Spill266; GCN-NEXT: buffer_store_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill267; GCN-NEXT: buffer_store_dword v43, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill268; GCN-NEXT: buffer_store_dword v44, off, s[0:3], s33 ; 4-byte Folded Spill269; GCN-NEXT: v_writelane_b32 v45, s30, 0270; GCN-NEXT: v_writelane_b32 v45, s31, 1271; GCN-NEXT: v_writelane_b32 v45, s34, 2272; GCN-NEXT: v_writelane_b32 v45, s35, 3273; GCN-NEXT: v_writelane_b32 v45, s36, 4274; GCN-NEXT: v_writelane_b32 v45, s37, 5275; GCN-NEXT: v_writelane_b32 v45, s38, 6276; GCN-NEXT: v_writelane_b32 v45, s39, 7277; GCN-NEXT: v_writelane_b32 v45, s48, 8278; GCN-NEXT: v_writelane_b32 v45, s49, 9279; GCN-NEXT: v_writelane_b32 v45, s50, 10280; GCN-NEXT: v_writelane_b32 v45, s51, 11281; GCN-NEXT: v_writelane_b32 v45, s52, 12282; GCN-NEXT: v_writelane_b32 v45, s53, 13283; GCN-NEXT: v_writelane_b32 v45, s54, 14284; GCN-NEXT: v_writelane_b32 v45, s55, 15285; GCN-NEXT: v_writelane_b32 v45, s64, 16286; GCN-NEXT: v_writelane_b32 v45, s65, 17287; GCN-NEXT: v_writelane_b32 v45, s66, 18288; GCN-NEXT: v_writelane_b32 v45, s67, 19289; GCN-NEXT: v_writelane_b32 v45, s68, 20290; GCN-NEXT: v_writelane_b32 v45, s69, 21291; GCN-NEXT: v_writelane_b32 v45, s70, 22292; GCN-NEXT: v_writelane_b32 v45, s71, 23293; GCN-NEXT: v_writelane_b32 v45, s80, 24294; GCN-NEXT: v_writelane_b32 v45, s81, 25295; GCN-NEXT: v_mov_b32_e32 v40, v31296; GCN-NEXT: s_mov_b32 s54, s15297; GCN-NEXT: s_mov_b32 s55, s14298; GCN-NEXT: s_mov_b32 s64, s13299; GCN-NEXT: s_mov_b32 s65, s12300; GCN-NEXT: s_mov_b64 s[34:35], s[10:11]301; GCN-NEXT: s_mov_b64 s[36:37], s[8:9]302; GCN-NEXT: s_mov_b64 s[38:39], s[6:7]303; GCN-NEXT: s_mov_b64 s[48:49], s[4:5]304; GCN-NEXT: v_mov_b32_e32 v0, 0305; GCN-NEXT: v_mov_b32_e32 v1, 0306; GCN-NEXT: v_and_b32_e32 v2, 0x3ff, v40307; GCN-NEXT: flat_load_dword v43, v[0:1]308; GCN-NEXT: v_mov_b32_e32 v42, 0309; GCN-NEXT: s_mov_b64 s[66:67], 0310; GCN-NEXT: v_lshlrev_b32_e32 v41, 2, v2311; GCN-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)312; GCN-NEXT: v_cmp_eq_f32_e64 s[68:69], 0, v43313; GCN-NEXT: v_cmp_neq_f32_e64 s[50:51], 0, v43314; GCN-NEXT: v_mov_b32_e32 v44, 0x7fc00000315; GCN-NEXT: s_branch .LBB1_2316; GCN-NEXT: .LBB1_1: ; %Flow7317; GCN-NEXT: ; in Loop: Header=BB1_2 Depth=1318; GCN-NEXT: s_or_b64 exec, exec, s[8:9]319; GCN-NEXT: s_and_b64 s[4:5], exec, s[4:5]320; GCN-NEXT: s_or_b64 s[66:67], s[4:5], s[66:67]321; GCN-NEXT: s_andn2_b64 exec, exec, s[66:67]322; GCN-NEXT: s_cbranch_execz .LBB1_18323; GCN-NEXT: .LBB1_2: ; %bb2324; GCN-NEXT: ; =>This Inner Loop Header: Depth=1325; GCN-NEXT: flat_load_dword v0, v[41:42]326; GCN-NEXT: buffer_store_dword v42, off, s[0:3], 0327; GCN-NEXT: s_mov_b64 s[6:7], 0328; GCN-NEXT: s_waitcnt vmcnt(1)329; GCN-NEXT: v_cmp_lt_i32_e32 vcc, 2, v0330; GCN-NEXT: s_mov_b64 s[4:5], -1331; GCN-NEXT: s_and_saveexec_b64 s[8:9], vcc332; GCN-NEXT: s_xor_b64 s[70:71], exec, s[8:9]333; GCN-NEXT: s_cbranch_execz .LBB1_12334; GCN-NEXT: ; %bb.3: ; %bb6335; GCN-NEXT: ; in Loop: Header=BB1_2 Depth=1336; GCN-NEXT: v_cmp_eq_u32_e64 s[52:53], 3, v0337; GCN-NEXT: s_and_saveexec_b64 s[80:81], s[52:53]338; GCN-NEXT: s_cbranch_execz .LBB1_11339; GCN-NEXT: ; %bb.4: ; %bb11340; GCN-NEXT: ; in Loop: Header=BB1_2 Depth=1341; GCN-NEXT: s_getpc_b64 s[16:17]342; GCN-NEXT: s_add_u32 s16, s16, spam@rel32@lo+4343; GCN-NEXT: s_addc_u32 s17, s17, spam@rel32@hi+12344; GCN-NEXT: s_mov_b64 s[4:5], s[48:49]345; GCN-NEXT: s_mov_b64 s[6:7], s[38:39]346; GCN-NEXT: s_mov_b64 s[8:9], s[36:37]347; GCN-NEXT: s_mov_b64 s[10:11], s[34:35]348; GCN-NEXT: s_mov_b32 s12, s65349; GCN-NEXT: s_mov_b32 s13, s64350; GCN-NEXT: s_mov_b32 s14, s55351; GCN-NEXT: s_mov_b32 s15, s54352; GCN-NEXT: v_mov_b32_e32 v31, v40353; GCN-NEXT: s_swappc_b64 s[30:31], s[16:17]354; GCN-NEXT: v_cmp_neq_f32_e32 vcc, 0, v0355; GCN-NEXT: s_mov_b64 s[6:7], 0356; GCN-NEXT: s_and_saveexec_b64 s[4:5], vcc357; GCN-NEXT: s_cbranch_execz .LBB1_10358; GCN-NEXT: ; %bb.5: ; %bb14359; GCN-NEXT: ; in Loop: Header=BB1_2 Depth=1360; GCN-NEXT: s_mov_b64 s[8:9], s[68:69]361; GCN-NEXT: s_and_saveexec_b64 s[6:7], s[50:51]362; GCN-NEXT: s_cbranch_execz .LBB1_7363; GCN-NEXT: ; %bb.6: ; %bb16364; GCN-NEXT: ; in Loop: Header=BB1_2 Depth=1365; GCN-NEXT: buffer_store_dword v44, off, s[0:3], 0366; GCN-NEXT: s_or_b64 s[8:9], s[68:69], exec367; GCN-NEXT: .LBB1_7: ; %Flow3368; GCN-NEXT: ; in Loop: Header=BB1_2 Depth=1369; GCN-NEXT: s_or_b64 exec, exec, s[6:7]370; GCN-NEXT: s_mov_b64 s[6:7], 0371; GCN-NEXT: s_and_saveexec_b64 s[10:11], s[8:9]372; GCN-NEXT: s_xor_b64 s[8:9], exec, s[10:11]373; GCN-NEXT: s_cbranch_execz .LBB1_9374; GCN-NEXT: ; %bb.8: ; %bb17375; GCN-NEXT: ; in Loop: Header=BB1_2 Depth=1376; GCN-NEXT: s_mov_b64 s[6:7], exec377; GCN-NEXT: buffer_store_dword v43, off, s[0:3], 0378; GCN-NEXT: .LBB1_9: ; %Flow4379; GCN-NEXT: ; in Loop: Header=BB1_2 Depth=1380; GCN-NEXT: s_or_b64 exec, exec, s[8:9]381; GCN-NEXT: s_and_b64 s[6:7], s[6:7], exec382; GCN-NEXT: .LBB1_10: ; %Flow2383; GCN-NEXT: ; in Loop: Header=BB1_2 Depth=1384; GCN-NEXT: s_or_b64 exec, exec, s[4:5]385; GCN-NEXT: s_andn2_b64 s[4:5], s[52:53], exec386; GCN-NEXT: s_and_b64 s[8:9], vcc, exec387; GCN-NEXT: s_or_b64 s[52:53], s[4:5], s[8:9]388; GCN-NEXT: s_and_b64 s[6:7], s[6:7], exec389; GCN-NEXT: .LBB1_11: ; %Flow1390; GCN-NEXT: ; in Loop: Header=BB1_2 Depth=1391; GCN-NEXT: s_or_b64 exec, exec, s[80:81]392; GCN-NEXT: s_orn2_b64 s[4:5], s[52:53], exec393; GCN-NEXT: s_and_b64 s[6:7], s[6:7], exec394; GCN-NEXT: ; implicit-def: $vgpr0395; GCN-NEXT: .LBB1_12: ; %Flow396; GCN-NEXT: ; in Loop: Header=BB1_2 Depth=1397; GCN-NEXT: s_andn2_saveexec_b64 s[8:9], s[70:71]398; GCN-NEXT: s_cbranch_execz .LBB1_16399; GCN-NEXT: ; %bb.13: ; %bb8400; GCN-NEXT: ; in Loop: Header=BB1_2 Depth=1401; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0402; GCN-NEXT: s_mov_b64 s[10:11], s[6:7]403; GCN-NEXT: s_and_saveexec_b64 s[12:13], vcc404; GCN-NEXT: s_cbranch_execz .LBB1_15405; GCN-NEXT: ; %bb.14: ; %bb10406; GCN-NEXT: ; in Loop: Header=BB1_2 Depth=1407; GCN-NEXT: buffer_store_dword v44, off, s[0:3], 0408; GCN-NEXT: s_or_b64 s[10:11], s[6:7], exec409; GCN-NEXT: .LBB1_15: ; %Flow6410; GCN-NEXT: ; in Loop: Header=BB1_2 Depth=1411; GCN-NEXT: s_or_b64 exec, exec, s[12:13]412; GCN-NEXT: s_andn2_b64 s[4:5], s[4:5], exec413; GCN-NEXT: s_and_b64 s[12:13], vcc, exec414; GCN-NEXT: s_andn2_b64 s[6:7], s[6:7], exec415; GCN-NEXT: s_and_b64 s[10:11], s[10:11], exec416; GCN-NEXT: s_or_b64 s[4:5], s[4:5], s[12:13]417; GCN-NEXT: s_or_b64 s[6:7], s[6:7], s[10:11]418; GCN-NEXT: .LBB1_16: ; %Flow5419; GCN-NEXT: ; in Loop: Header=BB1_2 Depth=1420; GCN-NEXT: s_or_b64 exec, exec, s[8:9]421; GCN-NEXT: s_and_saveexec_b64 s[8:9], s[6:7]422; GCN-NEXT: s_cbranch_execz .LBB1_1423; GCN-NEXT: ; %bb.17: ; %bb18424; GCN-NEXT: ; in Loop: Header=BB1_2 Depth=1425; GCN-NEXT: buffer_store_dword v44, off, s[0:3], 0426; GCN-NEXT: s_andn2_b64 s[4:5], s[4:5], exec427; GCN-NEXT: s_branch .LBB1_1428; GCN-NEXT: .LBB1_18: ; %DummyReturnBlock429; GCN-NEXT: s_or_b64 exec, exec, s[66:67]430; GCN-NEXT: v_readlane_b32 s81, v45, 25431; GCN-NEXT: v_readlane_b32 s80, v45, 24432; GCN-NEXT: v_readlane_b32 s71, v45, 23433; GCN-NEXT: v_readlane_b32 s70, v45, 22434; GCN-NEXT: v_readlane_b32 s69, v45, 21435; GCN-NEXT: v_readlane_b32 s68, v45, 20436; GCN-NEXT: v_readlane_b32 s67, v45, 19437; GCN-NEXT: v_readlane_b32 s66, v45, 18438; GCN-NEXT: v_readlane_b32 s65, v45, 17439; GCN-NEXT: v_readlane_b32 s64, v45, 16440; GCN-NEXT: v_readlane_b32 s55, v45, 15441; GCN-NEXT: v_readlane_b32 s54, v45, 14442; GCN-NEXT: v_readlane_b32 s53, v45, 13443; GCN-NEXT: v_readlane_b32 s52, v45, 12444; GCN-NEXT: v_readlane_b32 s51, v45, 11445; GCN-NEXT: v_readlane_b32 s50, v45, 10446; GCN-NEXT: v_readlane_b32 s49, v45, 9447; GCN-NEXT: v_readlane_b32 s48, v45, 8448; GCN-NEXT: v_readlane_b32 s39, v45, 7449; GCN-NEXT: v_readlane_b32 s38, v45, 6450; GCN-NEXT: v_readlane_b32 s37, v45, 5451; GCN-NEXT: v_readlane_b32 s36, v45, 4452; GCN-NEXT: v_readlane_b32 s35, v45, 3453; GCN-NEXT: v_readlane_b32 s34, v45, 2454; GCN-NEXT: v_readlane_b32 s31, v45, 1455; GCN-NEXT: v_readlane_b32 s30, v45, 0456; GCN-NEXT: buffer_load_dword v44, off, s[0:3], s33 ; 4-byte Folded Reload457; GCN-NEXT: buffer_load_dword v43, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload458; GCN-NEXT: buffer_load_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload459; GCN-NEXT: buffer_load_dword v41, off, s[0:3], s33 offset:12 ; 4-byte Folded Reload460; GCN-NEXT: buffer_load_dword v40, off, s[0:3], s33 offset:16 ; 4-byte Folded Reload461; GCN-NEXT: s_mov_b32 s32, s33462; GCN-NEXT: v_readlane_b32 s4, v45, 26463; GCN-NEXT: s_or_saveexec_b64 s[6:7], -1464; GCN-NEXT: buffer_load_dword v45, off, s[0:3], s33 offset:20 ; 4-byte Folded Reload465; GCN-NEXT: s_mov_b64 exec, s[6:7]466; GCN-NEXT: s_mov_b32 s33, s4467; GCN-NEXT: s_waitcnt vmcnt(0)468; GCN-NEXT: s_setpc_b64 s[30:31]469bb:470 %tmp = load float, ptr null, align 16471 br label %bb2472 473bb1: ; preds = %bb8, %bb6474 br label %bb2475 476bb2:477 %tid = call i32 @llvm.amdgcn.workitem.id.x()478 %gep = getelementptr inbounds i32, ptr addrspace(1) null, i32 %tid479 %tmp3 = load i32, ptr addrspace(1) %gep, align 16480 store float 0.000000e+00, ptr addrspace(5) null, align 8481 br label %bb4482 483bb4: ; preds = %bb2484 %tmp5 = icmp slt i32 %tmp3, 3485 br i1 %tmp5, label %bb8, label %bb6486 487bb6: ; preds = %bb4488 %tmp7 = icmp eq i32 %tmp3, 3489 br i1 %tmp7, label %bb11, label %bb1490 491bb8: ; preds = %bb4492 %tmp9 = icmp eq i32 %tmp3, 1493 br i1 %tmp9, label %bb10, label %bb1494 495bb10: ; preds = %bb8496 store float 0x7FF8000000000000, ptr addrspace(5) null, align 16497 br label %bb18498 499bb11: ; preds = %bb6500 %tmp12 = call float @spam()501 %tmp13 = fcmp nsz oeq float %tmp12, 0.000000e+00502 br i1 %tmp13, label %bb2, label %bb14503 504bb14: ; preds = %bb11505 %tmp15 = fcmp nsz oeq float %tmp, 0.000000e+00506 br i1 %tmp15, label %bb17, label %bb16507 508bb16: ; preds = %bb14509 store float 0x7FF8000000000000, ptr addrspace(5) null, align 16510 br label %bb17511 512bb17: ; preds = %bb16, %bb14513 store float %tmp, ptr addrspace(5) null, align 16514 br label %bb18515 516bb18: ; preds = %bb17, %bb10517 store float 0x7FF8000000000000, ptr addrspace(5) null, align 4518 br label %bb2519}520 521declare i32 @llvm.amdgcn.workitem.id.x()522 523declare hidden float @spam()524 525