brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.1 KiB · 4ed1cb2 Raw
189 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -O0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1031 -o - %s | FileCheck %s3 4; Make sure the waterfall loop does not fail the verifier after regalloc fast5;6; FIXME: There are a lot of extra spills that aren't needed. This is due to the unmerge_merge combine7;        running after RegBankSelect which inserts a lot of COPY instructions, but the original merge8;        instruction (G_BUILD_VECTOR) stays because it has more than one use.9;        Those spills are not present when optimizations are enabled.10define <4 x float> @waterfall_loop(<8 x i32> %vgpr_srd) {11; CHECK-LABEL: waterfall_loop:12; CHECK:       ; %bb.0: ; %bb13; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14; CHECK-NEXT:    s_xor_saveexec_b32 s4, -115; CHECK-NEXT:    buffer_store_dword v16, off, s[0:3], s32 offset:80 ; 4-byte Folded Spill16; CHECK-NEXT:    s_mov_b32 exec_lo, s417; CHECK-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:72 ; 4-byte Folded Spill18; CHECK-NEXT:    v_mov_b32_e32 v14, v119; CHECK-NEXT:    buffer_store_dword v14, off, s[0:3], s32 offset:68 ; 4-byte Folded Spill20; CHECK-NEXT:    v_mov_b32_e32 v13, v221; CHECK-NEXT:    buffer_store_dword v13, off, s[0:3], s32 offset:64 ; 4-byte Folded Spill22; CHECK-NEXT:    v_mov_b32_e32 v12, v323; CHECK-NEXT:    buffer_store_dword v12, off, s[0:3], s32 offset:60 ; 4-byte Folded Spill24; CHECK-NEXT:    v_mov_b32_e32 v11, v425; CHECK-NEXT:    buffer_store_dword v11, off, s[0:3], s32 offset:56 ; 4-byte Folded Spill26; CHECK-NEXT:    v_mov_b32_e32 v10, v527; CHECK-NEXT:    buffer_store_dword v10, off, s[0:3], s32 offset:52 ; 4-byte Folded Spill28; CHECK-NEXT:    v_mov_b32_e32 v9, v629; CHECK-NEXT:    buffer_store_dword v9, off, s[0:3], s32 offset:48 ; 4-byte Folded Spill30; CHECK-NEXT:    v_mov_b32_e32 v8, v731; CHECK-NEXT:    buffer_store_dword v8, off, s[0:3], s32 offset:44 ; 4-byte Folded Spill32; CHECK-NEXT:    ; kill: def $vgpr0 killed $vgpr0 def $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 killed $exec33; CHECK-NEXT:    v_mov_b32_e32 v1, v1434; CHECK-NEXT:    v_mov_b32_e32 v2, v1335; CHECK-NEXT:    v_mov_b32_e32 v3, v1236; CHECK-NEXT:    v_mov_b32_e32 v4, v1137; CHECK-NEXT:    v_mov_b32_e32 v5, v1038; CHECK-NEXT:    v_mov_b32_e32 v6, v939; CHECK-NEXT:    v_mov_b32_e32 v7, v840; CHECK-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:12 ; 4-byte Folded Spill41; CHECK-NEXT:    buffer_store_dword v1, off, s[0:3], s32 offset:16 ; 4-byte Folded Spill42; CHECK-NEXT:    buffer_store_dword v2, off, s[0:3], s32 offset:20 ; 4-byte Folded Spill43; CHECK-NEXT:    buffer_store_dword v3, off, s[0:3], s32 offset:24 ; 4-byte Folded Spill44; CHECK-NEXT:    buffer_store_dword v4, off, s[0:3], s32 offset:28 ; 4-byte Folded Spill45; CHECK-NEXT:    buffer_store_dword v5, off, s[0:3], s32 offset:32 ; 4-byte Folded Spill46; CHECK-NEXT:    buffer_store_dword v6, off, s[0:3], s32 offset:36 ; 4-byte Folded Spill47; CHECK-NEXT:    buffer_store_dword v7, off, s[0:3], s32 offset:40 ; 4-byte Folded Spill48; CHECK-NEXT:    s_mov_b32 s8, 049; CHECK-NEXT:    s_mov_b32 s4, s850; CHECK-NEXT:    s_mov_b32 s5, s851; CHECK-NEXT:    s_mov_b32 s6, s852; CHECK-NEXT:    s_mov_b32 s7, s853; CHECK-NEXT:    ; implicit-def: $vgpr16 : SGPR spill to VGPR lane54; CHECK-NEXT:    v_writelane_b32 v16, s4, 055; CHECK-NEXT:    v_writelane_b32 v16, s5, 156; CHECK-NEXT:    v_writelane_b32 v16, s6, 257; CHECK-NEXT:    v_writelane_b32 v16, s7, 358; CHECK-NEXT:    s_mov_b32 s4, 059; CHECK-NEXT:    v_mov_b32_e32 v0, s460; CHECK-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:8 ; 4-byte Folded Spill61; CHECK-NEXT:    v_mov_b32_e32 v0, s462; CHECK-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:4 ; 4-byte Folded Spill63; CHECK-NEXT:    s_mov_b32 s4, exec_lo64; CHECK-NEXT:    v_writelane_b32 v16, s4, 465; CHECK-NEXT:    s_or_saveexec_b32 s21, -166; CHECK-NEXT:    buffer_store_dword v16, off, s[0:3], s32 ; 4-byte Folded Spill67; CHECK-NEXT:    s_mov_b32 exec_lo, s2168; CHECK-NEXT:  .LBB0_1: ; =>This Inner Loop Header: Depth=169; CHECK-NEXT:    s_or_saveexec_b32 s21, -170; CHECK-NEXT:    buffer_load_dword v16, off, s[0:3], s32 ; 4-byte Folded Reload71; CHECK-NEXT:    s_mov_b32 exec_lo, s2172; CHECK-NEXT:    buffer_load_dword v8, off, s[0:3], s32 offset:12 ; 4-byte Folded Reload73; CHECK-NEXT:    buffer_load_dword v9, off, s[0:3], s32 offset:16 ; 4-byte Folded Reload74; CHECK-NEXT:    buffer_load_dword v10, off, s[0:3], s32 offset:20 ; 4-byte Folded Reload75; CHECK-NEXT:    buffer_load_dword v11, off, s[0:3], s32 offset:24 ; 4-byte Folded Reload76; CHECK-NEXT:    buffer_load_dword v12, off, s[0:3], s32 offset:28 ; 4-byte Folded Reload77; CHECK-NEXT:    buffer_load_dword v13, off, s[0:3], s32 offset:32 ; 4-byte Folded Reload78; CHECK-NEXT:    buffer_load_dword v14, off, s[0:3], s32 offset:36 ; 4-byte Folded Reload79; CHECK-NEXT:    buffer_load_dword v15, off, s[0:3], s32 offset:40 ; 4-byte Folded Reload80; CHECK-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:44 ; 4-byte Folded Reload81; CHECK-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:48 ; 4-byte Folded Reload82; CHECK-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:52 ; 4-byte Folded Reload83; CHECK-NEXT:    buffer_load_dword v3, off, s[0:3], s32 offset:56 ; 4-byte Folded Reload84; CHECK-NEXT:    buffer_load_dword v4, off, s[0:3], s32 offset:60 ; 4-byte Folded Reload85; CHECK-NEXT:    buffer_load_dword v5, off, s[0:3], s32 offset:64 ; 4-byte Folded Reload86; CHECK-NEXT:    buffer_load_dword v6, off, s[0:3], s32 offset:68 ; 4-byte Folded Reload87; CHECK-NEXT:    buffer_load_dword v7, off, s[0:3], s32 offset:72 ; 4-byte Folded Reload88; CHECK-NEXT:    s_waitcnt vmcnt(0)89; CHECK-NEXT:    v_readfirstlane_b32 s12, v790; CHECK-NEXT:    v_readfirstlane_b32 s10, v691; CHECK-NEXT:    v_readfirstlane_b32 s9, v592; CHECK-NEXT:    v_readfirstlane_b32 s8, v493; CHECK-NEXT:    v_readfirstlane_b32 s7, v394; CHECK-NEXT:    v_readfirstlane_b32 s6, v295; CHECK-NEXT:    v_readfirstlane_b32 s5, v196; CHECK-NEXT:    v_readfirstlane_b32 s4, v097; CHECK-NEXT:    ; kill: def $sgpr12 killed $sgpr12 def $sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr1998; CHECK-NEXT:    s_mov_b32 s13, s1099; CHECK-NEXT:    s_mov_b32 s14, s9100; CHECK-NEXT:    s_mov_b32 s15, s8101; CHECK-NEXT:    s_mov_b32 s16, s7102; CHECK-NEXT:    s_mov_b32 s17, s6103; CHECK-NEXT:    s_mov_b32 s18, s5104; CHECK-NEXT:    s_mov_b32 s19, s4105; CHECK-NEXT:    v_writelane_b32 v16, s12, 5106; CHECK-NEXT:    v_writelane_b32 v16, s13, 6107; CHECK-NEXT:    v_writelane_b32 v16, s14, 7108; CHECK-NEXT:    v_writelane_b32 v16, s15, 8109; CHECK-NEXT:    v_writelane_b32 v16, s16, 9110; CHECK-NEXT:    v_writelane_b32 v16, s17, 10111; CHECK-NEXT:    v_writelane_b32 v16, s18, 11112; CHECK-NEXT:    v_writelane_b32 v16, s19, 12113; CHECK-NEXT:    v_mov_b32_e32 v6, v8114; CHECK-NEXT:    v_mov_b32_e32 v7, v9115; CHECK-NEXT:    v_mov_b32_e32 v4, v10116; CHECK-NEXT:    v_mov_b32_e32 v5, v11117; CHECK-NEXT:    v_mov_b32_e32 v2, v12118; CHECK-NEXT:    v_mov_b32_e32 v3, v13119; CHECK-NEXT:    v_mov_b32_e32 v0, v14120; CHECK-NEXT:    v_mov_b32_e32 v1, v15121; CHECK-NEXT:    s_mov_b64 s[4:5], s[12:13]122; CHECK-NEXT:    s_mov_b64 s[10:11], s[14:15]123; CHECK-NEXT:    s_mov_b64 s[8:9], s[16:17]124; CHECK-NEXT:    s_mov_b64 s[6:7], s[18:19]125; CHECK-NEXT:    v_cmp_eq_u64_e64 s4, s[4:5], v[6:7]126; CHECK-NEXT:    v_cmp_eq_u64_e64 s5, s[10:11], v[4:5]127; CHECK-NEXT:    s_and_b32 s4, s4, s5128; CHECK-NEXT:    v_cmp_eq_u64_e64 s5, s[8:9], v[2:3]129; CHECK-NEXT:    s_and_b32 s4, s4, s5130; CHECK-NEXT:    v_cmp_eq_u64_e64 s5, s[6:7], v[0:1]131; CHECK-NEXT:    s_and_b32 s4, s4, s5132; CHECK-NEXT:    s_and_saveexec_b32 s4, s4133; CHECK-NEXT:    v_writelane_b32 v16, s4, 13134; CHECK-NEXT:    s_or_saveexec_b32 s21, -1135; CHECK-NEXT:    buffer_store_dword v16, off, s[0:3], s32 ; 4-byte Folded Spill136; CHECK-NEXT:    s_mov_b32 exec_lo, s21137; CHECK-NEXT:  ; %bb.2: ; in Loop: Header=BB0_1 Depth=1138; CHECK-NEXT:    s_or_saveexec_b32 s21, -1139; CHECK-NEXT:    buffer_load_dword v16, off, s[0:3], s32 ; 4-byte Folded Reload140; CHECK-NEXT:    s_mov_b32 exec_lo, s21141; CHECK-NEXT:    s_waitcnt vmcnt(0)142; CHECK-NEXT:    v_readlane_b32 s4, v16, 13143; CHECK-NEXT:    v_readlane_b32 s8, v16, 5144; CHECK-NEXT:    v_readlane_b32 s9, v16, 6145; CHECK-NEXT:    v_readlane_b32 s10, v16, 7146; CHECK-NEXT:    v_readlane_b32 s11, v16, 8147; CHECK-NEXT:    v_readlane_b32 s12, v16, 9148; CHECK-NEXT:    v_readlane_b32 s13, v16, 10149; CHECK-NEXT:    v_readlane_b32 s14, v16, 11150; CHECK-NEXT:    v_readlane_b32 s15, v16, 12151; CHECK-NEXT:    v_readlane_b32 s16, v16, 0152; CHECK-NEXT:    v_readlane_b32 s17, v16, 1153; CHECK-NEXT:    v_readlane_b32 s18, v16, 2154; CHECK-NEXT:    v_readlane_b32 s19, v16, 3155; CHECK-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:8 ; 4-byte Folded Reload156; CHECK-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:4 ; 4-byte Folded Reload157; CHECK-NEXT:    s_waitcnt vmcnt(0)158; CHECK-NEXT:    image_sample v0, [v0, v1], s[8:15], s[16:19] dmask:0x1 dim:SQ_RSRC_IMG_2D159; CHECK-NEXT:    s_waitcnt vmcnt(0)160; CHECK-NEXT:    buffer_store_dword v0, off, s[0:3], s32 offset:76 ; 4-byte Folded Spill161; CHECK-NEXT:    s_xor_b32 exec_lo, exec_lo, s4162; CHECK-NEXT:    s_cbranch_execnz .LBB0_1163; CHECK-NEXT:  ; %bb.3:164; CHECK-NEXT:    s_or_saveexec_b32 s21, -1165; CHECK-NEXT:    buffer_load_dword v16, off, s[0:3], s32 ; 4-byte Folded Reload166; CHECK-NEXT:    s_mov_b32 exec_lo, s21167; CHECK-NEXT:    s_waitcnt vmcnt(0)168; CHECK-NEXT:    v_readlane_b32 s4, v16, 4169; CHECK-NEXT:    s_mov_b32 exec_lo, s4170; CHECK-NEXT:  ; %bb.4:171; CHECK-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:76 ; 4-byte Folded Reload172; CHECK-NEXT:    ; implicit-def: $sgpr4173; CHECK-NEXT:    v_mov_b32_e32 v1, s4174; CHECK-NEXT:    v_mov_b32_e32 v2, s4175; CHECK-NEXT:    v_mov_b32_e32 v3, s4176; CHECK-NEXT:    s_xor_saveexec_b32 s4, -1177; CHECK-NEXT:    buffer_load_dword v16, off, s[0:3], s32 offset:80 ; 4-byte Folded Reload178; CHECK-NEXT:    s_mov_b32 exec_lo, s4179; CHECK-NEXT:    s_waitcnt vmcnt(0)180; CHECK-NEXT:    s_setpc_b64 s[30:31]181bb:182  %ret = tail call <4 x float> @llvm.amdgcn.image.sample.2d.v4f32.f32(i32 1, float 0.000000e+00, float 0.000000e+00, <8 x i32> %vgpr_srd, <4 x i32> zeroinitializer, i1 false, i32 0, i32 0)183  ret <4 x float> %ret184}185 186declare <4 x float> @llvm.amdgcn.image.sample.2d.v4f32.f32(i32 immarg, float, float, <8 x i32>, <4 x i32>, i1 immarg, i32 immarg, i32 immarg) #0187 188attributes #0 = { nounwind readonly willreturn }189