637 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-amd-amdhsa -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,GFX6 %s3; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-amd-amdhsa -mcpu=kaveri < %s | FileCheck -check-prefixes=GCN,GFX7 %s4; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-amd-amdhsa -mcpu=fiji < %s | FileCheck -check-prefixes=GCN,GFX8 %s5; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9 %s6 7define i8 @atomic_load_global_monotonic_i8(ptr addrspace(1) %ptr) {8; GFX6-LABEL: atomic_load_global_monotonic_i8:9; GFX6: ; %bb.0:10; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11; GFX6-NEXT: s_mov_b32 s6, 012; GFX6-NEXT: s_mov_b32 s7, 0x100f00013; GFX6-NEXT: s_mov_b64 s[4:5], 014; GFX6-NEXT: buffer_load_ubyte v0, v[0:1], s[4:7], 0 addr64 glc15; GFX6-NEXT: s_waitcnt vmcnt(0)16; GFX6-NEXT: s_setpc_b64 s[30:31]17;18; GFX7-LABEL: atomic_load_global_monotonic_i8:19; GFX7: ; %bb.0:20; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)21; GFX7-NEXT: flat_load_ubyte v0, v[0:1] glc22; GFX7-NEXT: s_waitcnt vmcnt(0)23; GFX7-NEXT: s_setpc_b64 s[30:31]24;25; GFX8-LABEL: atomic_load_global_monotonic_i8:26; GFX8: ; %bb.0:27; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)28; GFX8-NEXT: flat_load_ubyte v0, v[0:1] glc29; GFX8-NEXT: s_waitcnt vmcnt(0)30; GFX8-NEXT: s_setpc_b64 s[30:31]31;32; GFX9-LABEL: atomic_load_global_monotonic_i8:33; GFX9: ; %bb.0:34; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)35; GFX9-NEXT: global_load_ubyte v0, v[0:1], off glc36; GFX9-NEXT: s_waitcnt vmcnt(0)37; GFX9-NEXT: s_setpc_b64 s[30:31]38 %load = load atomic i8, ptr addrspace(1) %ptr monotonic, align 139 ret i8 %load40}41 42define i32 @atomic_load_global_monotonic_i8_zext_to_i32(ptr addrspace(1) %ptr) {43; GFX6-LABEL: atomic_load_global_monotonic_i8_zext_to_i32:44; GFX6: ; %bb.0:45; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)46; GFX6-NEXT: s_mov_b32 s6, 047; GFX6-NEXT: s_mov_b32 s7, 0x100f00048; GFX6-NEXT: s_mov_b64 s[4:5], 049; GFX6-NEXT: buffer_load_ubyte v0, v[0:1], s[4:7], 0 addr64 glc50; GFX6-NEXT: s_waitcnt vmcnt(0)51; GFX6-NEXT: s_setpc_b64 s[30:31]52;53; GFX7-LABEL: atomic_load_global_monotonic_i8_zext_to_i32:54; GFX7: ; %bb.0:55; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)56; GFX7-NEXT: flat_load_ubyte v0, v[0:1] glc57; GFX7-NEXT: s_waitcnt vmcnt(0)58; GFX7-NEXT: s_setpc_b64 s[30:31]59;60; GFX8-LABEL: atomic_load_global_monotonic_i8_zext_to_i32:61; GFX8: ; %bb.0:62; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)63; GFX8-NEXT: flat_load_ubyte v0, v[0:1] glc64; GFX8-NEXT: s_waitcnt vmcnt(0)65; GFX8-NEXT: s_setpc_b64 s[30:31]66;67; GFX9-LABEL: atomic_load_global_monotonic_i8_zext_to_i32:68; GFX9: ; %bb.0:69; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)70; GFX9-NEXT: global_load_ubyte v0, v[0:1], off glc71; GFX9-NEXT: s_waitcnt vmcnt(0)72; GFX9-NEXT: s_setpc_b64 s[30:31]73 %load = load atomic i8, ptr addrspace(1) %ptr monotonic, align 174 %ext = zext i8 %load to i3275 ret i32 %ext76}77 78define i32 @atomic_load_global_monotonic_i8_sext_to_i32(ptr addrspace(1) %ptr) {79; GFX6-LABEL: atomic_load_global_monotonic_i8_sext_to_i32:80; GFX6: ; %bb.0:81; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)82; GFX6-NEXT: s_mov_b32 s6, 083; GFX6-NEXT: s_mov_b32 s7, 0x100f00084; GFX6-NEXT: s_mov_b64 s[4:5], 085; GFX6-NEXT: buffer_load_sbyte v0, v[0:1], s[4:7], 0 addr64 glc86; GFX6-NEXT: s_waitcnt vmcnt(0)87; GFX6-NEXT: s_setpc_b64 s[30:31]88;89; GFX7-LABEL: atomic_load_global_monotonic_i8_sext_to_i32:90; GFX7: ; %bb.0:91; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)92; GFX7-NEXT: flat_load_sbyte v0, v[0:1] glc93; GFX7-NEXT: s_waitcnt vmcnt(0)94; GFX7-NEXT: s_setpc_b64 s[30:31]95;96; GFX8-LABEL: atomic_load_global_monotonic_i8_sext_to_i32:97; GFX8: ; %bb.0:98; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)99; GFX8-NEXT: flat_load_sbyte v0, v[0:1] glc100; GFX8-NEXT: s_waitcnt vmcnt(0)101; GFX8-NEXT: s_setpc_b64 s[30:31]102;103; GFX9-LABEL: atomic_load_global_monotonic_i8_sext_to_i32:104; GFX9: ; %bb.0:105; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)106; GFX9-NEXT: global_load_sbyte v0, v[0:1], off glc107; GFX9-NEXT: s_waitcnt vmcnt(0)108; GFX9-NEXT: s_setpc_b64 s[30:31]109 %load = load atomic i8, ptr addrspace(1) %ptr monotonic, align 1110 %ext = sext i8 %load to i32111 ret i32 %ext112}113 114define i16 @atomic_load_global_monotonic_i8_zext_to_i16(ptr addrspace(1) %ptr) {115; GFX6-LABEL: atomic_load_global_monotonic_i8_zext_to_i16:116; GFX6: ; %bb.0:117; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)118; GFX6-NEXT: s_mov_b32 s6, 0119; GFX6-NEXT: s_mov_b32 s7, 0x100f000120; GFX6-NEXT: s_mov_b64 s[4:5], 0121; GFX6-NEXT: buffer_load_ubyte v0, v[0:1], s[4:7], 0 addr64 glc122; GFX6-NEXT: s_waitcnt vmcnt(0)123; GFX6-NEXT: s_setpc_b64 s[30:31]124;125; GFX7-LABEL: atomic_load_global_monotonic_i8_zext_to_i16:126; GFX7: ; %bb.0:127; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)128; GFX7-NEXT: flat_load_ubyte v0, v[0:1] glc129; GFX7-NEXT: s_waitcnt vmcnt(0)130; GFX7-NEXT: s_setpc_b64 s[30:31]131;132; GFX8-LABEL: atomic_load_global_monotonic_i8_zext_to_i16:133; GFX8: ; %bb.0:134; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)135; GFX8-NEXT: flat_load_ubyte v0, v[0:1] glc136; GFX8-NEXT: s_waitcnt vmcnt(0)137; GFX8-NEXT: s_setpc_b64 s[30:31]138;139; GFX9-LABEL: atomic_load_global_monotonic_i8_zext_to_i16:140; GFX9: ; %bb.0:141; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)142; GFX9-NEXT: global_load_ubyte v0, v[0:1], off glc143; GFX9-NEXT: s_waitcnt vmcnt(0)144; GFX9-NEXT: s_setpc_b64 s[30:31]145 %load = load atomic i8, ptr addrspace(1) %ptr monotonic, align 1146 %ext = zext i8 %load to i16147 ret i16 %ext148}149 150define i16 @atomic_load_global_monotonic_i8_sext_to_i16(ptr addrspace(1) %ptr) {151; GFX6-LABEL: atomic_load_global_monotonic_i8_sext_to_i16:152; GFX6: ; %bb.0:153; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)154; GFX6-NEXT: s_mov_b32 s6, 0155; GFX6-NEXT: s_mov_b32 s7, 0x100f000156; GFX6-NEXT: s_mov_b64 s[4:5], 0157; GFX6-NEXT: buffer_load_sbyte v0, v[0:1], s[4:7], 0 addr64 glc158; GFX6-NEXT: s_waitcnt vmcnt(0)159; GFX6-NEXT: s_setpc_b64 s[30:31]160;161; GFX7-LABEL: atomic_load_global_monotonic_i8_sext_to_i16:162; GFX7: ; %bb.0:163; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)164; GFX7-NEXT: flat_load_sbyte v0, v[0:1] glc165; GFX7-NEXT: s_waitcnt vmcnt(0)166; GFX7-NEXT: s_setpc_b64 s[30:31]167;168; GFX8-LABEL: atomic_load_global_monotonic_i8_sext_to_i16:169; GFX8: ; %bb.0:170; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)171; GFX8-NEXT: flat_load_sbyte v0, v[0:1] glc172; GFX8-NEXT: s_waitcnt vmcnt(0)173; GFX8-NEXT: s_setpc_b64 s[30:31]174;175; GFX9-LABEL: atomic_load_global_monotonic_i8_sext_to_i16:176; GFX9: ; %bb.0:177; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)178; GFX9-NEXT: global_load_sbyte v0, v[0:1], off glc179; GFX9-NEXT: s_waitcnt vmcnt(0)180; GFX9-NEXT: s_setpc_b64 s[30:31]181 %load = load atomic i8, ptr addrspace(1) %ptr monotonic, align 1182 %ext = sext i8 %load to i16183 ret i16 %ext184}185 186define i16 @atomic_load_global_monotonic_i16(ptr addrspace(1) %ptr) {187; GFX6-LABEL: atomic_load_global_monotonic_i16:188; GFX6: ; %bb.0:189; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)190; GFX6-NEXT: s_mov_b32 s6, 0191; GFX6-NEXT: s_mov_b32 s7, 0x100f000192; GFX6-NEXT: s_mov_b64 s[4:5], 0193; GFX6-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 glc194; GFX6-NEXT: s_waitcnt vmcnt(0)195; GFX6-NEXT: s_setpc_b64 s[30:31]196;197; GFX7-LABEL: atomic_load_global_monotonic_i16:198; GFX7: ; %bb.0:199; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)200; GFX7-NEXT: flat_load_ushort v0, v[0:1] glc201; GFX7-NEXT: s_waitcnt vmcnt(0)202; GFX7-NEXT: s_setpc_b64 s[30:31]203;204; GFX8-LABEL: atomic_load_global_monotonic_i16:205; GFX8: ; %bb.0:206; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)207; GFX8-NEXT: flat_load_ushort v0, v[0:1] glc208; GFX8-NEXT: s_waitcnt vmcnt(0)209; GFX8-NEXT: s_setpc_b64 s[30:31]210;211; GFX9-LABEL: atomic_load_global_monotonic_i16:212; GFX9: ; %bb.0:213; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)214; GFX9-NEXT: global_load_ushort v0, v[0:1], off glc215; GFX9-NEXT: s_waitcnt vmcnt(0)216; GFX9-NEXT: s_setpc_b64 s[30:31]217 %load = load atomic i16, ptr addrspace(1) %ptr monotonic, align 2218 ret i16 %load219}220 221define i32 @atomic_load_global_monotonic_i16_zext_to_i32(ptr addrspace(1) %ptr) {222; GFX6-LABEL: atomic_load_global_monotonic_i16_zext_to_i32:223; GFX6: ; %bb.0:224; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)225; GFX6-NEXT: s_mov_b32 s6, 0226; GFX6-NEXT: s_mov_b32 s7, 0x100f000227; GFX6-NEXT: s_mov_b64 s[4:5], 0228; GFX6-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 glc229; GFX6-NEXT: s_waitcnt vmcnt(0)230; GFX6-NEXT: s_setpc_b64 s[30:31]231;232; GFX7-LABEL: atomic_load_global_monotonic_i16_zext_to_i32:233; GFX7: ; %bb.0:234; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)235; GFX7-NEXT: flat_load_ushort v0, v[0:1] glc236; GFX7-NEXT: s_waitcnt vmcnt(0)237; GFX7-NEXT: s_setpc_b64 s[30:31]238;239; GFX8-LABEL: atomic_load_global_monotonic_i16_zext_to_i32:240; GFX8: ; %bb.0:241; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)242; GFX8-NEXT: flat_load_ushort v0, v[0:1] glc243; GFX8-NEXT: s_waitcnt vmcnt(0)244; GFX8-NEXT: s_setpc_b64 s[30:31]245;246; GFX9-LABEL: atomic_load_global_monotonic_i16_zext_to_i32:247; GFX9: ; %bb.0:248; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)249; GFX9-NEXT: global_load_ushort v0, v[0:1], off glc250; GFX9-NEXT: s_waitcnt vmcnt(0)251; GFX9-NEXT: s_setpc_b64 s[30:31]252 %load = load atomic i16, ptr addrspace(1) %ptr monotonic, align 2253 %ext = zext i16 %load to i32254 ret i32 %ext255}256 257define i32 @atomic_load_global_monotonic_i16_sext_to_i32(ptr addrspace(1) %ptr) {258; GFX6-LABEL: atomic_load_global_monotonic_i16_sext_to_i32:259; GFX6: ; %bb.0:260; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)261; GFX6-NEXT: s_mov_b32 s6, 0262; GFX6-NEXT: s_mov_b32 s7, 0x100f000263; GFX6-NEXT: s_mov_b64 s[4:5], 0264; GFX6-NEXT: buffer_load_sbyte v0, v[0:1], s[4:7], 0 addr64 glc265; GFX6-NEXT: s_waitcnt vmcnt(0)266; GFX6-NEXT: s_setpc_b64 s[30:31]267;268; GFX7-LABEL: atomic_load_global_monotonic_i16_sext_to_i32:269; GFX7: ; %bb.0:270; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)271; GFX7-NEXT: flat_load_sshort v0, v[0:1] glc272; GFX7-NEXT: s_waitcnt vmcnt(0)273; GFX7-NEXT: s_setpc_b64 s[30:31]274;275; GFX8-LABEL: atomic_load_global_monotonic_i16_sext_to_i32:276; GFX8: ; %bb.0:277; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)278; GFX8-NEXT: flat_load_sshort v0, v[0:1] glc279; GFX8-NEXT: s_waitcnt vmcnt(0)280; GFX8-NEXT: s_setpc_b64 s[30:31]281;282; GFX9-LABEL: atomic_load_global_monotonic_i16_sext_to_i32:283; GFX9: ; %bb.0:284; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)285; GFX9-NEXT: global_load_sshort v0, v[0:1], off glc286; GFX9-NEXT: s_waitcnt vmcnt(0)287; GFX9-NEXT: s_setpc_b64 s[30:31]288 %load = load atomic i16, ptr addrspace(1) %ptr monotonic, align 2289 %ext = sext i16 %load to i32290 ret i32 %ext291}292 293define half @atomic_load_global_monotonic_f16(ptr addrspace(1) %ptr) {294; GFX6-LABEL: atomic_load_global_monotonic_f16:295; GFX6: ; %bb.0:296; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)297; GFX6-NEXT: s_mov_b32 s6, 0298; GFX6-NEXT: s_mov_b32 s7, 0x100f000299; GFX6-NEXT: s_mov_b64 s[4:5], 0300; GFX6-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 glc301; GFX6-NEXT: s_waitcnt vmcnt(0)302; GFX6-NEXT: s_setpc_b64 s[30:31]303;304; GFX7-LABEL: atomic_load_global_monotonic_f16:305; GFX7: ; %bb.0:306; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)307; GFX7-NEXT: flat_load_ushort v0, v[0:1] glc308; GFX7-NEXT: s_waitcnt vmcnt(0)309; GFX7-NEXT: s_setpc_b64 s[30:31]310;311; GFX8-LABEL: atomic_load_global_monotonic_f16:312; GFX8: ; %bb.0:313; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)314; GFX8-NEXT: flat_load_ushort v0, v[0:1] glc315; GFX8-NEXT: s_waitcnt vmcnt(0)316; GFX8-NEXT: s_setpc_b64 s[30:31]317;318; GFX9-LABEL: atomic_load_global_monotonic_f16:319; GFX9: ; %bb.0:320; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)321; GFX9-NEXT: global_load_ushort v0, v[0:1], off glc322; GFX9-NEXT: s_waitcnt vmcnt(0)323; GFX9-NEXT: s_setpc_b64 s[30:31]324 %load = load atomic half, ptr addrspace(1) %ptr monotonic, align 2325 ret half %load326}327 328define bfloat @atomic_load_global_monotonic_bf16(ptr addrspace(1) %ptr) {329; GFX6-LABEL: atomic_load_global_monotonic_bf16:330; GFX6: ; %bb.0:331; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)332; GFX6-NEXT: s_mov_b32 s6, 0333; GFX6-NEXT: s_mov_b32 s7, 0x100f000334; GFX6-NEXT: s_mov_b64 s[4:5], 0335; GFX6-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 glc336; GFX6-NEXT: s_waitcnt vmcnt(0)337; GFX6-NEXT: s_setpc_b64 s[30:31]338;339; GFX7-LABEL: atomic_load_global_monotonic_bf16:340; GFX7: ; %bb.0:341; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)342; GFX7-NEXT: flat_load_ushort v0, v[0:1] glc343; GFX7-NEXT: s_waitcnt vmcnt(0)344; GFX7-NEXT: s_setpc_b64 s[30:31]345;346; GFX8-LABEL: atomic_load_global_monotonic_bf16:347; GFX8: ; %bb.0:348; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)349; GFX8-NEXT: flat_load_ushort v0, v[0:1] glc350; GFX8-NEXT: s_waitcnt vmcnt(0)351; GFX8-NEXT: s_setpc_b64 s[30:31]352;353; GFX9-LABEL: atomic_load_global_monotonic_bf16:354; GFX9: ; %bb.0:355; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)356; GFX9-NEXT: global_load_ushort v0, v[0:1], off glc357; GFX9-NEXT: s_waitcnt vmcnt(0)358; GFX9-NEXT: s_setpc_b64 s[30:31]359 %load = load atomic bfloat, ptr addrspace(1) %ptr monotonic, align 2360 ret bfloat %load361}362 363define i32 @atomic_load_global_monotonic_f16_zext_to_i32(ptr addrspace(1) %ptr) {364; GFX6-LABEL: atomic_load_global_monotonic_f16_zext_to_i32:365; GFX6: ; %bb.0:366; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)367; GFX6-NEXT: s_mov_b32 s6, 0368; GFX6-NEXT: s_mov_b32 s7, 0x100f000369; GFX6-NEXT: s_mov_b64 s[4:5], 0370; GFX6-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 glc371; GFX6-NEXT: s_waitcnt vmcnt(0)372; GFX6-NEXT: s_setpc_b64 s[30:31]373;374; GFX7-LABEL: atomic_load_global_monotonic_f16_zext_to_i32:375; GFX7: ; %bb.0:376; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)377; GFX7-NEXT: flat_load_ushort v0, v[0:1] glc378; GFX7-NEXT: s_waitcnt vmcnt(0)379; GFX7-NEXT: s_setpc_b64 s[30:31]380;381; GFX8-LABEL: atomic_load_global_monotonic_f16_zext_to_i32:382; GFX8: ; %bb.0:383; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)384; GFX8-NEXT: flat_load_ushort v0, v[0:1] glc385; GFX8-NEXT: s_waitcnt vmcnt(0)386; GFX8-NEXT: s_setpc_b64 s[30:31]387;388; GFX9-LABEL: atomic_load_global_monotonic_f16_zext_to_i32:389; GFX9: ; %bb.0:390; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)391; GFX9-NEXT: global_load_ushort v0, v[0:1], off glc392; GFX9-NEXT: s_waitcnt vmcnt(0)393; GFX9-NEXT: s_setpc_b64 s[30:31]394 %load = load atomic half, ptr addrspace(1) %ptr monotonic, align 2395 %cast = bitcast half %load to i16396 %ext = zext i16 %cast to i32397 ret i32 %ext398}399 400define i32 @atomic_load_global_monotonic_bf16_zext_to_i32(ptr addrspace(1) %ptr) {401; GFX6-LABEL: atomic_load_global_monotonic_bf16_zext_to_i32:402; GFX6: ; %bb.0:403; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)404; GFX6-NEXT: s_mov_b32 s6, 0405; GFX6-NEXT: s_mov_b32 s7, 0x100f000406; GFX6-NEXT: s_mov_b64 s[4:5], 0407; GFX6-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 glc408; GFX6-NEXT: s_waitcnt vmcnt(0)409; GFX6-NEXT: s_setpc_b64 s[30:31]410;411; GFX7-LABEL: atomic_load_global_monotonic_bf16_zext_to_i32:412; GFX7: ; %bb.0:413; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)414; GFX7-NEXT: flat_load_ushort v0, v[0:1] glc415; GFX7-NEXT: s_waitcnt vmcnt(0)416; GFX7-NEXT: s_setpc_b64 s[30:31]417;418; GFX8-LABEL: atomic_load_global_monotonic_bf16_zext_to_i32:419; GFX8: ; %bb.0:420; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)421; GFX8-NEXT: flat_load_ushort v0, v[0:1] glc422; GFX8-NEXT: s_waitcnt vmcnt(0)423; GFX8-NEXT: s_setpc_b64 s[30:31]424;425; GFX9-LABEL: atomic_load_global_monotonic_bf16_zext_to_i32:426; GFX9: ; %bb.0:427; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)428; GFX9-NEXT: global_load_ushort v0, v[0:1], off glc429; GFX9-NEXT: s_waitcnt vmcnt(0)430; GFX9-NEXT: s_setpc_b64 s[30:31]431 %load = load atomic bfloat, ptr addrspace(1) %ptr monotonic, align 2432 %cast = bitcast bfloat %load to i16433 %ext = zext i16 %cast to i32434 ret i32 %ext435}436 437define i32 @atomic_load_global_monotonic_i16_d16_hi_shift(ptr addrspace(1) %ptr) {438; GFX6-LABEL: atomic_load_global_monotonic_i16_d16_hi_shift:439; GFX6: ; %bb.0:440; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)441; GFX6-NEXT: s_mov_b32 s6, 0442; GFX6-NEXT: s_mov_b32 s7, 0x100f000443; GFX6-NEXT: s_mov_b64 s[4:5], 0444; GFX6-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 glc445; GFX6-NEXT: s_waitcnt vmcnt(0)446; GFX6-NEXT: v_lshlrev_b32_e32 v0, 16, v0447; GFX6-NEXT: s_setpc_b64 s[30:31]448;449; GFX7-LABEL: atomic_load_global_monotonic_i16_d16_hi_shift:450; GFX7: ; %bb.0:451; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)452; GFX7-NEXT: flat_load_ushort v0, v[0:1] glc453; GFX7-NEXT: s_waitcnt vmcnt(0)454; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0455; GFX7-NEXT: s_setpc_b64 s[30:31]456;457; GFX8-LABEL: atomic_load_global_monotonic_i16_d16_hi_shift:458; GFX8: ; %bb.0:459; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)460; GFX8-NEXT: flat_load_ushort v0, v[0:1] glc461; GFX8-NEXT: s_waitcnt vmcnt(0)462; GFX8-NEXT: v_lshlrev_b32_e32 v0, 16, v0463; GFX8-NEXT: s_setpc_b64 s[30:31]464;465; GFX9-LABEL: atomic_load_global_monotonic_i16_d16_hi_shift:466; GFX9: ; %bb.0:467; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)468; GFX9-NEXT: global_load_ushort v0, v[0:1], off glc469; GFX9-NEXT: s_waitcnt vmcnt(0)470; GFX9-NEXT: v_lshlrev_b32_e32 v0, 16, v0471; GFX9-NEXT: s_setpc_b64 s[30:31]472 %load = load atomic i16, ptr addrspace(1) %ptr monotonic, align 2473 %ext = zext i16 %load to i32474 %shl = shl i32 %ext, 16475 ret i32 %shl476}477 478define <2 x i16> @atomic_load_global_monotonic_i16_d16_hi_vector_insert(ptr addrspace(1) %ptr, <2 x i16> %vec) {479; GFX6-LABEL: atomic_load_global_monotonic_i16_d16_hi_vector_insert:480; GFX6: ; %bb.0:481; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)482; GFX6-NEXT: s_mov_b32 s6, 0483; GFX6-NEXT: s_mov_b32 s7, 0x100f000484; GFX6-NEXT: s_mov_b64 s[4:5], 0485; GFX6-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 glc486; GFX6-NEXT: v_lshlrev_b32_e32 v1, 16, v3487; GFX6-NEXT: v_and_b32_e32 v2, 0xffff, v2488; GFX6-NEXT: v_or_b32_e32 v1, v1, v2489; GFX6-NEXT: v_and_b32_e32 v1, 0xffff, v1490; GFX6-NEXT: s_waitcnt vmcnt(0)491; GFX6-NEXT: v_lshlrev_b32_e32 v0, 16, v0492; GFX6-NEXT: v_or_b32_e32 v0, v1, v0493; GFX6-NEXT: v_lshrrev_b32_e32 v1, 16, v0494; GFX6-NEXT: s_setpc_b64 s[30:31]495;496; GFX7-LABEL: atomic_load_global_monotonic_i16_d16_hi_vector_insert:497; GFX7: ; %bb.0:498; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)499; GFX7-NEXT: flat_load_ushort v0, v[0:1] glc500; GFX7-NEXT: v_lshlrev_b32_e32 v1, 16, v3501; GFX7-NEXT: v_and_b32_e32 v2, 0xffff, v2502; GFX7-NEXT: v_or_b32_e32 v1, v1, v2503; GFX7-NEXT: v_and_b32_e32 v1, 0xffff, v1504; GFX7-NEXT: s_waitcnt vmcnt(0)505; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0506; GFX7-NEXT: v_or_b32_e32 v0, v1, v0507; GFX7-NEXT: v_lshrrev_b32_e32 v1, 16, v0508; GFX7-NEXT: s_setpc_b64 s[30:31]509;510; GFX8-LABEL: atomic_load_global_monotonic_i16_d16_hi_vector_insert:511; GFX8: ; %bb.0:512; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)513; GFX8-NEXT: flat_load_ushort v0, v[0:1] glc514; GFX8-NEXT: s_waitcnt vmcnt(0)515; GFX8-NEXT: v_lshlrev_b32_e32 v0, 16, v0516; GFX8-NEXT: v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD517; GFX8-NEXT: s_setpc_b64 s[30:31]518;519; GFX9-LABEL: atomic_load_global_monotonic_i16_d16_hi_vector_insert:520; GFX9: ; %bb.0:521; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)522; GFX9-NEXT: global_load_ushort v3, v[0:1], off glc523; GFX9-NEXT: s_nop 0524; GFX9-NEXT: global_load_short_d16_hi v2, v[0:1], off glc525; GFX9-NEXT: s_waitcnt vmcnt(0)526; GFX9-NEXT: v_mov_b32_e32 v0, v2527; GFX9-NEXT: s_setpc_b64 s[30:31]528 %load = load atomic i16, ptr addrspace(1) %ptr monotonic, align 2529 %insert = insertelement <2 x i16> %vec, i16 %load, i32 1530 ret <2 x i16> %insert531}532 533define i32 @atomic_load_global_monotonic_i16_d16_lo_or(ptr addrspace(1) %ptr, i16 %high) {534; GFX6-LABEL: atomic_load_global_monotonic_i16_d16_lo_or:535; GFX6: ; %bb.0:536; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)537; GFX6-NEXT: s_mov_b32 s6, 0538; GFX6-NEXT: s_mov_b32 s7, 0x100f000539; GFX6-NEXT: s_mov_b64 s[4:5], 0540; GFX6-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 glc541; GFX6-NEXT: v_and_b32_e32 v1, 0xffff, v2542; GFX6-NEXT: v_lshlrev_b32_e32 v1, 16, v1543; GFX6-NEXT: s_waitcnt vmcnt(0)544; GFX6-NEXT: v_or_b32_e32 v0, v1, v0545; GFX6-NEXT: s_setpc_b64 s[30:31]546;547; GFX7-LABEL: atomic_load_global_monotonic_i16_d16_lo_or:548; GFX7: ; %bb.0:549; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)550; GFX7-NEXT: flat_load_ushort v0, v[0:1] glc551; GFX7-NEXT: v_and_b32_e32 v1, 0xffff, v2552; GFX7-NEXT: v_lshlrev_b32_e32 v1, 16, v1553; GFX7-NEXT: s_waitcnt vmcnt(0)554; GFX7-NEXT: v_or_b32_e32 v0, v1, v0555; GFX7-NEXT: s_setpc_b64 s[30:31]556;557; GFX8-LABEL: atomic_load_global_monotonic_i16_d16_lo_or:558; GFX8: ; %bb.0:559; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)560; GFX8-NEXT: flat_load_ushort v0, v[0:1] glc561; GFX8-NEXT: v_and_b32_e32 v1, 0xffff, v2562; GFX8-NEXT: v_lshlrev_b32_e32 v1, 16, v1563; GFX8-NEXT: s_waitcnt vmcnt(0)564; GFX8-NEXT: v_or_b32_e32 v0, v1, v0565; GFX8-NEXT: s_setpc_b64 s[30:31]566;567; GFX9-LABEL: atomic_load_global_monotonic_i16_d16_lo_or:568; GFX9: ; %bb.0:569; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)570; GFX9-NEXT: global_load_ushort v0, v[0:1], off glc571; GFX9-NEXT: v_and_b32_e32 v1, 0xffff, v2572; GFX9-NEXT: s_waitcnt vmcnt(0)573; GFX9-NEXT: v_lshl_or_b32 v0, v1, 16, v0574; GFX9-NEXT: s_setpc_b64 s[30:31]575 %load = load atomic i16, ptr addrspace(1) %ptr monotonic, align 2576 %ext = zext i16 %load to i32577 %high.ext = zext i16 %high to i32578 %shl = shl i32 %high.ext, 16579 %or = or i32 %shl, %ext580 ret i32 %or581}582 583define <2 x i16> @atomic_load_global_monotonic_i16_d16_lo_vector_insert(ptr addrspace(1) %ptr, <2 x i16> %vec) {584; GFX6-LABEL: atomic_load_global_monotonic_i16_d16_lo_vector_insert:585; GFX6: ; %bb.0:586; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)587; GFX6-NEXT: s_mov_b32 s6, 0588; GFX6-NEXT: s_mov_b32 s7, 0x100f000589; GFX6-NEXT: s_mov_b64 s[4:5], 0590; GFX6-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 glc591; GFX6-NEXT: v_lshlrev_b32_e32 v1, 16, v3592; GFX6-NEXT: v_and_b32_e32 v2, 0xffff, v2593; GFX6-NEXT: v_or_b32_e32 v1, v1, v2594; GFX6-NEXT: v_and_b32_e32 v1, 0xffff0000, v1595; GFX6-NEXT: s_waitcnt vmcnt(0)596; GFX6-NEXT: v_or_b32_e32 v0, v1, v0597; GFX6-NEXT: v_lshrrev_b32_e32 v1, 16, v0598; GFX6-NEXT: s_setpc_b64 s[30:31]599;600; GFX7-LABEL: atomic_load_global_monotonic_i16_d16_lo_vector_insert:601; GFX7: ; %bb.0:602; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)603; GFX7-NEXT: flat_load_ushort v0, v[0:1] glc604; GFX7-NEXT: v_lshlrev_b32_e32 v1, 16, v3605; GFX7-NEXT: v_and_b32_e32 v2, 0xffff, v2606; GFX7-NEXT: v_or_b32_e32 v1, v1, v2607; GFX7-NEXT: v_and_b32_e32 v1, 0xffff0000, v1608; GFX7-NEXT: s_waitcnt vmcnt(0)609; GFX7-NEXT: v_or_b32_e32 v0, v1, v0610; GFX7-NEXT: v_lshrrev_b32_e32 v1, 16, v0611; GFX7-NEXT: s_setpc_b64 s[30:31]612;613; GFX8-LABEL: atomic_load_global_monotonic_i16_d16_lo_vector_insert:614; GFX8: ; %bb.0:615; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)616; GFX8-NEXT: flat_load_ushort v0, v[0:1] glc617; GFX8-NEXT: v_and_b32_e32 v1, 0xffff0000, v2618; GFX8-NEXT: s_waitcnt vmcnt(0)619; GFX8-NEXT: v_or_b32_e32 v0, v1, v0620; GFX8-NEXT: s_setpc_b64 s[30:31]621;622; GFX9-LABEL: atomic_load_global_monotonic_i16_d16_lo_vector_insert:623; GFX9: ; %bb.0:624; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)625; GFX9-NEXT: global_load_ushort v3, v[0:1], off glc626; GFX9-NEXT: s_nop 0627; GFX9-NEXT: global_load_short_d16 v2, v[0:1], off glc628; GFX9-NEXT: s_waitcnt vmcnt(0)629; GFX9-NEXT: v_mov_b32_e32 v0, v2630; GFX9-NEXT: s_setpc_b64 s[30:31]631 %load = load atomic i16, ptr addrspace(1) %ptr monotonic, align 2632 %insert = insertelement <2 x i16> %vec, i16 %load, i32 0633 ret <2 x i16> %insert634}635;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:636; GCN: {{.*}}637