brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.4 KiB · d03bbde Raw
273 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=kaveri < %s | FileCheck -check-prefixes=GCN,GFX7 %s3; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-amd-amdhsa -mcpu=fiji < %s | FileCheck -check-prefixes=GCN,GFX8 %s4; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9 %s5 6define i8 @atomic_load_flat_monotonic_i8(ptr %ptr) {7; GCN-LABEL: atomic_load_flat_monotonic_i8:8; GCN:       ; %bb.0:9; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10; GCN-NEXT:    flat_load_ubyte v0, v[0:1] glc11; GCN-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)12; GCN-NEXT:    s_setpc_b64 s[30:31]13  %load = load atomic i8, ptr %ptr monotonic, align 114  ret i8 %load15}16 17define i32 @atomic_load_flat_monotonic_i8_zext_to_i32(ptr %ptr) {18; GCN-LABEL: atomic_load_flat_monotonic_i8_zext_to_i32:19; GCN:       ; %bb.0:20; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)21; GCN-NEXT:    flat_load_ubyte v0, v[0:1] glc22; GCN-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)23; GCN-NEXT:    s_setpc_b64 s[30:31]24  %load = load atomic i8, ptr %ptr monotonic, align 125  %ext = zext i8 %load to i3226  ret i32 %ext27}28 29define i32 @atomic_load_flat_monotonic_i8_sext_to_i32(ptr %ptr) {30; GCN-LABEL: atomic_load_flat_monotonic_i8_sext_to_i32:31; GCN:       ; %bb.0:32; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)33; GCN-NEXT:    flat_load_sbyte v0, v[0:1] glc34; GCN-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)35; GCN-NEXT:    s_setpc_b64 s[30:31]36  %load = load atomic i8, ptr %ptr monotonic, align 137  %ext = sext i8 %load to i3238  ret i32 %ext39}40 41define i16 @atomic_load_flat_monotonic_i8_zext_to_i16(ptr %ptr) {42; GCN-LABEL: atomic_load_flat_monotonic_i8_zext_to_i16:43; GCN:       ; %bb.0:44; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)45; GCN-NEXT:    flat_load_ubyte v0, v[0:1] glc46; GCN-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)47; GCN-NEXT:    s_setpc_b64 s[30:31]48  %load = load atomic i8, ptr %ptr monotonic, align 149  %ext = zext i8 %load to i1650  ret i16 %ext51}52 53define i16 @atomic_load_flat_monotonic_i8_sext_to_i16(ptr %ptr) {54; GCN-LABEL: atomic_load_flat_monotonic_i8_sext_to_i16:55; GCN:       ; %bb.0:56; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)57; GCN-NEXT:    flat_load_sbyte v0, v[0:1] glc58; GCN-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)59; GCN-NEXT:    s_setpc_b64 s[30:31]60  %load = load atomic i8, ptr %ptr monotonic, align 161  %ext = sext i8 %load to i1662  ret i16 %ext63}64 65define i16 @atomic_load_flat_monotonic_i16(ptr %ptr) {66; GCN-LABEL: atomic_load_flat_monotonic_i16:67; GCN:       ; %bb.0:68; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)69; GCN-NEXT:    flat_load_ushort v0, v[0:1] glc70; GCN-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)71; GCN-NEXT:    s_setpc_b64 s[30:31]72  %load = load atomic i16, ptr %ptr monotonic, align 273  ret i16 %load74}75 76define i32 @atomic_load_flat_monotonic_i16_zext_to_i32(ptr %ptr) {77; GCN-LABEL: atomic_load_flat_monotonic_i16_zext_to_i32:78; GCN:       ; %bb.0:79; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)80; GCN-NEXT:    flat_load_ushort v0, v[0:1] glc81; GCN-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)82; GCN-NEXT:    s_setpc_b64 s[30:31]83  %load = load atomic i16, ptr %ptr monotonic, align 284  %ext = zext i16 %load to i3285  ret i32 %ext86}87 88define i32 @atomic_load_flat_monotonic_i16_sext_to_i32(ptr %ptr) {89; GCN-LABEL: atomic_load_flat_monotonic_i16_sext_to_i32:90; GCN:       ; %bb.0:91; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)92; GCN-NEXT:    flat_load_sshort v0, v[0:1] glc93; GCN-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)94; GCN-NEXT:    s_setpc_b64 s[30:31]95  %load = load atomic i16, ptr %ptr monotonic, align 296  %ext = sext i16 %load to i3297  ret i32 %ext98}99 100define half @atomic_load_flat_monotonic_f16(ptr %ptr) {101; GCN-LABEL: atomic_load_flat_monotonic_f16:102; GCN:       ; %bb.0:103; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)104; GCN-NEXT:    flat_load_ushort v0, v[0:1] glc105; GCN-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)106; GCN-NEXT:    s_setpc_b64 s[30:31]107  %load = load atomic half, ptr %ptr monotonic, align 2108  ret half %load109}110 111define bfloat @atomic_load_flat_monotonic_bf16(ptr %ptr) {112; GCN-LABEL: atomic_load_flat_monotonic_bf16:113; GCN:       ; %bb.0:114; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)115; GCN-NEXT:    flat_load_ushort v0, v[0:1] glc116; GCN-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)117; GCN-NEXT:    s_setpc_b64 s[30:31]118  %load = load atomic bfloat, ptr %ptr monotonic, align 2119  ret bfloat %load120}121 122define i32 @atomic_load_flat_monotonic_f16_zext_to_i32(ptr %ptr) {123; GCN-LABEL: atomic_load_flat_monotonic_f16_zext_to_i32:124; GCN:       ; %bb.0:125; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)126; GCN-NEXT:    flat_load_ushort v0, v[0:1] glc127; GCN-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)128; GCN-NEXT:    s_setpc_b64 s[30:31]129  %load = load atomic half, ptr %ptr monotonic, align 2130  %cast = bitcast half %load to i16131  %ext = zext i16 %cast to i32132  ret i32 %ext133}134 135define i32 @atomic_load_flat_monotonic_bf16_zext_to_i32(ptr %ptr) {136; GCN-LABEL: atomic_load_flat_monotonic_bf16_zext_to_i32:137; GCN:       ; %bb.0:138; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)139; GCN-NEXT:    flat_load_ushort v0, v[0:1] glc140; GCN-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)141; GCN-NEXT:    s_setpc_b64 s[30:31]142  %load = load atomic bfloat, ptr %ptr monotonic, align 2143  %cast = bitcast bfloat %load to i16144  %ext = zext i16 %cast to i32145  ret i32 %ext146}147 148define i32 @atomic_load_flat_monotonic_i16_d16_hi_shift(ptr %ptr) {149; GCN-LABEL: atomic_load_flat_monotonic_i16_d16_hi_shift:150; GCN:       ; %bb.0:151; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)152; GCN-NEXT:    flat_load_ushort v0, v[0:1] glc153; GCN-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)154; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v0155; GCN-NEXT:    s_setpc_b64 s[30:31]156  %load = load atomic i16, ptr %ptr monotonic, align 2157  %ext = zext i16 %load to i32158  %shl = shl i32 %ext, 16159  ret i32 %shl160}161 162define <2 x i16> @atomic_load_flat_monotonic_i16_d16_hi_vector_insert(ptr %ptr, <2 x i16> %vec) {163; GFX7-LABEL: atomic_load_flat_monotonic_i16_d16_hi_vector_insert:164; GFX7:       ; %bb.0:165; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)166; GFX7-NEXT:    flat_load_ushort v0, v[0:1] glc167; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 16, v3168; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff, v2169; GFX7-NEXT:    v_or_b32_e32 v1, v1, v2170; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff, v1171; GFX7-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)172; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0173; GFX7-NEXT:    v_or_b32_e32 v0, v1, v0174; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v0175; GFX7-NEXT:    s_setpc_b64 s[30:31]176;177; GFX8-LABEL: atomic_load_flat_monotonic_i16_d16_hi_vector_insert:178; GFX8:       ; %bb.0:179; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)180; GFX8-NEXT:    flat_load_ushort v0, v[0:1] glc181; GFX8-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)182; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0183; GFX8-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD184; GFX8-NEXT:    s_setpc_b64 s[30:31]185;186; GFX9-LABEL: atomic_load_flat_monotonic_i16_d16_hi_vector_insert:187; GFX9:       ; %bb.0:188; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)189; GFX9-NEXT:    flat_load_ushort v3, v[0:1] glc190; GFX9-NEXT:    s_nop 0191; GFX9-NEXT:    flat_load_short_d16_hi v2, v[0:1] glc192; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)193; GFX9-NEXT:    v_mov_b32_e32 v0, v2194; GFX9-NEXT:    s_setpc_b64 s[30:31]195  %load = load atomic i16, ptr %ptr monotonic, align 2196  %insert = insertelement <2 x i16> %vec, i16 %load, i32 1197  ret <2 x i16> %insert198}199 200define i32 @atomic_load_flat_monotonic_i16_d16_lo_or(ptr %ptr, i16 %high) {201; GFX7-LABEL: atomic_load_flat_monotonic_i16_d16_lo_or:202; GFX7:       ; %bb.0:203; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)204; GFX7-NEXT:    flat_load_ushort v0, v[0:1] glc205; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff, v2206; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 16, v1207; GFX7-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)208; GFX7-NEXT:    v_or_b32_e32 v0, v1, v0209; GFX7-NEXT:    s_setpc_b64 s[30:31]210;211; GFX8-LABEL: atomic_load_flat_monotonic_i16_d16_lo_or:212; GFX8:       ; %bb.0:213; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)214; GFX8-NEXT:    flat_load_ushort v0, v[0:1] glc215; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff, v2216; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1217; GFX8-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)218; GFX8-NEXT:    v_or_b32_e32 v0, v1, v0219; GFX8-NEXT:    s_setpc_b64 s[30:31]220;221; GFX9-LABEL: atomic_load_flat_monotonic_i16_d16_lo_or:222; GFX9:       ; %bb.0:223; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)224; GFX9-NEXT:    flat_load_ushort v0, v[0:1] glc225; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v2226; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)227; GFX9-NEXT:    v_lshl_or_b32 v0, v1, 16, v0228; GFX9-NEXT:    s_setpc_b64 s[30:31]229  %load = load atomic i16, ptr %ptr monotonic, align 2230  %ext = zext i16 %load to i32231  %high.ext = zext i16 %high to i32232  %shl = shl i32 %high.ext, 16233  %or = or i32 %shl, %ext234  ret i32 %or235}236 237define <2 x i16> @atomic_load_flat_monotonic_i16_d16_lo_vector_insert(ptr %ptr, <2 x i16> %vec) {238; GFX7-LABEL: atomic_load_flat_monotonic_i16_d16_lo_vector_insert:239; GFX7:       ; %bb.0:240; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)241; GFX7-NEXT:    flat_load_ushort v0, v[0:1] glc242; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 16, v3243; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff, v2244; GFX7-NEXT:    v_or_b32_e32 v1, v1, v2245; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1246; GFX7-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)247; GFX7-NEXT:    v_or_b32_e32 v0, v1, v0248; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v0249; GFX7-NEXT:    s_setpc_b64 s[30:31]250;251; GFX8-LABEL: atomic_load_flat_monotonic_i16_d16_lo_vector_insert:252; GFX8:       ; %bb.0:253; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)254; GFX8-NEXT:    flat_load_ushort v0, v[0:1] glc255; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2256; GFX8-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)257; GFX8-NEXT:    v_or_b32_e32 v0, v1, v0258; GFX8-NEXT:    s_setpc_b64 s[30:31]259;260; GFX9-LABEL: atomic_load_flat_monotonic_i16_d16_lo_vector_insert:261; GFX9:       ; %bb.0:262; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)263; GFX9-NEXT:    flat_load_ushort v3, v[0:1] glc264; GFX9-NEXT:    s_nop 0265; GFX9-NEXT:    flat_load_short_d16 v2, v[0:1] glc266; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)267; GFX9-NEXT:    v_mov_b32_e32 v0, v2268; GFX9-NEXT:    s_setpc_b64 s[30:31]269  %load = load atomic i16, ptr %ptr monotonic, align 2270  %insert = insertelement <2 x i16> %vec, i16 %load, i32 0271  ret <2 x i16> %insert272}273