brintos

brintos / llvm-project-archived public Read only

0
0
Text · 166.1 KiB · 2752649 Raw
3615 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=gfx802 < %s | FileCheck -check-prefixes=GFX802-SDAG %s3; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=gfx1010 < %s | FileCheck -check-prefixes=GFX1010-SDAG %s4; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=gfx1100 -amdgpu-enable-vopd=0 < %s | FileCheck -check-prefixes=GFX1100-SDAG %s5 6; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=gfx802 -global-isel -global-isel-abort=2 < %s | FileCheck -check-prefixes=GFX802-GISEL %s7; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=gfx1010 -global-isel -global-isel-abort=2 < %s | FileCheck -check-prefixes=GFX1010-GISEL %s8; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=gfx1100 -amdgpu-enable-vopd=0 -global-isel -global-isel-abort=2 < %s | FileCheck -check-prefixes=GFX1100-GISEL %s9 10declare i32 @llvm.amdgcn.writelane(i32, i32, i32) #011declare i64 @llvm.amdgcn.writelane.i64(i64, i32, i64) #012declare double @llvm.amdgcn.writelane.f64(double, i32, double) #013 14define amdgpu_kernel void @test_writelane_sreg_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1) #1 {15; GFX802-SDAG-LABEL: test_writelane_sreg_i32:16; GFX802-SDAG:       ; %bb.0:17; GFX802-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x018; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s1719; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s1320; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 821; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)22; GFX802-SDAG-NEXT:    s_mov_b32 m0, s323; GFX802-SDAG-NEXT:    s_load_dword s3, s[0:1], 0x024; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, s025; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s126; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)27; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, s328; GFX802-SDAG-NEXT:    v_writelane_b32 v2, s2, m029; GFX802-SDAG-NEXT:    flat_store_dword v[0:1], v230; GFX802-SDAG-NEXT:    s_endpgm31;32; GFX1010-SDAG-LABEL: test_writelane_sreg_i32:33; GFX1010-SDAG:       ; %bb.0:34; GFX1010-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x035; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, 036; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)37; GFX1010-SDAG-NEXT:    s_load_dword s4, s[0:1], 0x038; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)39; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, s440; GFX1010-SDAG-NEXT:    v_writelane_b32 v0, s2, s341; GFX1010-SDAG-NEXT:    global_store_dword v1, v0, s[0:1]42; GFX1010-SDAG-NEXT:    s_endpgm43;44; GFX1100-SDAG-LABEL: test_writelane_sreg_i32:45; GFX1100-SDAG:       ; %bb.0:46; GFX1100-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x047; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, 048; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)49; GFX1100-SDAG-NEXT:    s_load_b32 s4, s[0:1], 0x050; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)51; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, s452; GFX1100-SDAG-NEXT:    v_writelane_b32 v0, s2, s353; GFX1100-SDAG-NEXT:    global_store_b32 v1, v0, s[0:1]54; GFX1100-SDAG-NEXT:    s_endpgm55;56; GFX802-GISEL-LABEL: test_writelane_sreg_i32:57; GFX802-GISEL:       ; %bb.0:58; GFX802-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x059; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s1760; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s1361; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 862; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)63; GFX802-GISEL-NEXT:    s_mov_b32 m0, s364; GFX802-GISEL-NEXT:    s_load_dword s3, s[0:1], 0x065; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, s066; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s167; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)68; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, s369; GFX802-GISEL-NEXT:    v_writelane_b32 v2, s2, m070; GFX802-GISEL-NEXT:    flat_store_dword v[0:1], v271; GFX802-GISEL-NEXT:    s_endpgm72;73; GFX1010-GISEL-LABEL: test_writelane_sreg_i32:74; GFX1010-GISEL:       ; %bb.0:75; GFX1010-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x076; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, 077; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)78; GFX1010-GISEL-NEXT:    s_load_dword s4, s[0:1], 0x079; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)80; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, s481; GFX1010-GISEL-NEXT:    v_writelane_b32 v0, s2, s382; GFX1010-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]83; GFX1010-GISEL-NEXT:    s_endpgm84;85; GFX1100-GISEL-LABEL: test_writelane_sreg_i32:86; GFX1100-GISEL:       ; %bb.0:87; GFX1100-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x088; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, 089; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)90; GFX1100-GISEL-NEXT:    s_load_b32 s4, s[0:1], 0x091; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)92; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, s493; GFX1100-GISEL-NEXT:    v_writelane_b32 v0, s2, s394; GFX1100-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]95; GFX1100-GISEL-NEXT:    s_endpgm96  %oldval = load i32, ptr addrspace(1) %out97  %writelane = call i32 @llvm.amdgcn.writelane.i32(i32 %src0, i32 %src1, i32 %oldval)98  store i32 %writelane, ptr addrspace(1) %out, align 499  ret void100}101 102define amdgpu_kernel void @test_writelane_sreg_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1) #1 {103; GFX802-SDAG-LABEL: test_writelane_sreg_i64:104; GFX802-SDAG:       ; %bb.0:105; GFX802-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0106; GFX802-SDAG-NEXT:    s_load_dword s6, s[8:9], 0x10107; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s17108; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s13109; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8110; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)111; GFX802-SDAG-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0112; GFX802-SDAG-NEXT:    s_mov_b32 m0, s6113; GFX802-SDAG-NEXT:    v_mov_b32_e32 v3, s1114; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, s0115; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)116; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s5117; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, s4118; GFX802-SDAG-NEXT:    v_writelane_b32 v1, s3, m0119; GFX802-SDAG-NEXT:    v_writelane_b32 v0, s2, m0120; GFX802-SDAG-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]121; GFX802-SDAG-NEXT:    s_endpgm122;123; GFX1010-SDAG-LABEL: test_writelane_sreg_i64:124; GFX1010-SDAG:       ; %bb.0:125; GFX1010-SDAG-NEXT:    s_clause 0x1126; GFX1010-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0127; GFX1010-SDAG-NEXT:    s_load_dword s6, s[8:9], 0x10128; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v2, 0129; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)130; GFX1010-SDAG-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0131; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)132; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, s5133; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, s4134; GFX1010-SDAG-NEXT:    v_writelane_b32 v1, s3, s6135; GFX1010-SDAG-NEXT:    v_writelane_b32 v0, s2, s6136; GFX1010-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]137; GFX1010-SDAG-NEXT:    s_endpgm138;139; GFX1100-SDAG-LABEL: test_writelane_sreg_i64:140; GFX1100-SDAG:       ; %bb.0:141; GFX1100-SDAG-NEXT:    s_clause 0x1142; GFX1100-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0143; GFX1100-SDAG-NEXT:    s_load_b32 s6, s[4:5], 0x10144; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v2, 0145; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)146; GFX1100-SDAG-NEXT:    s_load_b64 s[4:5], s[0:1], 0x0147; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)148; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, s5149; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, s4150; GFX1100-SDAG-NEXT:    v_writelane_b32 v1, s3, s6151; GFX1100-SDAG-NEXT:    v_writelane_b32 v0, s2, s6152; GFX1100-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]153; GFX1100-SDAG-NEXT:    s_endpgm154;155; GFX802-GISEL-LABEL: test_writelane_sreg_i64:156; GFX802-GISEL:       ; %bb.0:157; GFX802-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0158; GFX802-GISEL-NEXT:    s_load_dword s6, s[8:9], 0x10159; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s17160; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s13161; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8162; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)163; GFX802-GISEL-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0164; GFX802-GISEL-NEXT:    s_mov_b32 m0, s6165; GFX802-GISEL-NEXT:    v_mov_b32_e32 v3, s1166; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, s0167; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)168; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, s4169; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s5170; GFX802-GISEL-NEXT:    v_writelane_b32 v0, s2, m0171; GFX802-GISEL-NEXT:    v_writelane_b32 v1, s3, m0172; GFX802-GISEL-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]173; GFX802-GISEL-NEXT:    s_endpgm174;175; GFX1010-GISEL-LABEL: test_writelane_sreg_i64:176; GFX1010-GISEL:       ; %bb.0:177; GFX1010-GISEL-NEXT:    s_clause 0x1178; GFX1010-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0179; GFX1010-GISEL-NEXT:    s_load_dword s6, s[8:9], 0x10180; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v2, 0181; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)182; GFX1010-GISEL-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0183; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)184; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, s4185; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, s5186; GFX1010-GISEL-NEXT:    v_writelane_b32 v0, s2, s6187; GFX1010-GISEL-NEXT:    v_writelane_b32 v1, s3, s6188; GFX1010-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]189; GFX1010-GISEL-NEXT:    s_endpgm190;191; GFX1100-GISEL-LABEL: test_writelane_sreg_i64:192; GFX1100-GISEL:       ; %bb.0:193; GFX1100-GISEL-NEXT:    s_clause 0x1194; GFX1100-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0195; GFX1100-GISEL-NEXT:    s_load_b32 s6, s[4:5], 0x10196; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v2, 0197; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)198; GFX1100-GISEL-NEXT:    s_load_b64 s[4:5], s[0:1], 0x0199; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)200; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, s4201; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, s5202; GFX1100-GISEL-NEXT:    v_writelane_b32 v0, s2, s6203; GFX1100-GISEL-NEXT:    v_writelane_b32 v1, s3, s6204; GFX1100-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]205; GFX1100-GISEL-NEXT:    s_endpgm206  %oldval = load i64, ptr addrspace(1) %out207  %writelane = call i64 @llvm.amdgcn.writelane.i64(i64 %src0, i32 %src1, i64 %oldval)208  store i64 %writelane, ptr addrspace(1) %out, align 4209  ret void210}211 212define amdgpu_kernel void @test_writelane_sreg_f64(ptr addrspace(1) %out, double %src0, i32 %src1) #1 {213; GFX802-SDAG-LABEL: test_writelane_sreg_f64:214; GFX802-SDAG:       ; %bb.0:215; GFX802-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0216; GFX802-SDAG-NEXT:    s_load_dword s6, s[8:9], 0x10217; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s17218; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s13219; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8220; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)221; GFX802-SDAG-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0222; GFX802-SDAG-NEXT:    s_mov_b32 m0, s6223; GFX802-SDAG-NEXT:    v_mov_b32_e32 v3, s1224; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, s0225; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)226; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s5227; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, s4228; GFX802-SDAG-NEXT:    v_writelane_b32 v1, s3, m0229; GFX802-SDAG-NEXT:    v_writelane_b32 v0, s2, m0230; GFX802-SDAG-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]231; GFX802-SDAG-NEXT:    s_endpgm232;233; GFX1010-SDAG-LABEL: test_writelane_sreg_f64:234; GFX1010-SDAG:       ; %bb.0:235; GFX1010-SDAG-NEXT:    s_clause 0x1236; GFX1010-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0237; GFX1010-SDAG-NEXT:    s_load_dword s6, s[8:9], 0x10238; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v2, 0239; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)240; GFX1010-SDAG-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0241; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)242; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, s5243; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, s4244; GFX1010-SDAG-NEXT:    v_writelane_b32 v1, s3, s6245; GFX1010-SDAG-NEXT:    v_writelane_b32 v0, s2, s6246; GFX1010-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]247; GFX1010-SDAG-NEXT:    s_endpgm248;249; GFX1100-SDAG-LABEL: test_writelane_sreg_f64:250; GFX1100-SDAG:       ; %bb.0:251; GFX1100-SDAG-NEXT:    s_clause 0x1252; GFX1100-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0253; GFX1100-SDAG-NEXT:    s_load_b32 s6, s[4:5], 0x10254; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v2, 0255; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)256; GFX1100-SDAG-NEXT:    s_load_b64 s[4:5], s[0:1], 0x0257; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)258; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, s5259; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, s4260; GFX1100-SDAG-NEXT:    v_writelane_b32 v1, s3, s6261; GFX1100-SDAG-NEXT:    v_writelane_b32 v0, s2, s6262; GFX1100-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]263; GFX1100-SDAG-NEXT:    s_endpgm264;265; GFX802-GISEL-LABEL: test_writelane_sreg_f64:266; GFX802-GISEL:       ; %bb.0:267; GFX802-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0268; GFX802-GISEL-NEXT:    s_load_dword s6, s[8:9], 0x10269; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s17270; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s13271; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8272; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)273; GFX802-GISEL-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0274; GFX802-GISEL-NEXT:    s_mov_b32 m0, s6275; GFX802-GISEL-NEXT:    v_mov_b32_e32 v3, s1276; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, s0277; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)278; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, s4279; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s5280; GFX802-GISEL-NEXT:    v_writelane_b32 v0, s2, m0281; GFX802-GISEL-NEXT:    v_writelane_b32 v1, s3, m0282; GFX802-GISEL-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]283; GFX802-GISEL-NEXT:    s_endpgm284;285; GFX1010-GISEL-LABEL: test_writelane_sreg_f64:286; GFX1010-GISEL:       ; %bb.0:287; GFX1010-GISEL-NEXT:    s_clause 0x1288; GFX1010-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0289; GFX1010-GISEL-NEXT:    s_load_dword s6, s[8:9], 0x10290; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v2, 0291; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)292; GFX1010-GISEL-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0293; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)294; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, s4295; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, s5296; GFX1010-GISEL-NEXT:    v_writelane_b32 v0, s2, s6297; GFX1010-GISEL-NEXT:    v_writelane_b32 v1, s3, s6298; GFX1010-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]299; GFX1010-GISEL-NEXT:    s_endpgm300;301; GFX1100-GISEL-LABEL: test_writelane_sreg_f64:302; GFX1100-GISEL:       ; %bb.0:303; GFX1100-GISEL-NEXT:    s_clause 0x1304; GFX1100-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0305; GFX1100-GISEL-NEXT:    s_load_b32 s6, s[4:5], 0x10306; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v2, 0307; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)308; GFX1100-GISEL-NEXT:    s_load_b64 s[4:5], s[0:1], 0x0309; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)310; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, s4311; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, s5312; GFX1100-GISEL-NEXT:    v_writelane_b32 v0, s2, s6313; GFX1100-GISEL-NEXT:    v_writelane_b32 v1, s3, s6314; GFX1100-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]315; GFX1100-GISEL-NEXT:    s_endpgm316  %oldval = load double, ptr addrspace(1) %out317  %writelane = call double @llvm.amdgcn.writelane.f64(double %src0, i32 %src1, double %oldval)318  store double %writelane, ptr addrspace(1) %out, align 4319  ret void320}321 322define amdgpu_kernel void @test_writelane_imm_sreg_i32(ptr addrspace(1) %out, i32 %src1) #1 {323; GFX802-SDAG-LABEL: test_writelane_imm_sreg_i32:324; GFX802-SDAG:       ; %bb.0:325; GFX802-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0326; GFX802-SDAG-NEXT:    s_load_dword s2, s[8:9], 0x8327; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s17328; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s13329; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8330; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)331; GFX802-SDAG-NEXT:    s_load_dword s3, s[0:1], 0x0332; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, s0333; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s1334; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)335; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, s3336; GFX802-SDAG-NEXT:    v_writelane_b32 v2, 32, s2337; GFX802-SDAG-NEXT:    flat_store_dword v[0:1], v2338; GFX802-SDAG-NEXT:    s_endpgm339;340; GFX1010-SDAG-LABEL: test_writelane_imm_sreg_i32:341; GFX1010-SDAG:       ; %bb.0:342; GFX1010-SDAG-NEXT:    s_clause 0x1343; GFX1010-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0344; GFX1010-SDAG-NEXT:    s_load_dword s2, s[8:9], 0x8345; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, 0346; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)347; GFX1010-SDAG-NEXT:    s_load_dword s3, s[0:1], 0x0348; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)349; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, s3350; GFX1010-SDAG-NEXT:    v_writelane_b32 v0, 32, s2351; GFX1010-SDAG-NEXT:    global_store_dword v1, v0, s[0:1]352; GFX1010-SDAG-NEXT:    s_endpgm353;354; GFX1100-SDAG-LABEL: test_writelane_imm_sreg_i32:355; GFX1100-SDAG:       ; %bb.0:356; GFX1100-SDAG-NEXT:    s_clause 0x1357; GFX1100-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0358; GFX1100-SDAG-NEXT:    s_load_b32 s2, s[4:5], 0x8359; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, 0360; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)361; GFX1100-SDAG-NEXT:    s_load_b32 s3, s[0:1], 0x0362; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)363; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, s3364; GFX1100-SDAG-NEXT:    v_writelane_b32 v0, 32, s2365; GFX1100-SDAG-NEXT:    global_store_b32 v1, v0, s[0:1]366; GFX1100-SDAG-NEXT:    s_endpgm367;368; GFX802-GISEL-LABEL: test_writelane_imm_sreg_i32:369; GFX802-GISEL:       ; %bb.0:370; GFX802-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0371; GFX802-GISEL-NEXT:    s_load_dword s2, s[8:9], 0x8372; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s17373; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s13374; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8375; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)376; GFX802-GISEL-NEXT:    s_load_dword s3, s[0:1], 0x0377; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, s0378; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s1379; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)380; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, s3381; GFX802-GISEL-NEXT:    v_writelane_b32 v2, 32, s2382; GFX802-GISEL-NEXT:    flat_store_dword v[0:1], v2383; GFX802-GISEL-NEXT:    s_endpgm384;385; GFX1010-GISEL-LABEL: test_writelane_imm_sreg_i32:386; GFX1010-GISEL:       ; %bb.0:387; GFX1010-GISEL-NEXT:    s_clause 0x1388; GFX1010-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0389; GFX1010-GISEL-NEXT:    s_load_dword s2, s[8:9], 0x8390; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, 0391; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)392; GFX1010-GISEL-NEXT:    s_load_dword s3, s[0:1], 0x0393; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)394; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, s3395; GFX1010-GISEL-NEXT:    v_writelane_b32 v0, 32, s2396; GFX1010-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]397; GFX1010-GISEL-NEXT:    s_endpgm398;399; GFX1100-GISEL-LABEL: test_writelane_imm_sreg_i32:400; GFX1100-GISEL:       ; %bb.0:401; GFX1100-GISEL-NEXT:    s_clause 0x1402; GFX1100-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0403; GFX1100-GISEL-NEXT:    s_load_b32 s2, s[4:5], 0x8404; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, 0405; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)406; GFX1100-GISEL-NEXT:    s_load_b32 s3, s[0:1], 0x0407; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)408; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, s3409; GFX1100-GISEL-NEXT:    v_writelane_b32 v0, 32, s2410; GFX1100-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]411; GFX1100-GISEL-NEXT:    s_endpgm412  %oldval = load i32, ptr addrspace(1) %out413  %writelane = call i32 @llvm.amdgcn.writelane.i32(i32 32, i32 %src1, i32 %oldval)414  store i32 %writelane, ptr addrspace(1) %out, align 4415  ret void416}417 418define amdgpu_kernel void @test_writelane_imm_sreg_i64(ptr addrspace(1) %out, i32 %src1) #1 {419; GFX802-SDAG-LABEL: test_writelane_imm_sreg_i64:420; GFX802-SDAG:       ; %bb.0:421; GFX802-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0422; GFX802-SDAG-NEXT:    s_load_dword s4, s[8:9], 0x8423; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s17424; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s13425; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8426; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)427; GFX802-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0428; GFX802-SDAG-NEXT:    v_mov_b32_e32 v3, s1429; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, s0430; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)431; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s3432; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, s2433; GFX802-SDAG-NEXT:    v_writelane_b32 v1, 0, s4434; GFX802-SDAG-NEXT:    v_writelane_b32 v0, 32, s4435; GFX802-SDAG-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]436; GFX802-SDAG-NEXT:    s_endpgm437;438; GFX1010-SDAG-LABEL: test_writelane_imm_sreg_i64:439; GFX1010-SDAG:       ; %bb.0:440; GFX1010-SDAG-NEXT:    s_clause 0x1441; GFX1010-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0442; GFX1010-SDAG-NEXT:    s_load_dword s4, s[8:9], 0x8443; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v2, 0444; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)445; GFX1010-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0446; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)447; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, s3448; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, s2449; GFX1010-SDAG-NEXT:    v_writelane_b32 v1, 0, s4450; GFX1010-SDAG-NEXT:    v_writelane_b32 v0, 32, s4451; GFX1010-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]452; GFX1010-SDAG-NEXT:    s_endpgm453;454; GFX1100-SDAG-LABEL: test_writelane_imm_sreg_i64:455; GFX1100-SDAG:       ; %bb.0:456; GFX1100-SDAG-NEXT:    s_clause 0x1457; GFX1100-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0458; GFX1100-SDAG-NEXT:    s_load_b32 s4, s[4:5], 0x8459; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v2, 0460; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)461; GFX1100-SDAG-NEXT:    s_load_b64 s[2:3], s[0:1], 0x0462; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)463; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, s3464; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, s2465; GFX1100-SDAG-NEXT:    v_writelane_b32 v1, 0, s4466; GFX1100-SDAG-NEXT:    v_writelane_b32 v0, 32, s4467; GFX1100-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]468; GFX1100-SDAG-NEXT:    s_endpgm469;470; GFX802-GISEL-LABEL: test_writelane_imm_sreg_i64:471; GFX802-GISEL:       ; %bb.0:472; GFX802-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0473; GFX802-GISEL-NEXT:    s_load_dword s4, s[8:9], 0x8474; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s17475; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s13476; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8477; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)478; GFX802-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0479; GFX802-GISEL-NEXT:    v_mov_b32_e32 v3, s1480; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, s0481; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)482; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, s2483; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s3484; GFX802-GISEL-NEXT:    v_writelane_b32 v0, 32, s4485; GFX802-GISEL-NEXT:    v_writelane_b32 v1, 0, s4486; GFX802-GISEL-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]487; GFX802-GISEL-NEXT:    s_endpgm488;489; GFX1010-GISEL-LABEL: test_writelane_imm_sreg_i64:490; GFX1010-GISEL:       ; %bb.0:491; GFX1010-GISEL-NEXT:    s_clause 0x1492; GFX1010-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0493; GFX1010-GISEL-NEXT:    s_load_dword s4, s[8:9], 0x8494; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v2, 0495; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)496; GFX1010-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0497; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)498; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, s2499; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, s3500; GFX1010-GISEL-NEXT:    v_writelane_b32 v0, 32, s4501; GFX1010-GISEL-NEXT:    v_writelane_b32 v1, 0, s4502; GFX1010-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]503; GFX1010-GISEL-NEXT:    s_endpgm504;505; GFX1100-GISEL-LABEL: test_writelane_imm_sreg_i64:506; GFX1100-GISEL:       ; %bb.0:507; GFX1100-GISEL-NEXT:    s_clause 0x1508; GFX1100-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0509; GFX1100-GISEL-NEXT:    s_load_b32 s4, s[4:5], 0x8510; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v2, 0511; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)512; GFX1100-GISEL-NEXT:    s_load_b64 s[2:3], s[0:1], 0x0513; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)514; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, s2515; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, s3516; GFX1100-GISEL-NEXT:    v_writelane_b32 v0, 32, s4517; GFX1100-GISEL-NEXT:    v_writelane_b32 v1, 0, s4518; GFX1100-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]519; GFX1100-GISEL-NEXT:    s_endpgm520  %oldval = load i64, ptr addrspace(1) %out521  %writelane = call i64 @llvm.amdgcn.writelane.i64(i64 32, i32 %src1, i64 %oldval)522  store i64 %writelane, ptr addrspace(1) %out, align 4523  ret void524}525 526define amdgpu_kernel void @test_writelane_imm_sreg_f64(ptr addrspace(1) %out, i32 %src1) #1 {527; GFX802-SDAG-LABEL: test_writelane_imm_sreg_f64:528; GFX802-SDAG:       ; %bb.0:529; GFX802-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0530; GFX802-SDAG-NEXT:    s_load_dword s4, s[8:9], 0x8531; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s17532; GFX802-SDAG-NEXT:    s_mov_b32 s5, 0x40400000533; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s13534; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)535; GFX802-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0536; GFX802-SDAG-NEXT:    s_mov_b32 m0, s4537; GFX802-SDAG-NEXT:    v_mov_b32_e32 v3, s1538; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8539; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, s0540; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)541; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s3542; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, s2543; GFX802-SDAG-NEXT:    v_writelane_b32 v1, s5, m0544; GFX802-SDAG-NEXT:    v_writelane_b32 v0, 0, s4545; GFX802-SDAG-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]546; GFX802-SDAG-NEXT:    s_endpgm547;548; GFX1010-SDAG-LABEL: test_writelane_imm_sreg_f64:549; GFX1010-SDAG:       ; %bb.0:550; GFX1010-SDAG-NEXT:    s_clause 0x1551; GFX1010-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0552; GFX1010-SDAG-NEXT:    s_load_dword s4, s[8:9], 0x8553; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v2, 0554; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)555; GFX1010-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0556; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)557; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, s3558; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, s2559; GFX1010-SDAG-NEXT:    s_mov_b32 s2, 0x40400000560; GFX1010-SDAG-NEXT:    v_writelane_b32 v1, s2, s4561; GFX1010-SDAG-NEXT:    v_writelane_b32 v0, 0, s4562; GFX1010-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]563; GFX1010-SDAG-NEXT:    s_endpgm564;565; GFX1100-SDAG-LABEL: test_writelane_imm_sreg_f64:566; GFX1100-SDAG:       ; %bb.0:567; GFX1100-SDAG-NEXT:    s_clause 0x1568; GFX1100-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0569; GFX1100-SDAG-NEXT:    s_load_b32 s4, s[4:5], 0x8570; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v2, 0571; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)572; GFX1100-SDAG-NEXT:    s_load_b64 s[2:3], s[0:1], 0x0573; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)574; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, s3575; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, s2576; GFX1100-SDAG-NEXT:    s_mov_b32 s2, 0x40400000577; GFX1100-SDAG-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)578; GFX1100-SDAG-NEXT:    v_writelane_b32 v1, s2, s4579; GFX1100-SDAG-NEXT:    v_writelane_b32 v0, 0, s4580; GFX1100-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]581; GFX1100-SDAG-NEXT:    s_endpgm582;583; GFX802-GISEL-LABEL: test_writelane_imm_sreg_f64:584; GFX802-GISEL:       ; %bb.0:585; GFX802-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0586; GFX802-GISEL-NEXT:    s_load_dword s4, s[8:9], 0x8587; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s17588; GFX802-GISEL-NEXT:    s_mov_b32 s5, 0x40400000589; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s13590; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)591; GFX802-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0592; GFX802-GISEL-NEXT:    s_mov_b32 m0, s4593; GFX802-GISEL-NEXT:    v_mov_b32_e32 v3, s1594; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8595; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, s0596; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)597; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, s2598; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s3599; GFX802-GISEL-NEXT:    v_writelane_b32 v0, 0, s4600; GFX802-GISEL-NEXT:    v_writelane_b32 v1, s5, m0601; GFX802-GISEL-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]602; GFX802-GISEL-NEXT:    s_endpgm603;604; GFX1010-GISEL-LABEL: test_writelane_imm_sreg_f64:605; GFX1010-GISEL:       ; %bb.0:606; GFX1010-GISEL-NEXT:    s_clause 0x1607; GFX1010-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0608; GFX1010-GISEL-NEXT:    s_load_dword s4, s[8:9], 0x8609; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v2, 0610; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)611; GFX1010-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0612; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)613; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, s2614; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, s3615; GFX1010-GISEL-NEXT:    s_mov_b32 s2, 0x40400000616; GFX1010-GISEL-NEXT:    v_writelane_b32 v0, 0, s4617; GFX1010-GISEL-NEXT:    v_writelane_b32 v1, s2, s4618; GFX1010-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]619; GFX1010-GISEL-NEXT:    s_endpgm620;621; GFX1100-GISEL-LABEL: test_writelane_imm_sreg_f64:622; GFX1100-GISEL:       ; %bb.0:623; GFX1100-GISEL-NEXT:    s_clause 0x1624; GFX1100-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0625; GFX1100-GISEL-NEXT:    s_load_b32 s4, s[4:5], 0x8626; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v2, 0627; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)628; GFX1100-GISEL-NEXT:    s_load_b64 s[2:3], s[0:1], 0x0629; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)630; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, s2631; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, s3632; GFX1100-GISEL-NEXT:    s_mov_b32 s2, 0x40400000633; GFX1100-GISEL-NEXT:    v_writelane_b32 v0, 0, s4634; GFX1100-GISEL-NEXT:    v_writelane_b32 v1, s2, s4635; GFX1100-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]636; GFX1100-GISEL-NEXT:    s_endpgm637  %oldval = load double, ptr addrspace(1) %out638  %writelane = call double @llvm.amdgcn.writelane.f64(double 32.0, i32 %src1, double %oldval)639  store double %writelane, ptr addrspace(1) %out, align 4640  ret void641}642 643define amdgpu_kernel void @test_writelane_vreg_lane_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {644; GFX802-SDAG-LABEL: test_writelane_vreg_lane_i32:645; GFX802-SDAG:       ; %bb.0:646; GFX802-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0647; GFX802-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 3, v0648; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s17649; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s13650; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8651; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)652; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s3653; GFX802-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v0654; GFX802-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc655; GFX802-SDAG-NEXT:    v_add_u32_e32 v0, vcc, 4, v0656; GFX802-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc657; GFX802-SDAG-NEXT:    flat_load_dword v0, v[0:1]658; GFX802-SDAG-NEXT:    s_load_dword s2, s[0:1], 0x0659; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)660; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, s2661; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)662; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s2, v0663; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, s0664; GFX802-SDAG-NEXT:    s_nop 2665; GFX802-SDAG-NEXT:    v_writelane_b32 v2, 12, s2666; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s1667; GFX802-SDAG-NEXT:    flat_store_dword v[0:1], v2668; GFX802-SDAG-NEXT:    s_endpgm669;670; GFX1010-SDAG-LABEL: test_writelane_vreg_lane_i32:671; GFX1010-SDAG:       ; %bb.0:672; GFX1010-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0673; GFX1010-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 3, v0674; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)675; GFX1010-SDAG-NEXT:    global_load_dword v0, v0, s[2:3] offset:4676; GFX1010-SDAG-NEXT:    s_waitcnt_depctr depctr_vm_vsrc(0)677; GFX1010-SDAG-NEXT:    s_load_dword s2, s[0:1], 0x0678; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)679; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, s2680; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0)681; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s2, v0682; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, 0683; GFX1010-SDAG-NEXT:    v_writelane_b32 v1, 12, s2684; GFX1010-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]685; GFX1010-SDAG-NEXT:    s_endpgm686;687; GFX1100-SDAG-LABEL: test_writelane_vreg_lane_i32:688; GFX1100-SDAG:       ; %bb.0:689; GFX1100-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0690; GFX1100-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0691; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)692; GFX1100-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 3, v0693; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)694; GFX1100-SDAG-NEXT:    global_load_b32 v0, v0, s[2:3] offset:4695; GFX1100-SDAG-NEXT:    s_load_b32 s2, s[0:1], 0x0696; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)697; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, s2698; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0)699; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s2, v0700; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, 0701; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)702; GFX1100-SDAG-NEXT:    v_writelane_b32 v1, 12, s2703; GFX1100-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]704; GFX1100-SDAG-NEXT:    s_endpgm705;706; GFX802-GISEL-LABEL: test_writelane_vreg_lane_i32:707; GFX802-GISEL:       ; %bb.0:708; GFX802-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0709; GFX802-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 3, v0710; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s17711; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s13712; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8713; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)714; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, s2715; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s3716; GFX802-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v2717; GFX802-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc718; GFX802-GISEL-NEXT:    v_add_u32_e32 v0, vcc, 4, v0719; GFX802-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc720; GFX802-GISEL-NEXT:    flat_load_dword v0, v[0:1]721; GFX802-GISEL-NEXT:    s_load_dword s2, s[0:1], 0x0722; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)723; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, s2724; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)725; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s2, v0726; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, s0727; GFX802-GISEL-NEXT:    s_nop 2728; GFX802-GISEL-NEXT:    v_writelane_b32 v2, 12, s2729; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s1730; GFX802-GISEL-NEXT:    flat_store_dword v[0:1], v2731; GFX802-GISEL-NEXT:    s_endpgm732;733; GFX1010-GISEL-LABEL: test_writelane_vreg_lane_i32:734; GFX1010-GISEL:       ; %bb.0:735; GFX1010-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0736; GFX1010-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 3, v0737; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)738; GFX1010-GISEL-NEXT:    global_load_dword v0, v0, s[2:3] offset:4739; GFX1010-GISEL-NEXT:    s_waitcnt_depctr depctr_vm_vsrc(0)740; GFX1010-GISEL-NEXT:    s_load_dword s2, s[0:1], 0x0741; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)742; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, s2743; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0)744; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s2, v0745; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, 0746; GFX1010-GISEL-NEXT:    v_writelane_b32 v1, 12, s2747; GFX1010-GISEL-NEXT:    global_store_dword v0, v1, s[0:1]748; GFX1010-GISEL-NEXT:    s_endpgm749;750; GFX1100-GISEL-LABEL: test_writelane_vreg_lane_i32:751; GFX1100-GISEL:       ; %bb.0:752; GFX1100-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0753; GFX1100-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0754; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)755; GFX1100-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 3, v0756; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)757; GFX1100-GISEL-NEXT:    global_load_b32 v0, v0, s[2:3] offset:4758; GFX1100-GISEL-NEXT:    s_load_b32 s2, s[0:1], 0x0759; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)760; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, s2761; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0)762; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s2, v0763; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, 0764; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)765; GFX1100-GISEL-NEXT:    v_writelane_b32 v1, 12, s2766; GFX1100-GISEL-NEXT:    global_store_b32 v0, v1, s[0:1]767; GFX1100-GISEL-NEXT:    s_endpgm768  %tid = call i32 @llvm.amdgcn.workitem.id.x()769  %gep.in = getelementptr <2 x i32>, ptr addrspace(1) %in, i32 %tid770  %args = load <2 x i32>, ptr addrspace(1) %gep.in771  %oldval = load i32, ptr addrspace(1) %out772  %lane = extractelement <2 x i32> %args, i32 1773  %writelane = call i32 @llvm.amdgcn.writelane.i32(i32 12, i32 %lane, i32 %oldval)774  store i32 %writelane, ptr addrspace(1) %out, align 4775  ret void776}777 778define amdgpu_kernel void @test_writelane_vreg_lane_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {779; GFX802-SDAG-LABEL: test_writelane_vreg_lane_i64:780; GFX802-SDAG:       ; %bb.0:781; GFX802-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0782; GFX802-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 4, v0783; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s17784; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s13785; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8786; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)787; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s3788; GFX802-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v0789; GFX802-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc790; GFX802-SDAG-NEXT:    v_add_u32_e32 v0, vcc, 8, v0791; GFX802-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc792; GFX802-SDAG-NEXT:    flat_load_dword v2, v[0:1]793; GFX802-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0794; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)795; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s3796; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, s2797; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)798; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s2, v2799; GFX802-SDAG-NEXT:    v_mov_b32_e32 v3, s1800; GFX802-SDAG-NEXT:    s_nop 2801; GFX802-SDAG-NEXT:    v_writelane_b32 v1, 0, s2802; GFX802-SDAG-NEXT:    v_writelane_b32 v0, 12, s2803; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, s0804; GFX802-SDAG-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]805; GFX802-SDAG-NEXT:    s_endpgm806;807; GFX1010-SDAG-LABEL: test_writelane_vreg_lane_i64:808; GFX1010-SDAG:       ; %bb.0:809; GFX1010-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0810; GFX1010-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 4, v0811; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v2, 0812; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)813; GFX1010-SDAG-NEXT:    global_load_dword v0, v0, s[2:3] offset:8814; GFX1010-SDAG-NEXT:    s_waitcnt_depctr depctr_vm_vsrc(0)815; GFX1010-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0816; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)817; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, s3818; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0)819; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s3, v0820; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, s2821; GFX1010-SDAG-NEXT:    v_writelane_b32 v1, 0, s3822; GFX1010-SDAG-NEXT:    v_writelane_b32 v0, 12, s3823; GFX1010-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]824; GFX1010-SDAG-NEXT:    s_endpgm825;826; GFX1100-SDAG-LABEL: test_writelane_vreg_lane_i64:827; GFX1100-SDAG:       ; %bb.0:828; GFX1100-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0829; GFX1100-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0830; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v2, 0831; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)832; GFX1100-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 4, v0833; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)834; GFX1100-SDAG-NEXT:    global_load_b32 v0, v0, s[2:3] offset:8835; GFX1100-SDAG-NEXT:    s_load_b64 s[2:3], s[0:1], 0x0836; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)837; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, s3838; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0)839; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s3, v0840; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, s2841; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)842; GFX1100-SDAG-NEXT:    v_writelane_b32 v1, 0, s3843; GFX1100-SDAG-NEXT:    v_writelane_b32 v0, 12, s3844; GFX1100-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]845; GFX1100-SDAG-NEXT:    s_endpgm846;847; GFX802-GISEL-LABEL: test_writelane_vreg_lane_i64:848; GFX802-GISEL:       ; %bb.0:849; GFX802-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0850; GFX802-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 4, v0851; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s17852; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s13853; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8854; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)855; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, s2856; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s3857; GFX802-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v2858; GFX802-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc859; GFX802-GISEL-NEXT:    v_add_u32_e32 v0, vcc, 8, v0860; GFX802-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc861; GFX802-GISEL-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]862; GFX802-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0863; GFX802-GISEL-NEXT:    v_mov_b32_e32 v4, s1864; GFX802-GISEL-NEXT:    v_mov_b32_e32 v3, s0865; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)866; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s2867; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, s3868; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s2, v0869; GFX802-GISEL-NEXT:    s_nop 3870; GFX802-GISEL-NEXT:    v_writelane_b32 v1, 12, s2871; GFX802-GISEL-NEXT:    v_writelane_b32 v2, 0, s2872; GFX802-GISEL-NEXT:    flat_store_dwordx2 v[3:4], v[1:2]873; GFX802-GISEL-NEXT:    s_endpgm874;875; GFX1010-GISEL-LABEL: test_writelane_vreg_lane_i64:876; GFX1010-GISEL:       ; %bb.0:877; GFX1010-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0878; GFX1010-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 4, v0879; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)880; GFX1010-GISEL-NEXT:    global_load_dwordx2 v[0:1], v0, s[2:3] offset:8881; GFX1010-GISEL-NEXT:    s_waitcnt_depctr depctr_vm_vsrc(0)882; GFX1010-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0883; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)884; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, s2885; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v2, s3886; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s2, v0887; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, 0888; GFX1010-GISEL-NEXT:    v_writelane_b32 v1, 12, s2889; GFX1010-GISEL-NEXT:    v_writelane_b32 v2, 0, s2890; GFX1010-GISEL-NEXT:    global_store_dwordx2 v0, v[1:2], s[0:1]891; GFX1010-GISEL-NEXT:    s_endpgm892;893; GFX1100-GISEL-LABEL: test_writelane_vreg_lane_i64:894; GFX1100-GISEL:       ; %bb.0:895; GFX1100-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0896; GFX1100-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0897; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)898; GFX1100-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 4, v0899; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)900; GFX1100-GISEL-NEXT:    global_load_b64 v[0:1], v0, s[2:3] offset:8901; GFX1100-GISEL-NEXT:    s_load_b64 s[2:3], s[0:1], 0x0902; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)903; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, s2904; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v2, s3905; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s2, v0906; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, 0907; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)908; GFX1100-GISEL-NEXT:    v_writelane_b32 v1, 12, s2909; GFX1100-GISEL-NEXT:    v_writelane_b32 v2, 0, s2910; GFX1100-GISEL-NEXT:    global_store_b64 v0, v[1:2], s[0:1]911; GFX1100-GISEL-NEXT:    s_endpgm912  %tid = call i32 @llvm.amdgcn.workitem.id.x()913  %gep.in = getelementptr <2 x i64>, ptr addrspace(1) %in, i32 %tid914  %args = load <2 x i64>, ptr addrspace(1) %gep.in915  %oldval = load i64, ptr addrspace(1) %out916  %lane = extractelement <2 x i64> %args, i32 1917  %lane32 = trunc i64 %lane to i32918  %writelane = call i64 @llvm.amdgcn.writelane.i64(i64 12, i32 %lane32, i64 %oldval)919  store i64 %writelane, ptr addrspace(1) %out, align 4920  ret void921}922 923define amdgpu_kernel void @test_writelane_vreg_lane_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) #1 {924; GFX802-SDAG-LABEL: test_writelane_vreg_lane_f64:925; GFX802-SDAG:       ; %bb.0:926; GFX802-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0927; GFX802-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 4, v0928; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s17929; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s13930; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 8931; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)932; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s3933; GFX802-SDAG-NEXT:    v_add_u32_e32 v0, vcc, s2, v0934; GFX802-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc935; GFX802-SDAG-NEXT:    v_add_u32_e32 v0, vcc, 8, v0936; GFX802-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc937; GFX802-SDAG-NEXT:    flat_load_dword v2, v[0:1]938; GFX802-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0939; GFX802-SDAG-NEXT:    s_mov_b32 s4, 0x40280000940; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)941; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, s2942; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s3943; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)944; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s2, v2945; GFX802-SDAG-NEXT:    s_mov_b32 m0, s2946; GFX802-SDAG-NEXT:    v_mov_b32_e32 v3, s1947; GFX802-SDAG-NEXT:    s_nop 1948; GFX802-SDAG-NEXT:    v_writelane_b32 v0, 0, s2949; GFX802-SDAG-NEXT:    v_writelane_b32 v1, s4, m0950; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, s0951; GFX802-SDAG-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]952; GFX802-SDAG-NEXT:    s_endpgm953;954; GFX1010-SDAG-LABEL: test_writelane_vreg_lane_f64:955; GFX1010-SDAG:       ; %bb.0:956; GFX1010-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0957; GFX1010-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 4, v0958; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v2, 0959; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)960; GFX1010-SDAG-NEXT:    global_load_dword v0, v0, s[2:3] offset:8961; GFX1010-SDAG-NEXT:    s_waitcnt_depctr depctr_vm_vsrc(0)962; GFX1010-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0963; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)964; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, s3965; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0)966; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s3, v0967; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, s2968; GFX1010-SDAG-NEXT:    s_mov_b32 s2, 0x40280000969; GFX1010-SDAG-NEXT:    v_writelane_b32 v1, s2, s3970; GFX1010-SDAG-NEXT:    v_writelane_b32 v0, 0, s3971; GFX1010-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]972; GFX1010-SDAG-NEXT:    s_endpgm973;974; GFX1100-SDAG-LABEL: test_writelane_vreg_lane_f64:975; GFX1100-SDAG:       ; %bb.0:976; GFX1100-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x0977; GFX1100-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0978; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v2, 0979; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)980; GFX1100-SDAG-NEXT:    v_lshlrev_b32_e32 v0, 4, v0981; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)982; GFX1100-SDAG-NEXT:    global_load_b32 v0, v0, s[2:3] offset:8983; GFX1100-SDAG-NEXT:    s_load_b64 s[2:3], s[0:1], 0x0984; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)985; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, s3986; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0)987; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s3, v0988; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, s2989; GFX1100-SDAG-NEXT:    s_mov_b32 s2, 0x40280000990; GFX1100-SDAG-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)991; GFX1100-SDAG-NEXT:    v_writelane_b32 v1, s2, s3992; GFX1100-SDAG-NEXT:    v_writelane_b32 v0, 0, s3993; GFX1100-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]994; GFX1100-SDAG-NEXT:    s_endpgm995;996; GFX802-GISEL-LABEL: test_writelane_vreg_lane_f64:997; GFX802-GISEL:       ; %bb.0:998; GFX802-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x0999; GFX802-GISEL-NEXT:    v_lshlrev_b32_e32 v2, 4, v01000; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s171001; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s131002; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81003; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1004; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, s21005; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s31006; GFX802-GISEL-NEXT:    v_add_u32_e32 v0, vcc, v0, v21007; GFX802-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1008; GFX802-GISEL-NEXT:    v_add_u32_e32 v0, vcc, 8, v01009; GFX802-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1010; GFX802-GISEL-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]1011; GFX802-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x01012; GFX802-GISEL-NEXT:    s_mov_b32 s4, 0x402800001013; GFX802-GISEL-NEXT:    v_mov_b32_e32 v4, s11014; GFX802-GISEL-NEXT:    v_mov_b32_e32 v3, s01015; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1016; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s21017; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, s31018; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s2, v01019; GFX802-GISEL-NEXT:    s_mov_b32 m0, s21020; GFX802-GISEL-NEXT:    s_nop 21021; GFX802-GISEL-NEXT:    v_writelane_b32 v1, 0, s21022; GFX802-GISEL-NEXT:    v_writelane_b32 v2, s4, m01023; GFX802-GISEL-NEXT:    flat_store_dwordx2 v[3:4], v[1:2]1024; GFX802-GISEL-NEXT:    s_endpgm1025;1026; GFX1010-GISEL-LABEL: test_writelane_vreg_lane_f64:1027; GFX1010-GISEL:       ; %bb.0:1028; GFX1010-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01029; GFX1010-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 4, v01030; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1031; GFX1010-GISEL-NEXT:    global_load_dwordx2 v[0:1], v0, s[2:3] offset:81032; GFX1010-GISEL-NEXT:    s_waitcnt_depctr depctr_vm_vsrc(0)1033; GFX1010-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x01034; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1035; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, s21036; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v2, s31037; GFX1010-GISEL-NEXT:    s_mov_b32 s3, 0x402800001038; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s2, v01039; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, 01040; GFX1010-GISEL-NEXT:    v_writelane_b32 v1, 0, s21041; GFX1010-GISEL-NEXT:    v_writelane_b32 v2, s3, s21042; GFX1010-GISEL-NEXT:    global_store_dwordx2 v0, v[1:2], s[0:1]1043; GFX1010-GISEL-NEXT:    s_endpgm1044;1045; GFX1100-GISEL-LABEL: test_writelane_vreg_lane_f64:1046; GFX1100-GISEL:       ; %bb.0:1047; GFX1100-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01048; GFX1100-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v01049; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)1050; GFX1100-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 4, v01051; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1052; GFX1100-GISEL-NEXT:    global_load_b64 v[0:1], v0, s[2:3] offset:81053; GFX1100-GISEL-NEXT:    s_load_b64 s[2:3], s[0:1], 0x01054; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1055; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, s21056; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v2, s31057; GFX1100-GISEL-NEXT:    s_mov_b32 s3, 0x402800001058; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s2, v01059; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, 01060; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)1061; GFX1100-GISEL-NEXT:    v_writelane_b32 v1, 0, s21062; GFX1100-GISEL-NEXT:    v_writelane_b32 v2, s3, s21063; GFX1100-GISEL-NEXT:    global_store_b64 v0, v[1:2], s[0:1]1064; GFX1100-GISEL-NEXT:    s_endpgm1065  %tid = call i32 @llvm.amdgcn.workitem.id.x()1066  %gep.in = getelementptr <2 x double>, ptr addrspace(1) %in, i32 %tid1067  %args = load <2 x double>, ptr addrspace(1) %gep.in1068  %oldval = load double, ptr addrspace(1) %out1069  %lane = extractelement <2 x double> %args, i32 11070  %lane_cast = bitcast double %lane to i641071  %lane32 = trunc i64 %lane_cast to i321072  %writelane = call double @llvm.amdgcn.writelane.f64(double 12.0, i32 %lane32, double %oldval)1073  store double %writelane, ptr addrspace(1) %out, align 41074  ret void1075}1076 1077define amdgpu_kernel void @test_writelane_m0_sreg_i32(ptr addrspace(1) %out, i32 %src1) #1 {1078; GFX802-SDAG-LABEL: test_writelane_m0_sreg_i32:1079; GFX802-SDAG:       ; %bb.0:1080; GFX802-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x01081; GFX802-SDAG-NEXT:    s_load_dword s2, s[8:9], 0x81082; GFX802-SDAG-NEXT:    ;;#ASMSTART1083; GFX802-SDAG-NEXT:    s_mov_b32 m0, -11084; GFX802-SDAG-NEXT:    ;;#ASMEND1085; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s171086; GFX802-SDAG-NEXT:    s_mov_b32 s4, m01087; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1088; GFX802-SDAG-NEXT:    s_load_dword s3, s[0:1], 0x01089; GFX802-SDAG-NEXT:    s_mov_b32 m0, s21090; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, s01091; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s131092; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81093; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1094; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, s31095; GFX802-SDAG-NEXT:    v_writelane_b32 v2, s4, m01096; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s11097; GFX802-SDAG-NEXT:    flat_store_dword v[0:1], v21098; GFX802-SDAG-NEXT:    s_endpgm1099;1100; GFX1010-SDAG-LABEL: test_writelane_m0_sreg_i32:1101; GFX1010-SDAG:       ; %bb.0:1102; GFX1010-SDAG-NEXT:    s_clause 0x11103; GFX1010-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x01104; GFX1010-SDAG-NEXT:    s_load_dword s2, s[8:9], 0x81105; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, 01106; GFX1010-SDAG-NEXT:    ;;#ASMSTART1107; GFX1010-SDAG-NEXT:    s_mov_b32 m0, -11108; GFX1010-SDAG-NEXT:    ;;#ASMEND1109; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1110; GFX1010-SDAG-NEXT:    s_load_dword s3, s[0:1], 0x01111; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1112; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, s31113; GFX1010-SDAG-NEXT:    v_writelane_b32 v0, m0, s21114; GFX1010-SDAG-NEXT:    global_store_dword v1, v0, s[0:1]1115; GFX1010-SDAG-NEXT:    s_endpgm1116;1117; GFX1100-SDAG-LABEL: test_writelane_m0_sreg_i32:1118; GFX1100-SDAG:       ; %bb.0:1119; GFX1100-SDAG-NEXT:    s_clause 0x11120; GFX1100-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01121; GFX1100-SDAG-NEXT:    s_load_b32 s2, s[4:5], 0x81122; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, 01123; GFX1100-SDAG-NEXT:    ;;#ASMSTART1124; GFX1100-SDAG-NEXT:    s_mov_b32 m0, -11125; GFX1100-SDAG-NEXT:    ;;#ASMEND1126; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1127; GFX1100-SDAG-NEXT:    s_load_b32 s3, s[0:1], 0x01128; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1129; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, s31130; GFX1100-SDAG-NEXT:    v_writelane_b32 v0, m0, s21131; GFX1100-SDAG-NEXT:    global_store_b32 v1, v0, s[0:1]1132; GFX1100-SDAG-NEXT:    s_endpgm1133;1134; GFX802-GISEL-LABEL: test_writelane_m0_sreg_i32:1135; GFX802-GISEL:       ; %bb.0:1136; GFX802-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x01137; GFX802-GISEL-NEXT:    s_load_dword s2, s[8:9], 0x81138; GFX802-GISEL-NEXT:    ;;#ASMSTART1139; GFX802-GISEL-NEXT:    s_mov_b32 m0, -11140; GFX802-GISEL-NEXT:    ;;#ASMEND1141; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s171142; GFX802-GISEL-NEXT:    s_mov_b32 s4, m01143; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1144; GFX802-GISEL-NEXT:    s_load_dword s3, s[0:1], 0x01145; GFX802-GISEL-NEXT:    s_mov_b32 m0, s21146; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, s01147; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s131148; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81149; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1150; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, s31151; GFX802-GISEL-NEXT:    v_writelane_b32 v2, s4, m01152; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s11153; GFX802-GISEL-NEXT:    flat_store_dword v[0:1], v21154; GFX802-GISEL-NEXT:    s_endpgm1155;1156; GFX1010-GISEL-LABEL: test_writelane_m0_sreg_i32:1157; GFX1010-GISEL:       ; %bb.0:1158; GFX1010-GISEL-NEXT:    s_clause 0x11159; GFX1010-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x01160; GFX1010-GISEL-NEXT:    s_load_dword s2, s[8:9], 0x81161; GFX1010-GISEL-NEXT:    ;;#ASMSTART1162; GFX1010-GISEL-NEXT:    s_mov_b32 m0, -11163; GFX1010-GISEL-NEXT:    ;;#ASMEND1164; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, 01165; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1166; GFX1010-GISEL-NEXT:    s_load_dword s3, s[0:1], 0x01167; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1168; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, s31169; GFX1010-GISEL-NEXT:    v_writelane_b32 v0, m0, s21170; GFX1010-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]1171; GFX1010-GISEL-NEXT:    s_endpgm1172;1173; GFX1100-GISEL-LABEL: test_writelane_m0_sreg_i32:1174; GFX1100-GISEL:       ; %bb.0:1175; GFX1100-GISEL-NEXT:    s_clause 0x11176; GFX1100-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01177; GFX1100-GISEL-NEXT:    s_load_b32 s2, s[4:5], 0x81178; GFX1100-GISEL-NEXT:    ;;#ASMSTART1179; GFX1100-GISEL-NEXT:    s_mov_b32 m0, -11180; GFX1100-GISEL-NEXT:    ;;#ASMEND1181; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, 01182; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1183; GFX1100-GISEL-NEXT:    s_load_b32 s3, s[0:1], 0x01184; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1185; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, s31186; GFX1100-GISEL-NEXT:    v_writelane_b32 v0, m0, s21187; GFX1100-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]1188; GFX1100-GISEL-NEXT:    s_endpgm1189  %oldval = load i32, ptr addrspace(1) %out1190  %m0 = call i32 asm "s_mov_b32 m0, -1", "={m0}"()1191  %writelane = call i32 @llvm.amdgcn.writelane.i32(i32 %m0, i32 %src1, i32 %oldval)1192  store i32 %writelane, ptr addrspace(1) %out, align 41193  ret void1194}1195 1196define amdgpu_kernel void @test_writelane_imm_i32(ptr addrspace(1) %out, i32 %src0) #1 {1197; GFX802-SDAG-LABEL: test_writelane_imm_i32:1198; GFX802-SDAG:       ; %bb.0:1199; GFX802-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x01200; GFX802-SDAG-NEXT:    s_load_dword s2, s[8:9], 0x81201; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s171202; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s131203; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81204; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1205; GFX802-SDAG-NEXT:    s_load_dword s3, s[0:1], 0x01206; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, s01207; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s11208; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1209; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, s31210; GFX802-SDAG-NEXT:    v_writelane_b32 v2, s2, 321211; GFX802-SDAG-NEXT:    flat_store_dword v[0:1], v21212; GFX802-SDAG-NEXT:    s_endpgm1213;1214; GFX1010-SDAG-LABEL: test_writelane_imm_i32:1215; GFX1010-SDAG:       ; %bb.0:1216; GFX1010-SDAG-NEXT:    s_clause 0x11217; GFX1010-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x01218; GFX1010-SDAG-NEXT:    s_load_dword s2, s[8:9], 0x81219; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, 01220; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1221; GFX1010-SDAG-NEXT:    s_load_dword s3, s[0:1], 0x01222; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1223; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, s31224; GFX1010-SDAG-NEXT:    v_writelane_b32 v0, s2, 321225; GFX1010-SDAG-NEXT:    global_store_dword v1, v0, s[0:1]1226; GFX1010-SDAG-NEXT:    s_endpgm1227;1228; GFX1100-SDAG-LABEL: test_writelane_imm_i32:1229; GFX1100-SDAG:       ; %bb.0:1230; GFX1100-SDAG-NEXT:    s_clause 0x11231; GFX1100-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01232; GFX1100-SDAG-NEXT:    s_load_b32 s2, s[4:5], 0x81233; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, 01234; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1235; GFX1100-SDAG-NEXT:    s_load_b32 s3, s[0:1], 0x01236; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1237; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, s31238; GFX1100-SDAG-NEXT:    v_writelane_b32 v0, s2, 321239; GFX1100-SDAG-NEXT:    global_store_b32 v1, v0, s[0:1]1240; GFX1100-SDAG-NEXT:    s_endpgm1241;1242; GFX802-GISEL-LABEL: test_writelane_imm_i32:1243; GFX802-GISEL:       ; %bb.0:1244; GFX802-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x01245; GFX802-GISEL-NEXT:    s_load_dword s2, s[8:9], 0x81246; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s171247; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s131248; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81249; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1250; GFX802-GISEL-NEXT:    s_load_dword s3, s[0:1], 0x01251; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, s01252; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s11253; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1254; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, s31255; GFX802-GISEL-NEXT:    v_writelane_b32 v2, s2, 321256; GFX802-GISEL-NEXT:    flat_store_dword v[0:1], v21257; GFX802-GISEL-NEXT:    s_endpgm1258;1259; GFX1010-GISEL-LABEL: test_writelane_imm_i32:1260; GFX1010-GISEL:       ; %bb.0:1261; GFX1010-GISEL-NEXT:    s_clause 0x11262; GFX1010-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x01263; GFX1010-GISEL-NEXT:    s_load_dword s2, s[8:9], 0x81264; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, 01265; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1266; GFX1010-GISEL-NEXT:    s_load_dword s3, s[0:1], 0x01267; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1268; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, s31269; GFX1010-GISEL-NEXT:    v_writelane_b32 v0, s2, 321270; GFX1010-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]1271; GFX1010-GISEL-NEXT:    s_endpgm1272;1273; GFX1100-GISEL-LABEL: test_writelane_imm_i32:1274; GFX1100-GISEL:       ; %bb.0:1275; GFX1100-GISEL-NEXT:    s_clause 0x11276; GFX1100-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x01277; GFX1100-GISEL-NEXT:    s_load_b32 s2, s[4:5], 0x81278; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, 01279; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1280; GFX1100-GISEL-NEXT:    s_load_b32 s3, s[0:1], 0x01281; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1282; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, s31283; GFX1100-GISEL-NEXT:    v_writelane_b32 v0, s2, 321284; GFX1100-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]1285; GFX1100-GISEL-NEXT:    s_endpgm1286  %oldval = load i32, ptr addrspace(1) %out1287  %writelane = call i32 @llvm.amdgcn.writelane.i32(i32 %src0, i32 32, i32 %oldval) #01288  store i32 %writelane, ptr addrspace(1) %out, align 41289  ret void1290}1291 1292define amdgpu_kernel void @test_writelane_imm_i64(ptr addrspace(1) %out, i64 %src0) #1 {1293; GFX802-SDAG-LABEL: test_writelane_imm_i64:1294; GFX802-SDAG:       ; %bb.0:1295; GFX802-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01296; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s171297; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s131298; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81299; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1300; GFX802-SDAG-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x01301; GFX802-SDAG-NEXT:    v_mov_b32_e32 v3, s11302; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, s01303; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1304; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s51305; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, s41306; GFX802-SDAG-NEXT:    v_writelane_b32 v1, s3, 321307; GFX802-SDAG-NEXT:    v_writelane_b32 v0, s2, 321308; GFX802-SDAG-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]1309; GFX802-SDAG-NEXT:    s_endpgm1310;1311; GFX1010-SDAG-LABEL: test_writelane_imm_i64:1312; GFX1010-SDAG:       ; %bb.0:1313; GFX1010-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01314; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v2, 01315; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1316; GFX1010-SDAG-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x01317; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1318; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, s51319; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, s41320; GFX1010-SDAG-NEXT:    v_writelane_b32 v1, s3, 321321; GFX1010-SDAG-NEXT:    v_writelane_b32 v0, s2, 321322; GFX1010-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]1323; GFX1010-SDAG-NEXT:    s_endpgm1324;1325; GFX1100-SDAG-LABEL: test_writelane_imm_i64:1326; GFX1100-SDAG:       ; %bb.0:1327; GFX1100-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01328; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v2, 01329; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1330; GFX1100-SDAG-NEXT:    s_load_b64 s[4:5], s[0:1], 0x01331; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1332; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, s51333; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, s41334; GFX1100-SDAG-NEXT:    v_writelane_b32 v1, s3, 321335; GFX1100-SDAG-NEXT:    v_writelane_b32 v0, s2, 321336; GFX1100-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1337; GFX1100-SDAG-NEXT:    s_endpgm1338;1339; GFX802-GISEL-LABEL: test_writelane_imm_i64:1340; GFX802-GISEL:       ; %bb.0:1341; GFX802-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01342; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s171343; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s131344; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81345; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1346; GFX802-GISEL-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x01347; GFX802-GISEL-NEXT:    v_mov_b32_e32 v3, s11348; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, s01349; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1350; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, s41351; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s51352; GFX802-GISEL-NEXT:    v_writelane_b32 v0, s2, 321353; GFX802-GISEL-NEXT:    v_writelane_b32 v1, s3, 321354; GFX802-GISEL-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]1355; GFX802-GISEL-NEXT:    s_endpgm1356;1357; GFX1010-GISEL-LABEL: test_writelane_imm_i64:1358; GFX1010-GISEL:       ; %bb.0:1359; GFX1010-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01360; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v2, 01361; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1362; GFX1010-GISEL-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x01363; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1364; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, s41365; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, s51366; GFX1010-GISEL-NEXT:    v_writelane_b32 v0, s2, 321367; GFX1010-GISEL-NEXT:    v_writelane_b32 v1, s3, 321368; GFX1010-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]1369; GFX1010-GISEL-NEXT:    s_endpgm1370;1371; GFX1100-GISEL-LABEL: test_writelane_imm_i64:1372; GFX1100-GISEL:       ; %bb.0:1373; GFX1100-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01374; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v2, 01375; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1376; GFX1100-GISEL-NEXT:    s_load_b64 s[4:5], s[0:1], 0x01377; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1378; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, s41379; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, s51380; GFX1100-GISEL-NEXT:    v_writelane_b32 v0, s2, 321381; GFX1100-GISEL-NEXT:    v_writelane_b32 v1, s3, 321382; GFX1100-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1383; GFX1100-GISEL-NEXT:    s_endpgm1384  %oldval = load i64, ptr addrspace(1) %out1385  %writelane = call i64 @llvm.amdgcn.writelane.i64(i64 %src0, i32 32, i64 %oldval) #01386  store i64 %writelane, ptr addrspace(1) %out, align 41387  ret void1388}1389 1390define amdgpu_kernel void @test_writelane_imm_f64(ptr addrspace(1) %out, double %src0) #1 {1391; GFX802-SDAG-LABEL: test_writelane_imm_f64:1392; GFX802-SDAG:       ; %bb.0:1393; GFX802-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01394; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s171395; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s131396; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81397; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1398; GFX802-SDAG-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x01399; GFX802-SDAG-NEXT:    v_mov_b32_e32 v3, s11400; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, s01401; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1402; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s51403; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, s41404; GFX802-SDAG-NEXT:    v_writelane_b32 v1, s3, 321405; GFX802-SDAG-NEXT:    v_writelane_b32 v0, s2, 321406; GFX802-SDAG-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]1407; GFX802-SDAG-NEXT:    s_endpgm1408;1409; GFX1010-SDAG-LABEL: test_writelane_imm_f64:1410; GFX1010-SDAG:       ; %bb.0:1411; GFX1010-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01412; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v2, 01413; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1414; GFX1010-SDAG-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x01415; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1416; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, s51417; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, s41418; GFX1010-SDAG-NEXT:    v_writelane_b32 v1, s3, 321419; GFX1010-SDAG-NEXT:    v_writelane_b32 v0, s2, 321420; GFX1010-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]1421; GFX1010-SDAG-NEXT:    s_endpgm1422;1423; GFX1100-SDAG-LABEL: test_writelane_imm_f64:1424; GFX1100-SDAG:       ; %bb.0:1425; GFX1100-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01426; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v2, 01427; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1428; GFX1100-SDAG-NEXT:    s_load_b64 s[4:5], s[0:1], 0x01429; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1430; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, s51431; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, s41432; GFX1100-SDAG-NEXT:    v_writelane_b32 v1, s3, 321433; GFX1100-SDAG-NEXT:    v_writelane_b32 v0, s2, 321434; GFX1100-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1435; GFX1100-SDAG-NEXT:    s_endpgm1436;1437; GFX802-GISEL-LABEL: test_writelane_imm_f64:1438; GFX802-GISEL:       ; %bb.0:1439; GFX802-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01440; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s171441; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s131442; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81443; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1444; GFX802-GISEL-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x01445; GFX802-GISEL-NEXT:    v_mov_b32_e32 v3, s11446; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, s01447; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1448; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, s41449; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s51450; GFX802-GISEL-NEXT:    v_writelane_b32 v0, s2, 321451; GFX802-GISEL-NEXT:    v_writelane_b32 v1, s3, 321452; GFX802-GISEL-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]1453; GFX802-GISEL-NEXT:    s_endpgm1454;1455; GFX1010-GISEL-LABEL: test_writelane_imm_f64:1456; GFX1010-GISEL:       ; %bb.0:1457; GFX1010-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01458; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v2, 01459; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1460; GFX1010-GISEL-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x01461; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1462; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, s41463; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, s51464; GFX1010-GISEL-NEXT:    v_writelane_b32 v0, s2, 321465; GFX1010-GISEL-NEXT:    v_writelane_b32 v1, s3, 321466; GFX1010-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]1467; GFX1010-GISEL-NEXT:    s_endpgm1468;1469; GFX1100-GISEL-LABEL: test_writelane_imm_f64:1470; GFX1100-GISEL:       ; %bb.0:1471; GFX1100-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01472; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v2, 01473; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1474; GFX1100-GISEL-NEXT:    s_load_b64 s[4:5], s[0:1], 0x01475; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1476; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, s41477; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, s51478; GFX1100-GISEL-NEXT:    v_writelane_b32 v0, s2, 321479; GFX1100-GISEL-NEXT:    v_writelane_b32 v1, s3, 321480; GFX1100-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1481; GFX1100-GISEL-NEXT:    s_endpgm1482  %oldval = load double, ptr addrspace(1) %out1483  %writelane = call double @llvm.amdgcn.writelane.f64(double %src0, i32 32, double %oldval) #01484  store double %writelane, ptr addrspace(1) %out, align 41485  ret void1486}1487 1488define amdgpu_kernel void @test_writelane_sreg_oldval_i32(i32 %oldval, ptr addrspace(1) %out, i32 %src0, i32 %src1) #1 {1489; GFX802-SDAG-LABEL: test_writelane_sreg_oldval_i32:1490; GFX802-SDAG:       ; %bb.0:1491; GFX802-SDAG-NEXT:    s_load_dword s4, s[8:9], 0x01492; GFX802-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x81493; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s171494; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s131495; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81496; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1497; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, s41498; GFX802-SDAG-NEXT:    s_mov_b32 m0, s31499; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, s01500; GFX802-SDAG-NEXT:    v_writelane_b32 v2, s2, m01501; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s11502; GFX802-SDAG-NEXT:    flat_store_dword v[0:1], v21503; GFX802-SDAG-NEXT:    s_endpgm1504;1505; GFX1010-SDAG-LABEL: test_writelane_sreg_oldval_i32:1506; GFX1010-SDAG:       ; %bb.0:1507; GFX1010-SDAG-NEXT:    s_clause 0x11508; GFX1010-SDAG-NEXT:    s_load_dword s4, s[8:9], 0x01509; GFX1010-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x81510; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, 01511; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1512; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, s41513; GFX1010-SDAG-NEXT:    v_writelane_b32 v0, s2, s31514; GFX1010-SDAG-NEXT:    global_store_dword v1, v0, s[0:1]1515; GFX1010-SDAG-NEXT:    s_endpgm1516;1517; GFX1100-SDAG-LABEL: test_writelane_sreg_oldval_i32:1518; GFX1100-SDAG:       ; %bb.0:1519; GFX1100-SDAG-NEXT:    s_clause 0x11520; GFX1100-SDAG-NEXT:    s_load_b32 s6, s[4:5], 0x01521; GFX1100-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x81522; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, 01523; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1524; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, s61525; GFX1100-SDAG-NEXT:    v_writelane_b32 v0, s2, s31526; GFX1100-SDAG-NEXT:    global_store_b32 v1, v0, s[0:1]1527; GFX1100-SDAG-NEXT:    s_endpgm1528;1529; GFX802-GISEL-LABEL: test_writelane_sreg_oldval_i32:1530; GFX802-GISEL:       ; %bb.0:1531; GFX802-GISEL-NEXT:    s_load_dword s4, s[8:9], 0x01532; GFX802-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x81533; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s171534; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s131535; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81536; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1537; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, s41538; GFX802-GISEL-NEXT:    s_mov_b32 m0, s31539; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, s01540; GFX802-GISEL-NEXT:    v_writelane_b32 v2, s2, m01541; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s11542; GFX802-GISEL-NEXT:    flat_store_dword v[0:1], v21543; GFX802-GISEL-NEXT:    s_endpgm1544;1545; GFX1010-GISEL-LABEL: test_writelane_sreg_oldval_i32:1546; GFX1010-GISEL:       ; %bb.0:1547; GFX1010-GISEL-NEXT:    s_clause 0x11548; GFX1010-GISEL-NEXT:    s_load_dword s4, s[8:9], 0x01549; GFX1010-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x81550; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, 01551; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1552; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, s41553; GFX1010-GISEL-NEXT:    v_writelane_b32 v0, s2, s31554; GFX1010-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]1555; GFX1010-GISEL-NEXT:    s_endpgm1556;1557; GFX1100-GISEL-LABEL: test_writelane_sreg_oldval_i32:1558; GFX1100-GISEL:       ; %bb.0:1559; GFX1100-GISEL-NEXT:    s_clause 0x11560; GFX1100-GISEL-NEXT:    s_load_b32 s6, s[4:5], 0x01561; GFX1100-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x81562; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, 01563; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1564; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, s61565; GFX1100-GISEL-NEXT:    v_writelane_b32 v0, s2, s31566; GFX1100-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]1567; GFX1100-GISEL-NEXT:    s_endpgm1568  %writelane = call i32 @llvm.amdgcn.writelane.i32(i32 %src0, i32 %src1, i32 %oldval)1569  store i32 %writelane, ptr addrspace(1) %out, align 41570  ret void1571}1572 1573define amdgpu_kernel void @test_writelane_sreg_oldval_i64(i64 %oldval, ptr addrspace(1) %out, i64 %src0, i32 %src1) #1 {1574; GFX802-SDAG-LABEL: test_writelane_sreg_oldval_i64:1575; GFX802-SDAG:       ; %bb.0:1576; GFX802-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01577; GFX802-SDAG-NEXT:    s_load_dword s6, s[8:9], 0x181578; GFX802-SDAG-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x101579; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s171580; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s131581; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1582; GFX802-SDAG-NEXT:    v_mov_b32_e32 v3, s11583; GFX802-SDAG-NEXT:    s_mov_b32 m0, s61584; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, s01585; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81586; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, s21587; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s31588; GFX802-SDAG-NEXT:    v_writelane_b32 v3, s5, m01589; GFX802-SDAG-NEXT:    v_writelane_b32 v2, s4, m01590; GFX802-SDAG-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]1591; GFX802-SDAG-NEXT:    s_endpgm1592;1593; GFX1010-SDAG-LABEL: test_writelane_sreg_oldval_i64:1594; GFX1010-SDAG:       ; %bb.0:1595; GFX1010-SDAG-NEXT:    s_clause 0x21596; GFX1010-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01597; GFX1010-SDAG-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x101598; GFX1010-SDAG-NEXT:    s_load_dword s6, s[8:9], 0x181599; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v2, 01600; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1601; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, s11602; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, s01603; GFX1010-SDAG-NEXT:    v_writelane_b32 v1, s5, s61604; GFX1010-SDAG-NEXT:    v_writelane_b32 v0, s4, s61605; GFX1010-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]1606; GFX1010-SDAG-NEXT:    s_endpgm1607;1608; GFX1100-SDAG-LABEL: test_writelane_sreg_oldval_i64:1609; GFX1100-SDAG:       ; %bb.0:1610; GFX1100-SDAG-NEXT:    s_clause 0x21611; GFX1100-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01612; GFX1100-SDAG-NEXT:    s_load_b64 s[6:7], s[4:5], 0x101613; GFX1100-SDAG-NEXT:    s_load_b32 s4, s[4:5], 0x181614; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v2, 01615; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1616; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, s11617; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, s01618; GFX1100-SDAG-NEXT:    v_writelane_b32 v1, s7, s41619; GFX1100-SDAG-NEXT:    v_writelane_b32 v0, s6, s41620; GFX1100-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]1621; GFX1100-SDAG-NEXT:    s_endpgm1622;1623; GFX802-GISEL-LABEL: test_writelane_sreg_oldval_i64:1624; GFX802-GISEL:       ; %bb.0:1625; GFX802-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01626; GFX802-GISEL-NEXT:    s_load_dword s6, s[8:9], 0x181627; GFX802-GISEL-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x101628; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s171629; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s131630; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1631; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, s01632; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s11633; GFX802-GISEL-NEXT:    s_mov_b32 m0, s61634; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, s21635; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81636; GFX802-GISEL-NEXT:    v_writelane_b32 v0, s4, m01637; GFX802-GISEL-NEXT:    v_writelane_b32 v1, s5, m01638; GFX802-GISEL-NEXT:    v_mov_b32_e32 v3, s31639; GFX802-GISEL-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]1640; GFX802-GISEL-NEXT:    s_endpgm1641;1642; GFX1010-GISEL-LABEL: test_writelane_sreg_oldval_i64:1643; GFX1010-GISEL:       ; %bb.0:1644; GFX1010-GISEL-NEXT:    s_clause 0x21645; GFX1010-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01646; GFX1010-GISEL-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x101647; GFX1010-GISEL-NEXT:    s_load_dword s6, s[8:9], 0x181648; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v2, 01649; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1650; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, s01651; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, s11652; GFX1010-GISEL-NEXT:    v_writelane_b32 v0, s4, s61653; GFX1010-GISEL-NEXT:    v_writelane_b32 v1, s5, s61654; GFX1010-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]1655; GFX1010-GISEL-NEXT:    s_endpgm1656;1657; GFX1100-GISEL-LABEL: test_writelane_sreg_oldval_i64:1658; GFX1100-GISEL:       ; %bb.0:1659; GFX1100-GISEL-NEXT:    s_clause 0x21660; GFX1100-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01661; GFX1100-GISEL-NEXT:    s_load_b64 s[6:7], s[4:5], 0x101662; GFX1100-GISEL-NEXT:    s_load_b32 s4, s[4:5], 0x181663; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v2, 01664; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1665; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, s01666; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, s11667; GFX1100-GISEL-NEXT:    v_writelane_b32 v0, s6, s41668; GFX1100-GISEL-NEXT:    v_writelane_b32 v1, s7, s41669; GFX1100-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]1670; GFX1100-GISEL-NEXT:    s_endpgm1671  %writelane = call i64 @llvm.amdgcn.writelane.i64(i64 %src0, i32 %src1, i64 %oldval)1672  store i64 %writelane, ptr addrspace(1) %out, align 41673  ret void1674}1675 1676define amdgpu_kernel void @test_writelane_sreg_oldval_f64(double %oldval, ptr addrspace(1) %out, double %src0, i32 %src1) #1 {1677; GFX802-SDAG-LABEL: test_writelane_sreg_oldval_f64:1678; GFX802-SDAG:       ; %bb.0:1679; GFX802-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01680; GFX802-SDAG-NEXT:    s_load_dword s6, s[8:9], 0x181681; GFX802-SDAG-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x101682; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s171683; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s131684; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1685; GFX802-SDAG-NEXT:    v_mov_b32_e32 v3, s11686; GFX802-SDAG-NEXT:    s_mov_b32 m0, s61687; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, s01688; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81689; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, s21690; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s31691; GFX802-SDAG-NEXT:    v_writelane_b32 v3, s5, m01692; GFX802-SDAG-NEXT:    v_writelane_b32 v2, s4, m01693; GFX802-SDAG-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]1694; GFX802-SDAG-NEXT:    s_endpgm1695;1696; GFX1010-SDAG-LABEL: test_writelane_sreg_oldval_f64:1697; GFX1010-SDAG:       ; %bb.0:1698; GFX1010-SDAG-NEXT:    s_clause 0x21699; GFX1010-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01700; GFX1010-SDAG-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x101701; GFX1010-SDAG-NEXT:    s_load_dword s6, s[8:9], 0x181702; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v2, 01703; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1704; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, s11705; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, s01706; GFX1010-SDAG-NEXT:    v_writelane_b32 v1, s5, s61707; GFX1010-SDAG-NEXT:    v_writelane_b32 v0, s4, s61708; GFX1010-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]1709; GFX1010-SDAG-NEXT:    s_endpgm1710;1711; GFX1100-SDAG-LABEL: test_writelane_sreg_oldval_f64:1712; GFX1100-SDAG:       ; %bb.0:1713; GFX1100-SDAG-NEXT:    s_clause 0x21714; GFX1100-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01715; GFX1100-SDAG-NEXT:    s_load_b64 s[6:7], s[4:5], 0x101716; GFX1100-SDAG-NEXT:    s_load_b32 s4, s[4:5], 0x181717; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v2, 01718; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1719; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, s11720; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, s01721; GFX1100-SDAG-NEXT:    v_writelane_b32 v1, s7, s41722; GFX1100-SDAG-NEXT:    v_writelane_b32 v0, s6, s41723; GFX1100-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]1724; GFX1100-SDAG-NEXT:    s_endpgm1725;1726; GFX802-GISEL-LABEL: test_writelane_sreg_oldval_f64:1727; GFX802-GISEL:       ; %bb.0:1728; GFX802-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01729; GFX802-GISEL-NEXT:    s_load_dword s6, s[8:9], 0x181730; GFX802-GISEL-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x101731; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s171732; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s131733; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1734; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, s01735; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s11736; GFX802-GISEL-NEXT:    s_mov_b32 m0, s61737; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, s21738; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81739; GFX802-GISEL-NEXT:    v_writelane_b32 v0, s4, m01740; GFX802-GISEL-NEXT:    v_writelane_b32 v1, s5, m01741; GFX802-GISEL-NEXT:    v_mov_b32_e32 v3, s31742; GFX802-GISEL-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]1743; GFX802-GISEL-NEXT:    s_endpgm1744;1745; GFX1010-GISEL-LABEL: test_writelane_sreg_oldval_f64:1746; GFX1010-GISEL:       ; %bb.0:1747; GFX1010-GISEL-NEXT:    s_clause 0x21748; GFX1010-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01749; GFX1010-GISEL-NEXT:    s_load_dwordx2 s[4:5], s[8:9], 0x101750; GFX1010-GISEL-NEXT:    s_load_dword s6, s[8:9], 0x181751; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v2, 01752; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1753; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, s01754; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, s11755; GFX1010-GISEL-NEXT:    v_writelane_b32 v0, s4, s61756; GFX1010-GISEL-NEXT:    v_writelane_b32 v1, s5, s61757; GFX1010-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]1758; GFX1010-GISEL-NEXT:    s_endpgm1759;1760; GFX1100-GISEL-LABEL: test_writelane_sreg_oldval_f64:1761; GFX1100-GISEL:       ; %bb.0:1762; GFX1100-GISEL-NEXT:    s_clause 0x21763; GFX1100-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01764; GFX1100-GISEL-NEXT:    s_load_b64 s[6:7], s[4:5], 0x101765; GFX1100-GISEL-NEXT:    s_load_b32 s4, s[4:5], 0x181766; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v2, 01767; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1768; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, s01769; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, s11770; GFX1100-GISEL-NEXT:    v_writelane_b32 v0, s6, s41771; GFX1100-GISEL-NEXT:    v_writelane_b32 v1, s7, s41772; GFX1100-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]1773; GFX1100-GISEL-NEXT:    s_endpgm1774  %writelane = call double @llvm.amdgcn.writelane.f64(double %src0, i32 %src1, double %oldval)1775  store double %writelane, ptr addrspace(1) %out, align 41776  ret void1777}1778 1779define amdgpu_kernel void @test_writelane_imm_oldval_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1) #1 {1780; GFX802-SDAG-LABEL: test_writelane_imm_oldval_i32:1781; GFX802-SDAG:       ; %bb.0:1782; GFX802-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01783; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s171784; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, 421785; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s131786; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81787; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1788; GFX802-SDAG-NEXT:    s_mov_b32 m0, s31789; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, s01790; GFX802-SDAG-NEXT:    v_writelane_b32 v2, s2, m01791; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, s11792; GFX802-SDAG-NEXT:    flat_store_dword v[0:1], v21793; GFX802-SDAG-NEXT:    s_endpgm1794;1795; GFX1010-SDAG-LABEL: test_writelane_imm_oldval_i32:1796; GFX1010-SDAG:       ; %bb.0:1797; GFX1010-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01798; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, 421799; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, 01800; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1801; GFX1010-SDAG-NEXT:    v_writelane_b32 v0, s2, s31802; GFX1010-SDAG-NEXT:    global_store_dword v1, v0, s[0:1]1803; GFX1010-SDAG-NEXT:    s_endpgm1804;1805; GFX1100-SDAG-LABEL: test_writelane_imm_oldval_i32:1806; GFX1100-SDAG:       ; %bb.0:1807; GFX1100-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01808; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, 421809; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, 01810; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1811; GFX1100-SDAG-NEXT:    v_writelane_b32 v0, s2, s31812; GFX1100-SDAG-NEXT:    global_store_b32 v1, v0, s[0:1]1813; GFX1100-SDAG-NEXT:    s_endpgm1814;1815; GFX802-GISEL-LABEL: test_writelane_imm_oldval_i32:1816; GFX802-GISEL:       ; %bb.0:1817; GFX802-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01818; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s171819; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, 421820; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s131821; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81822; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1823; GFX802-GISEL-NEXT:    s_mov_b32 m0, s31824; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, s01825; GFX802-GISEL-NEXT:    v_writelane_b32 v2, s2, m01826; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, s11827; GFX802-GISEL-NEXT:    flat_store_dword v[0:1], v21828; GFX802-GISEL-NEXT:    s_endpgm1829;1830; GFX1010-GISEL-LABEL: test_writelane_imm_oldval_i32:1831; GFX1010-GISEL:       ; %bb.0:1832; GFX1010-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01833; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, 421834; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, 01835; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1836; GFX1010-GISEL-NEXT:    v_writelane_b32 v0, s2, s31837; GFX1010-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]1838; GFX1010-GISEL-NEXT:    s_endpgm1839;1840; GFX1100-GISEL-LABEL: test_writelane_imm_oldval_i32:1841; GFX1100-GISEL:       ; %bb.0:1842; GFX1100-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01843; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, 421844; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, 01845; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1846; GFX1100-GISEL-NEXT:    v_writelane_b32 v0, s2, s31847; GFX1100-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]1848; GFX1100-GISEL-NEXT:    s_endpgm1849  %writelane = call i32 @llvm.amdgcn.writelane.i32(i32 %src0, i32 %src1, i32 42)1850  store i32 %writelane, ptr addrspace(1) %out, align 41851  ret void1852}1853 1854define amdgpu_kernel void @test_writelane_imm_oldval_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1) #1 {1855; GFX802-SDAG-LABEL: test_writelane_imm_oldval_i64:1856; GFX802-SDAG:       ; %bb.0:1857; GFX802-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01858; GFX802-SDAG-NEXT:    s_load_dword s4, s[8:9], 0x101859; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s171860; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, 01861; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, 421862; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s131863; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1864; GFX802-SDAG-NEXT:    s_mov_b32 m0, s41865; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81866; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, s01867; GFX802-SDAG-NEXT:    v_mov_b32_e32 v3, s11868; GFX802-SDAG-NEXT:    v_writelane_b32 v1, s3, m01869; GFX802-SDAG-NEXT:    v_writelane_b32 v0, s2, m01870; GFX802-SDAG-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]1871; GFX802-SDAG-NEXT:    s_endpgm1872;1873; GFX1010-SDAG-LABEL: test_writelane_imm_oldval_i64:1874; GFX1010-SDAG:       ; %bb.0:1875; GFX1010-SDAG-NEXT:    s_clause 0x11876; GFX1010-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01877; GFX1010-SDAG-NEXT:    s_load_dword s4, s[8:9], 0x101878; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, 01879; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, 421880; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v2, 01881; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1882; GFX1010-SDAG-NEXT:    v_writelane_b32 v1, s3, s41883; GFX1010-SDAG-NEXT:    v_writelane_b32 v0, s2, s41884; GFX1010-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]1885; GFX1010-SDAG-NEXT:    s_endpgm1886;1887; GFX1100-SDAG-LABEL: test_writelane_imm_oldval_i64:1888; GFX1100-SDAG:       ; %bb.0:1889; GFX1100-SDAG-NEXT:    s_clause 0x11890; GFX1100-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01891; GFX1100-SDAG-NEXT:    s_load_b32 s4, s[4:5], 0x101892; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, 01893; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, 421894; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v2, 01895; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1896; GFX1100-SDAG-NEXT:    v_writelane_b32 v1, s3, s41897; GFX1100-SDAG-NEXT:    v_writelane_b32 v0, s2, s41898; GFX1100-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1899; GFX1100-SDAG-NEXT:    s_endpgm1900;1901; GFX802-GISEL-LABEL: test_writelane_imm_oldval_i64:1902; GFX802-GISEL:       ; %bb.0:1903; GFX802-GISEL-NEXT:    s_load_dword s4, s[8:9], 0x101904; GFX802-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01905; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s171906; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, 421907; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, 01908; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1909; GFX802-GISEL-NEXT:    s_mov_b32 m0, s41910; GFX802-GISEL-NEXT:    v_mov_b32_e32 v3, s11911; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s131912; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81913; GFX802-GISEL-NEXT:    v_writelane_b32 v0, s2, m01914; GFX802-GISEL-NEXT:    v_writelane_b32 v1, s3, m01915; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, s01916; GFX802-GISEL-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]1917; GFX802-GISEL-NEXT:    s_endpgm1918;1919; GFX1010-GISEL-LABEL: test_writelane_imm_oldval_i64:1920; GFX1010-GISEL:       ; %bb.0:1921; GFX1010-GISEL-NEXT:    s_clause 0x11922; GFX1010-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01923; GFX1010-GISEL-NEXT:    s_load_dword s4, s[8:9], 0x101924; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, 421925; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, 01926; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v2, 01927; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1928; GFX1010-GISEL-NEXT:    v_writelane_b32 v0, s2, s41929; GFX1010-GISEL-NEXT:    v_writelane_b32 v1, s3, s41930; GFX1010-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]1931; GFX1010-GISEL-NEXT:    s_endpgm1932;1933; GFX1100-GISEL-LABEL: test_writelane_imm_oldval_i64:1934; GFX1100-GISEL:       ; %bb.0:1935; GFX1100-GISEL-NEXT:    s_clause 0x11936; GFX1100-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01937; GFX1100-GISEL-NEXT:    s_load_b32 s4, s[4:5], 0x101938; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, 421939; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, 01940; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v2, 01941; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)1942; GFX1100-GISEL-NEXT:    v_writelane_b32 v0, s2, s41943; GFX1100-GISEL-NEXT:    v_writelane_b32 v1, s3, s41944; GFX1100-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1945; GFX1100-GISEL-NEXT:    s_endpgm1946  %writelane = call i64 @llvm.amdgcn.writelane.i64(i64 %src0, i32 %src1, i64 42)1947  store i64 %writelane, ptr addrspace(1) %out, align 41948  ret void1949}1950 1951define amdgpu_kernel void @test_writelane_imm_oldval_f64(ptr addrspace(1) %out, double %src0, i32 %src1) #1 {1952; GFX802-SDAG-LABEL: test_writelane_imm_oldval_f64:1953; GFX802-SDAG:       ; %bb.0:1954; GFX802-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01955; GFX802-SDAG-NEXT:    s_load_dword s4, s[8:9], 0x101956; GFX802-SDAG-NEXT:    s_add_i32 s12, s12, s171957; GFX802-SDAG-NEXT:    v_mov_b32_e32 v1, 0x404500001958; GFX802-SDAG-NEXT:    v_mov_b32_e32 v0, 01959; GFX802-SDAG-NEXT:    s_mov_b32 flat_scratch_lo, s131960; GFX802-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1961; GFX802-SDAG-NEXT:    s_mov_b32 m0, s41962; GFX802-SDAG-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 81963; GFX802-SDAG-NEXT:    v_mov_b32_e32 v2, s01964; GFX802-SDAG-NEXT:    v_mov_b32_e32 v3, s11965; GFX802-SDAG-NEXT:    v_writelane_b32 v1, s3, m01966; GFX802-SDAG-NEXT:    v_writelane_b32 v0, s2, m01967; GFX802-SDAG-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]1968; GFX802-SDAG-NEXT:    s_endpgm1969;1970; GFX1010-SDAG-LABEL: test_writelane_imm_oldval_f64:1971; GFX1010-SDAG:       ; %bb.0:1972; GFX1010-SDAG-NEXT:    s_clause 0x11973; GFX1010-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x01974; GFX1010-SDAG-NEXT:    s_load_dword s4, s[8:9], 0x101975; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v1, 0x404500001976; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v0, 01977; GFX1010-SDAG-NEXT:    v_mov_b32_e32 v2, 01978; GFX1010-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1979; GFX1010-SDAG-NEXT:    v_writelane_b32 v1, s3, s41980; GFX1010-SDAG-NEXT:    v_writelane_b32 v0, s2, s41981; GFX1010-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]1982; GFX1010-SDAG-NEXT:    s_endpgm1983;1984; GFX1100-SDAG-LABEL: test_writelane_imm_oldval_f64:1985; GFX1100-SDAG:       ; %bb.0:1986; GFX1100-SDAG-NEXT:    s_clause 0x11987; GFX1100-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x01988; GFX1100-SDAG-NEXT:    s_load_b32 s4, s[4:5], 0x101989; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v1, 0x404500001990; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v0, 01991; GFX1100-SDAG-NEXT:    v_mov_b32_e32 v2, 01992; GFX1100-SDAG-NEXT:    s_waitcnt lgkmcnt(0)1993; GFX1100-SDAG-NEXT:    v_writelane_b32 v1, s3, s41994; GFX1100-SDAG-NEXT:    v_writelane_b32 v0, s2, s41995; GFX1100-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1996; GFX1100-SDAG-NEXT:    s_endpgm1997;1998; GFX802-GISEL-LABEL: test_writelane_imm_oldval_f64:1999; GFX802-GISEL:       ; %bb.0:2000; GFX802-GISEL-NEXT:    s_load_dword s4, s[8:9], 0x102001; GFX802-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x02002; GFX802-GISEL-NEXT:    s_add_i32 s12, s12, s172003; GFX802-GISEL-NEXT:    v_mov_b32_e32 v0, 02004; GFX802-GISEL-NEXT:    v_mov_b32_e32 v1, 0x404500002005; GFX802-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2006; GFX802-GISEL-NEXT:    s_mov_b32 m0, s42007; GFX802-GISEL-NEXT:    v_mov_b32_e32 v3, s12008; GFX802-GISEL-NEXT:    s_mov_b32 flat_scratch_lo, s132009; GFX802-GISEL-NEXT:    s_lshr_b32 flat_scratch_hi, s12, 82010; GFX802-GISEL-NEXT:    v_writelane_b32 v0, s2, m02011; GFX802-GISEL-NEXT:    v_writelane_b32 v1, s3, m02012; GFX802-GISEL-NEXT:    v_mov_b32_e32 v2, s02013; GFX802-GISEL-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]2014; GFX802-GISEL-NEXT:    s_endpgm2015;2016; GFX1010-GISEL-LABEL: test_writelane_imm_oldval_f64:2017; GFX1010-GISEL:       ; %bb.0:2018; GFX1010-GISEL-NEXT:    s_clause 0x12019; GFX1010-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[8:9], 0x02020; GFX1010-GISEL-NEXT:    s_load_dword s4, s[8:9], 0x102021; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v0, 02022; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v1, 0x404500002023; GFX1010-GISEL-NEXT:    v_mov_b32_e32 v2, 02024; GFX1010-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2025; GFX1010-GISEL-NEXT:    v_writelane_b32 v0, s2, s42026; GFX1010-GISEL-NEXT:    v_writelane_b32 v1, s3, s42027; GFX1010-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]2028; GFX1010-GISEL-NEXT:    s_endpgm2029;2030; GFX1100-GISEL-LABEL: test_writelane_imm_oldval_f64:2031; GFX1100-GISEL:       ; %bb.0:2032; GFX1100-GISEL-NEXT:    s_clause 0x12033; GFX1100-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x02034; GFX1100-GISEL-NEXT:    s_load_b32 s4, s[4:5], 0x102035; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v0, 02036; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v1, 0x404500002037; GFX1100-GISEL-NEXT:    v_mov_b32_e32 v2, 02038; GFX1100-GISEL-NEXT:    s_waitcnt lgkmcnt(0)2039; GFX1100-GISEL-NEXT:    v_writelane_b32 v0, s2, s42040; GFX1100-GISEL-NEXT:    v_writelane_b32 v1, s3, s42041; GFX1100-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]2042; GFX1100-GISEL-NEXT:    s_endpgm2043  %writelane = call double @llvm.amdgcn.writelane.f64(double %src0, i32 %src1, double 42.0)2044  store double %writelane, ptr addrspace(1) %out, align 42045  ret void2046}2047 2048define void @test_writelane_half(ptr addrspace(1) %out, half %src, i32 %src1) {2049; GFX802-SDAG-LABEL: test_writelane_half:2050; GFX802-SDAG:       ; %bb.0:2051; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2052; GFX802-SDAG-NEXT:    flat_load_ushort v4, v[0:1]2053; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s4, v32054; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s5, v22055; GFX802-SDAG-NEXT:    s_mov_b32 m0, s42056; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2057; GFX802-SDAG-NEXT:    v_writelane_b32 v4, s5, m02058; GFX802-SDAG-NEXT:    flat_store_short v[0:1], v42059; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2060; GFX802-SDAG-NEXT:    s_setpc_b64 s[30:31]2061;2062; GFX1010-SDAG-LABEL: test_writelane_half:2063; GFX1010-SDAG:       ; %bb.0:2064; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2065; GFX1010-SDAG-NEXT:    global_load_ushort v4, v[0:1], off2066; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s4, v22067; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s5, v32068; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0)2069; GFX1010-SDAG-NEXT:    v_writelane_b32 v4, s4, s52070; GFX1010-SDAG-NEXT:    global_store_short v[0:1], v4, off2071; GFX1010-SDAG-NEXT:    s_setpc_b64 s[30:31]2072;2073; GFX1100-SDAG-LABEL: test_writelane_half:2074; GFX1100-SDAG:       ; %bb.0:2075; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2076; GFX1100-SDAG-NEXT:    global_load_u16 v4, v[0:1], off2077; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s0, v22078; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s1, v32079; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0)2080; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)2081; GFX1100-SDAG-NEXT:    v_writelane_b32 v4, s0, s12082; GFX1100-SDAG-NEXT:    global_store_b16 v[0:1], v4, off2083; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]2084;2085; GFX802-GISEL-LABEL: test_writelane_half:2086; GFX802-GISEL:       ; %bb.0:2087; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2088; GFX802-GISEL-NEXT:    flat_load_ushort v4, v[0:1]2089; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s5, v32090; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s4, v22091; GFX802-GISEL-NEXT:    s_mov_b32 m0, s52092; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)2093; GFX802-GISEL-NEXT:    v_writelane_b32 v4, s4, m02094; GFX802-GISEL-NEXT:    flat_store_short v[0:1], v42095; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)2096; GFX802-GISEL-NEXT:    s_setpc_b64 s[30:31]2097;2098; GFX1010-GISEL-LABEL: test_writelane_half:2099; GFX1010-GISEL:       ; %bb.0:2100; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2101; GFX1010-GISEL-NEXT:    global_load_ushort v4, v[0:1], off2102; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s4, v22103; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s5, v32104; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0)2105; GFX1010-GISEL-NEXT:    v_writelane_b32 v4, s4, s52106; GFX1010-GISEL-NEXT:    global_store_short v[0:1], v4, off2107; GFX1010-GISEL-NEXT:    s_setpc_b64 s[30:31]2108;2109; GFX1100-GISEL-LABEL: test_writelane_half:2110; GFX1100-GISEL:       ; %bb.0:2111; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2112; GFX1100-GISEL-NEXT:    global_load_u16 v4, v[0:1], off2113; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s0, v22114; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s1, v32115; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0)2116; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)2117; GFX1100-GISEL-NEXT:    v_writelane_b32 v4, s0, s12118; GFX1100-GISEL-NEXT:    global_store_b16 v[0:1], v4, off2119; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]2120  %oldval = load half, ptr addrspace(1) %out2121  %writelane = call half @llvm.amdgcn.writelane.f16(half %src, i32 %src1, half %oldval)2122  store half %writelane, ptr addrspace(1) %out, align 42123  ret void2124}2125 2126define void @test_writelane_float(ptr addrspace(1) %out, float %src, i32 %src1) {2127; GFX802-SDAG-LABEL: test_writelane_float:2128; GFX802-SDAG:       ; %bb.0:2129; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2130; GFX802-SDAG-NEXT:    flat_load_dword v4, v[0:1]2131; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s4, v32132; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s5, v22133; GFX802-SDAG-NEXT:    s_mov_b32 m0, s42134; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2135; GFX802-SDAG-NEXT:    v_writelane_b32 v4, s5, m02136; GFX802-SDAG-NEXT:    flat_store_dword v[0:1], v42137; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2138; GFX802-SDAG-NEXT:    s_setpc_b64 s[30:31]2139;2140; GFX1010-SDAG-LABEL: test_writelane_float:2141; GFX1010-SDAG:       ; %bb.0:2142; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2143; GFX1010-SDAG-NEXT:    global_load_dword v4, v[0:1], off2144; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s4, v22145; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s5, v32146; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0)2147; GFX1010-SDAG-NEXT:    v_writelane_b32 v4, s4, s52148; GFX1010-SDAG-NEXT:    global_store_dword v[0:1], v4, off2149; GFX1010-SDAG-NEXT:    s_setpc_b64 s[30:31]2150;2151; GFX1100-SDAG-LABEL: test_writelane_float:2152; GFX1100-SDAG:       ; %bb.0:2153; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2154; GFX1100-SDAG-NEXT:    global_load_b32 v4, v[0:1], off2155; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s0, v22156; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s1, v32157; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0)2158; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)2159; GFX1100-SDAG-NEXT:    v_writelane_b32 v4, s0, s12160; GFX1100-SDAG-NEXT:    global_store_b32 v[0:1], v4, off2161; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]2162;2163; GFX802-GISEL-LABEL: test_writelane_float:2164; GFX802-GISEL:       ; %bb.0:2165; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2166; GFX802-GISEL-NEXT:    flat_load_dword v4, v[0:1]2167; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s5, v32168; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s4, v22169; GFX802-GISEL-NEXT:    s_mov_b32 m0, s52170; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)2171; GFX802-GISEL-NEXT:    v_writelane_b32 v4, s4, m02172; GFX802-GISEL-NEXT:    flat_store_dword v[0:1], v42173; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)2174; GFX802-GISEL-NEXT:    s_setpc_b64 s[30:31]2175;2176; GFX1010-GISEL-LABEL: test_writelane_float:2177; GFX1010-GISEL:       ; %bb.0:2178; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2179; GFX1010-GISEL-NEXT:    global_load_dword v4, v[0:1], off2180; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s4, v22181; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s5, v32182; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0)2183; GFX1010-GISEL-NEXT:    v_writelane_b32 v4, s4, s52184; GFX1010-GISEL-NEXT:    global_store_dword v[0:1], v4, off2185; GFX1010-GISEL-NEXT:    s_setpc_b64 s[30:31]2186;2187; GFX1100-GISEL-LABEL: test_writelane_float:2188; GFX1100-GISEL:       ; %bb.0:2189; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2190; GFX1100-GISEL-NEXT:    global_load_b32 v4, v[0:1], off2191; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s0, v22192; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s1, v32193; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0)2194; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)2195; GFX1100-GISEL-NEXT:    v_writelane_b32 v4, s0, s12196; GFX1100-GISEL-NEXT:    global_store_b32 v[0:1], v4, off2197; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]2198  %oldval = load float, ptr addrspace(1) %out2199  %writelane = call float @llvm.amdgcn.writelane.f32(float %src, i32 %src1, float %oldval)2200  store float %writelane, ptr addrspace(1) %out, align 42201  ret void2202}2203 2204define void @test_writelane_bfloat(ptr addrspace(1) %out, bfloat %src, i32 %src1) {2205; GFX802-SDAG-LABEL: test_writelane_bfloat:2206; GFX802-SDAG:       ; %bb.0:2207; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2208; GFX802-SDAG-NEXT:    flat_load_ushort v4, v[0:1]2209; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s4, v32210; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s5, v22211; GFX802-SDAG-NEXT:    s_mov_b32 m0, s42212; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2213; GFX802-SDAG-NEXT:    v_writelane_b32 v4, s5, m02214; GFX802-SDAG-NEXT:    flat_store_short v[0:1], v42215; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2216; GFX802-SDAG-NEXT:    s_setpc_b64 s[30:31]2217;2218; GFX1010-SDAG-LABEL: test_writelane_bfloat:2219; GFX1010-SDAG:       ; %bb.0:2220; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2221; GFX1010-SDAG-NEXT:    global_load_ushort v4, v[0:1], off2222; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s4, v22223; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s5, v32224; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0)2225; GFX1010-SDAG-NEXT:    v_writelane_b32 v4, s4, s52226; GFX1010-SDAG-NEXT:    global_store_short v[0:1], v4, off2227; GFX1010-SDAG-NEXT:    s_setpc_b64 s[30:31]2228;2229; GFX1100-SDAG-LABEL: test_writelane_bfloat:2230; GFX1100-SDAG:       ; %bb.0:2231; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2232; GFX1100-SDAG-NEXT:    global_load_u16 v4, v[0:1], off2233; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s0, v22234; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s1, v32235; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0)2236; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)2237; GFX1100-SDAG-NEXT:    v_writelane_b32 v4, s0, s12238; GFX1100-SDAG-NEXT:    global_store_b16 v[0:1], v4, off2239; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]2240;2241; GFX802-GISEL-LABEL: test_writelane_bfloat:2242; GFX802-GISEL:       ; %bb.0:2243; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2244; GFX802-GISEL-NEXT:    flat_load_ushort v4, v[0:1]2245; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s4, v32246; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s5, v22247; GFX802-GISEL-NEXT:    s_mov_b32 m0, s42248; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)2249; GFX802-GISEL-NEXT:    v_writelane_b32 v4, s5, m02250; GFX802-GISEL-NEXT:    flat_store_short v[0:1], v42251; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)2252; GFX802-GISEL-NEXT:    s_setpc_b64 s[30:31]2253;2254; GFX1010-GISEL-LABEL: test_writelane_bfloat:2255; GFX1010-GISEL:       ; %bb.0:2256; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2257; GFX1010-GISEL-NEXT:    global_load_ushort v4, v[0:1], off2258; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s4, v22259; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s5, v32260; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0)2261; GFX1010-GISEL-NEXT:    v_writelane_b32 v4, s4, s52262; GFX1010-GISEL-NEXT:    global_store_short v[0:1], v4, off2263; GFX1010-GISEL-NEXT:    s_setpc_b64 s[30:31]2264;2265; GFX1100-GISEL-LABEL: test_writelane_bfloat:2266; GFX1100-GISEL:       ; %bb.0:2267; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2268; GFX1100-GISEL-NEXT:    global_load_u16 v4, v[0:1], off2269; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s0, v22270; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s1, v32271; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0)2272; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)2273; GFX1100-GISEL-NEXT:    v_writelane_b32 v4, s0, s12274; GFX1100-GISEL-NEXT:    global_store_b16 v[0:1], v4, off2275; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]2276  %oldval = load bfloat, ptr addrspace(1) %out2277  %writelane = call bfloat @llvm.amdgcn.writelane.bf16(bfloat %src, i32 %src1, bfloat %oldval)2278  store bfloat %writelane, ptr addrspace(1) %out, align 42279  ret void2280}2281 2282define void @test_writelane_i16(ptr addrspace(1) %out, i16 %src, i32 %src1) {2283; GFX802-SDAG-LABEL: test_writelane_i16:2284; GFX802-SDAG:       ; %bb.0:2285; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2286; GFX802-SDAG-NEXT:    flat_load_ushort v4, v[0:1]2287; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s4, v32288; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s5, v22289; GFX802-SDAG-NEXT:    s_mov_b32 m0, s42290; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2291; GFX802-SDAG-NEXT:    v_writelane_b32 v4, s5, m02292; GFX802-SDAG-NEXT:    flat_store_short v[0:1], v42293; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2294; GFX802-SDAG-NEXT:    s_setpc_b64 s[30:31]2295;2296; GFX1010-SDAG-LABEL: test_writelane_i16:2297; GFX1010-SDAG:       ; %bb.0:2298; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2299; GFX1010-SDAG-NEXT:    global_load_ushort v4, v[0:1], off2300; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s4, v22301; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s5, v32302; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0)2303; GFX1010-SDAG-NEXT:    v_writelane_b32 v4, s4, s52304; GFX1010-SDAG-NEXT:    global_store_short v[0:1], v4, off2305; GFX1010-SDAG-NEXT:    s_setpc_b64 s[30:31]2306;2307; GFX1100-SDAG-LABEL: test_writelane_i16:2308; GFX1100-SDAG:       ; %bb.0:2309; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2310; GFX1100-SDAG-NEXT:    global_load_u16 v4, v[0:1], off2311; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s0, v22312; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s1, v32313; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0)2314; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)2315; GFX1100-SDAG-NEXT:    v_writelane_b32 v4, s0, s12316; GFX1100-SDAG-NEXT:    global_store_b16 v[0:1], v4, off2317; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]2318;2319; GFX802-GISEL-LABEL: test_writelane_i16:2320; GFX802-GISEL:       ; %bb.0:2321; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2322; GFX802-GISEL-NEXT:    flat_load_ushort v4, v[0:1]2323; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s5, v32324; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s4, v22325; GFX802-GISEL-NEXT:    s_mov_b32 m0, s52326; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)2327; GFX802-GISEL-NEXT:    v_writelane_b32 v4, s4, m02328; GFX802-GISEL-NEXT:    flat_store_short v[0:1], v42329; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)2330; GFX802-GISEL-NEXT:    s_setpc_b64 s[30:31]2331;2332; GFX1010-GISEL-LABEL: test_writelane_i16:2333; GFX1010-GISEL:       ; %bb.0:2334; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2335; GFX1010-GISEL-NEXT:    global_load_ushort v4, v[0:1], off2336; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s4, v22337; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s5, v32338; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0)2339; GFX1010-GISEL-NEXT:    v_writelane_b32 v4, s4, s52340; GFX1010-GISEL-NEXT:    global_store_short v[0:1], v4, off2341; GFX1010-GISEL-NEXT:    s_setpc_b64 s[30:31]2342;2343; GFX1100-GISEL-LABEL: test_writelane_i16:2344; GFX1100-GISEL:       ; %bb.0:2345; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2346; GFX1100-GISEL-NEXT:    global_load_u16 v4, v[0:1], off2347; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s0, v22348; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s1, v32349; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0)2350; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)2351; GFX1100-GISEL-NEXT:    v_writelane_b32 v4, s0, s12352; GFX1100-GISEL-NEXT:    global_store_b16 v[0:1], v4, off2353; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]2354  %oldval = load i16, ptr addrspace(1) %out2355  %writelane = call i16 @llvm.amdgcn.writelane.i16(i16 %src, i32 %src1, i16 %oldval)2356  store i16 %writelane, ptr addrspace(1) %out, align 42357  ret void2358}2359 2360define void @test_writelane_v2f16(ptr addrspace(1) %out, <2 x half> %src, i32 %src1) {2361; GFX802-SDAG-LABEL: test_writelane_v2f16:2362; GFX802-SDAG:       ; %bb.0:2363; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2364; GFX802-SDAG-NEXT:    flat_load_dword v4, v[0:1]2365; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s4, v32366; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s5, v22367; GFX802-SDAG-NEXT:    s_mov_b32 m0, s42368; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2369; GFX802-SDAG-NEXT:    v_writelane_b32 v4, s5, m02370; GFX802-SDAG-NEXT:    flat_store_dword v[0:1], v42371; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2372; GFX802-SDAG-NEXT:    s_setpc_b64 s[30:31]2373;2374; GFX1010-SDAG-LABEL: test_writelane_v2f16:2375; GFX1010-SDAG:       ; %bb.0:2376; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2377; GFX1010-SDAG-NEXT:    global_load_dword v4, v[0:1], off2378; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s4, v22379; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s5, v32380; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0)2381; GFX1010-SDAG-NEXT:    v_writelane_b32 v4, s4, s52382; GFX1010-SDAG-NEXT:    global_store_dword v[0:1], v4, off2383; GFX1010-SDAG-NEXT:    s_setpc_b64 s[30:31]2384;2385; GFX1100-SDAG-LABEL: test_writelane_v2f16:2386; GFX1100-SDAG:       ; %bb.0:2387; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2388; GFX1100-SDAG-NEXT:    global_load_b32 v4, v[0:1], off2389; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s0, v22390; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s1, v32391; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0)2392; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)2393; GFX1100-SDAG-NEXT:    v_writelane_b32 v4, s0, s12394; GFX1100-SDAG-NEXT:    global_store_b32 v[0:1], v4, off2395; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]2396;2397; GFX802-GISEL-LABEL: test_writelane_v2f16:2398; GFX802-GISEL:       ; %bb.0:2399; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2400; GFX802-GISEL-NEXT:    flat_load_dword v4, v[0:1]2401; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s5, v32402; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s4, v22403; GFX802-GISEL-NEXT:    s_mov_b32 m0, s52404; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)2405; GFX802-GISEL-NEXT:    v_writelane_b32 v4, s4, m02406; GFX802-GISEL-NEXT:    flat_store_dword v[0:1], v42407; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)2408; GFX802-GISEL-NEXT:    s_setpc_b64 s[30:31]2409;2410; GFX1010-GISEL-LABEL: test_writelane_v2f16:2411; GFX1010-GISEL:       ; %bb.0:2412; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2413; GFX1010-GISEL-NEXT:    global_load_dword v4, v[0:1], off2414; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s4, v22415; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s5, v32416; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0)2417; GFX1010-GISEL-NEXT:    v_writelane_b32 v4, s4, s52418; GFX1010-GISEL-NEXT:    global_store_dword v[0:1], v4, off2419; GFX1010-GISEL-NEXT:    s_setpc_b64 s[30:31]2420;2421; GFX1100-GISEL-LABEL: test_writelane_v2f16:2422; GFX1100-GISEL:       ; %bb.0:2423; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2424; GFX1100-GISEL-NEXT:    global_load_b32 v4, v[0:1], off2425; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s0, v22426; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s1, v32427; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0)2428; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)2429; GFX1100-GISEL-NEXT:    v_writelane_b32 v4, s0, s12430; GFX1100-GISEL-NEXT:    global_store_b32 v[0:1], v4, off2431; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]2432  %oldval = load <2 x half>, ptr addrspace(1) %out2433  %writelane = call <2 x half> @llvm.amdgcn.writelane.v2f16(<2 x half> %src, i32 %src1, <2 x half> %oldval)2434  store <2 x half> %writelane, ptr addrspace(1) %out, align 42435  ret void2436}2437 2438define void @test_readlane_v2f32(ptr addrspace(1) %out, <2 x float> %src, i32 %src1) {2439; GFX802-SDAG-LABEL: test_readlane_v2f32:2440; GFX802-SDAG:       ; %bb.0:2441; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2442; GFX802-SDAG-NEXT:    flat_load_dwordx2 v[5:6], v[0:1]2443; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s4, v42444; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s5, v32445; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s6, v22446; GFX802-SDAG-NEXT:    s_mov_b32 m0, s42447; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2448; GFX802-SDAG-NEXT:    v_writelane_b32 v6, s5, m02449; GFX802-SDAG-NEXT:    v_writelane_b32 v5, s6, m02450; GFX802-SDAG-NEXT:    flat_store_dwordx2 v[0:1], v[5:6]2451; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2452; GFX802-SDAG-NEXT:    s_setpc_b64 s[30:31]2453;2454; GFX1010-SDAG-LABEL: test_readlane_v2f32:2455; GFX1010-SDAG:       ; %bb.0:2456; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2457; GFX1010-SDAG-NEXT:    global_load_dwordx2 v[5:6], v[0:1], off2458; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s4, v32459; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s5, v42460; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s6, v22461; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0)2462; GFX1010-SDAG-NEXT:    v_writelane_b32 v6, s4, s52463; GFX1010-SDAG-NEXT:    v_writelane_b32 v5, s6, s52464; GFX1010-SDAG-NEXT:    global_store_dwordx2 v[0:1], v[5:6], off2465; GFX1010-SDAG-NEXT:    s_setpc_b64 s[30:31]2466;2467; GFX1100-SDAG-LABEL: test_readlane_v2f32:2468; GFX1100-SDAG:       ; %bb.0:2469; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2470; GFX1100-SDAG-NEXT:    global_load_b64 v[5:6], v[0:1], off2471; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s0, v32472; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s1, v42473; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s2, v22474; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0)2475; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2476; GFX1100-SDAG-NEXT:    v_writelane_b32 v6, s0, s12477; GFX1100-SDAG-NEXT:    v_writelane_b32 v5, s2, s12478; GFX1100-SDAG-NEXT:    global_store_b64 v[0:1], v[5:6], off2479; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]2480;2481; GFX802-GISEL-LABEL: test_readlane_v2f32:2482; GFX802-GISEL:       ; %bb.0:2483; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2484; GFX802-GISEL-NEXT:    flat_load_dwordx2 v[5:6], v[0:1]2485; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s5, v42486; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s4, v22487; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s6, v32488; GFX802-GISEL-NEXT:    s_mov_b32 m0, s52489; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)2490; GFX802-GISEL-NEXT:    v_writelane_b32 v5, s4, m02491; GFX802-GISEL-NEXT:    v_writelane_b32 v6, s6, m02492; GFX802-GISEL-NEXT:    flat_store_dwordx2 v[0:1], v[5:6]2493; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)2494; GFX802-GISEL-NEXT:    s_setpc_b64 s[30:31]2495;2496; GFX1010-GISEL-LABEL: test_readlane_v2f32:2497; GFX1010-GISEL:       ; %bb.0:2498; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2499; GFX1010-GISEL-NEXT:    global_load_dwordx2 v[5:6], v[0:1], off2500; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s4, v22501; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s5, v42502; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s6, v32503; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0)2504; GFX1010-GISEL-NEXT:    v_writelane_b32 v5, s4, s52505; GFX1010-GISEL-NEXT:    v_writelane_b32 v6, s6, s52506; GFX1010-GISEL-NEXT:    global_store_dwordx2 v[0:1], v[5:6], off2507; GFX1010-GISEL-NEXT:    s_setpc_b64 s[30:31]2508;2509; GFX1100-GISEL-LABEL: test_readlane_v2f32:2510; GFX1100-GISEL:       ; %bb.0:2511; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2512; GFX1100-GISEL-NEXT:    global_load_b64 v[5:6], v[0:1], off2513; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s0, v22514; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s1, v42515; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s2, v32516; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0)2517; GFX1100-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)2518; GFX1100-GISEL-NEXT:    v_writelane_b32 v5, s0, s12519; GFX1100-GISEL-NEXT:    v_writelane_b32 v6, s2, s12520; GFX1100-GISEL-NEXT:    global_store_b64 v[0:1], v[5:6], off2521; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]2522  %oldval = load <2 x float>, ptr addrspace(1) %out2523  %writelane = call <2 x float> @llvm.amdgcn.writelane.v2f32(<2 x float> %src, i32 %src1, <2 x float> %oldval)2524  store <2 x float> %writelane, ptr addrspace(1) %out, align 42525  ret void2526}2527 2528define void @test_writelane_v7i32(ptr addrspace(1) %out, <7 x i32> %src, i32 %src1) {2529; GFX802-SDAG-LABEL: test_writelane_v7i32:2530; GFX802-SDAG:       ; %bb.0:2531; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2532; GFX802-SDAG-NEXT:    v_add_u32_e32 v17, vcc, 16, v02533; GFX802-SDAG-NEXT:    flat_load_dwordx4 v[10:13], v[0:1]2534; GFX802-SDAG-NEXT:    v_addc_u32_e32 v18, vcc, 0, v1, vcc2535; GFX802-SDAG-NEXT:    flat_load_dwordx3 v[14:16], v[17:18]2536; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s4, v92537; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s8, v52538; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s9, v42539; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s10, v32540; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s11, v22541; GFX802-SDAG-NEXT:    s_mov_b32 m0, s42542; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s5, v82543; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s6, v72544; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s7, v62545; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(1)2546; GFX802-SDAG-NEXT:    v_writelane_b32 v13, s8, m02547; GFX802-SDAG-NEXT:    v_writelane_b32 v12, s9, m02548; GFX802-SDAG-NEXT:    v_writelane_b32 v11, s10, m02549; GFX802-SDAG-NEXT:    v_writelane_b32 v10, s11, m02550; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2551; GFX802-SDAG-NEXT:    v_writelane_b32 v16, s5, m02552; GFX802-SDAG-NEXT:    v_writelane_b32 v15, s6, m02553; GFX802-SDAG-NEXT:    v_writelane_b32 v14, s7, m02554; GFX802-SDAG-NEXT:    flat_store_dwordx4 v[0:1], v[10:13]2555; GFX802-SDAG-NEXT:    flat_store_dwordx3 v[17:18], v[14:16]2556; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2557; GFX802-SDAG-NEXT:    s_setpc_b64 s[30:31]2558;2559; GFX1010-SDAG-LABEL: test_writelane_v7i32:2560; GFX1010-SDAG:       ; %bb.0:2561; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2562; GFX1010-SDAG-NEXT:    s_clause 0x12563; GFX1010-SDAG-NEXT:    global_load_dwordx3 v[14:16], v[0:1], off offset:162564; GFX1010-SDAG-NEXT:    global_load_dwordx4 v[10:13], v[0:1], off2565; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s5, v92566; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s8, v52567; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s9, v42568; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s10, v32569; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s11, v22570; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s4, v82571; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s6, v72572; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s7, v62573; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(1)2574; GFX1010-SDAG-NEXT:    v_writelane_b32 v16, s4, s52575; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0)2576; GFX1010-SDAG-NEXT:    v_writelane_b32 v13, s8, s52577; GFX1010-SDAG-NEXT:    v_writelane_b32 v12, s9, s52578; GFX1010-SDAG-NEXT:    v_writelane_b32 v11, s10, s52579; GFX1010-SDAG-NEXT:    v_writelane_b32 v10, s11, s52580; GFX1010-SDAG-NEXT:    v_writelane_b32 v15, s6, s52581; GFX1010-SDAG-NEXT:    v_writelane_b32 v14, s7, s52582; GFX1010-SDAG-NEXT:    global_store_dwordx4 v[0:1], v[10:13], off2583; GFX1010-SDAG-NEXT:    global_store_dwordx3 v[0:1], v[14:16], off offset:162584; GFX1010-SDAG-NEXT:    s_setpc_b64 s[30:31]2585;2586; GFX1100-SDAG-LABEL: test_writelane_v7i32:2587; GFX1100-SDAG:       ; %bb.0:2588; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2589; GFX1100-SDAG-NEXT:    s_clause 0x12590; GFX1100-SDAG-NEXT:    global_load_b96 v[14:16], v[0:1], off offset:162591; GFX1100-SDAG-NEXT:    global_load_b128 v[10:13], v[0:1], off2592; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s1, v92593; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s4, v52594; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s5, v42595; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s6, v32596; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s7, v22597; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s0, v82598; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s2, v72599; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s3, v62600; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(1)2601; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_3)2602; GFX1100-SDAG-NEXT:    v_writelane_b32 v16, s0, s12603; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0)2604; GFX1100-SDAG-NEXT:    v_writelane_b32 v13, s4, s12605; GFX1100-SDAG-NEXT:    v_writelane_b32 v12, s5, s12606; GFX1100-SDAG-NEXT:    v_writelane_b32 v11, s6, s12607; GFX1100-SDAG-NEXT:    v_writelane_b32 v10, s7, s12608; GFX1100-SDAG-NEXT:    v_writelane_b32 v15, s2, s12609; GFX1100-SDAG-NEXT:    v_writelane_b32 v14, s3, s12610; GFX1100-SDAG-NEXT:    s_clause 0x12611; GFX1100-SDAG-NEXT:    global_store_b128 v[0:1], v[10:13], off2612; GFX1100-SDAG-NEXT:    global_store_b96 v[0:1], v[14:16], off offset:162613; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]2614;2615; GFX802-GISEL-LABEL: test_writelane_v7i32:2616; GFX802-GISEL:       ; %bb.0:2617; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2618; GFX802-GISEL-NEXT:    v_add_u32_e32 v18, vcc, 16, v02619; GFX802-GISEL-NEXT:    flat_load_dwordx4 v[10:13], v[0:1]2620; GFX802-GISEL-NEXT:    v_addc_u32_e32 v19, vcc, 0, v1, vcc2621; GFX802-GISEL-NEXT:    flat_load_dwordx4 v[14:17], v[18:19]2622; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s5, v92623; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s4, v22624; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s6, v32625; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s7, v42626; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s8, v52627; GFX802-GISEL-NEXT:    s_mov_b32 m0, s52628; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s9, v62629; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s10, v72630; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s11, v82631; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(1)2632; GFX802-GISEL-NEXT:    v_writelane_b32 v10, s4, m02633; GFX802-GISEL-NEXT:    v_writelane_b32 v11, s6, m02634; GFX802-GISEL-NEXT:    v_writelane_b32 v12, s7, m02635; GFX802-GISEL-NEXT:    v_writelane_b32 v13, s8, m02636; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)2637; GFX802-GISEL-NEXT:    v_writelane_b32 v14, s9, m02638; GFX802-GISEL-NEXT:    v_writelane_b32 v15, s10, m02639; GFX802-GISEL-NEXT:    v_writelane_b32 v16, s11, m02640; GFX802-GISEL-NEXT:    flat_store_dwordx4 v[0:1], v[10:13]2641; GFX802-GISEL-NEXT:    flat_store_dwordx3 v[18:19], v[14:16]2642; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)2643; GFX802-GISEL-NEXT:    s_setpc_b64 s[30:31]2644;2645; GFX1010-GISEL-LABEL: test_writelane_v7i32:2646; GFX1010-GISEL:       ; %bb.0:2647; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2648; GFX1010-GISEL-NEXT:    s_clause 0x12649; GFX1010-GISEL-NEXT:    global_load_dwordx4 v[10:13], v[0:1], off2650; GFX1010-GISEL-NEXT:    global_load_dwordx4 v[14:17], v[0:1], off offset:162651; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s4, v22652; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s5, v92653; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s6, v32654; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s7, v42655; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s8, v52656; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s9, v62657; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s10, v72658; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s11, v82659; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(1)2660; GFX1010-GISEL-NEXT:    v_writelane_b32 v10, s4, s52661; GFX1010-GISEL-NEXT:    v_writelane_b32 v11, s6, s52662; GFX1010-GISEL-NEXT:    v_writelane_b32 v12, s7, s52663; GFX1010-GISEL-NEXT:    v_writelane_b32 v13, s8, s52664; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0)2665; GFX1010-GISEL-NEXT:    v_writelane_b32 v14, s9, s52666; GFX1010-GISEL-NEXT:    v_writelane_b32 v15, s10, s52667; GFX1010-GISEL-NEXT:    v_writelane_b32 v16, s11, s52668; GFX1010-GISEL-NEXT:    global_store_dwordx4 v[0:1], v[10:13], off2669; GFX1010-GISEL-NEXT:    global_store_dwordx3 v[0:1], v[14:16], off offset:162670; GFX1010-GISEL-NEXT:    s_setpc_b64 s[30:31]2671;2672; GFX1100-GISEL-LABEL: test_writelane_v7i32:2673; GFX1100-GISEL:       ; %bb.0:2674; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2675; GFX1100-GISEL-NEXT:    s_clause 0x12676; GFX1100-GISEL-NEXT:    global_load_b128 v[10:13], v[0:1], off2677; GFX1100-GISEL-NEXT:    global_load_b128 v[14:17], v[0:1], off offset:162678; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s0, v22679; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s1, v92680; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s2, v32681; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s3, v42682; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s4, v52683; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s5, v62684; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s6, v72685; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s7, v82686; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(1)2687; GFX1100-GISEL-NEXT:    v_writelane_b32 v10, s0, s12688; GFX1100-GISEL-NEXT:    v_writelane_b32 v11, s2, s12689; GFX1100-GISEL-NEXT:    v_writelane_b32 v12, s3, s12690; GFX1100-GISEL-NEXT:    v_writelane_b32 v13, s4, s12691; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0)2692; GFX1100-GISEL-NEXT:    v_writelane_b32 v14, s5, s12693; GFX1100-GISEL-NEXT:    v_writelane_b32 v15, s6, s12694; GFX1100-GISEL-NEXT:    v_writelane_b32 v16, s7, s12695; GFX1100-GISEL-NEXT:    s_clause 0x12696; GFX1100-GISEL-NEXT:    global_store_b128 v[0:1], v[10:13], off2697; GFX1100-GISEL-NEXT:    global_store_b96 v[0:1], v[14:16], off offset:162698; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]2699  %oldval = load <7 x i32>, ptr addrspace(1) %out2700  %writelane = call <7 x i32> @llvm.amdgcn.writelane.v7i32(<7 x i32> %src, i32 %src1, <7 x i32> %oldval)2701  store <7 x i32> %writelane, ptr addrspace(1) %out, align 42702  ret void2703}2704 2705define void @test_writelane_v8i16(ptr addrspace(1) %out, <8 x i16> %src, i32 %src1) {2706; GFX802-SDAG-LABEL: test_writelane_v8i16:2707; GFX802-SDAG:       ; %bb.0:2708; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2709; GFX802-SDAG-NEXT:    flat_load_dwordx4 v[7:10], v[0:1]2710; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s4, v62711; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s5, v52712; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s6, v42713; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s7, v32714; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s8, v22715; GFX802-SDAG-NEXT:    s_mov_b32 m0, s42716; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2717; GFX802-SDAG-NEXT:    v_writelane_b32 v10, s5, m02718; GFX802-SDAG-NEXT:    v_writelane_b32 v9, s6, m02719; GFX802-SDAG-NEXT:    v_writelane_b32 v8, s7, m02720; GFX802-SDAG-NEXT:    v_writelane_b32 v7, s8, m02721; GFX802-SDAG-NEXT:    flat_store_dwordx4 v[0:1], v[7:10]2722; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2723; GFX802-SDAG-NEXT:    s_setpc_b64 s[30:31]2724;2725; GFX1010-SDAG-LABEL: test_writelane_v8i16:2726; GFX1010-SDAG:       ; %bb.0:2727; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2728; GFX1010-SDAG-NEXT:    global_load_dwordx4 v[7:10], v[0:1], off2729; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s4, v52730; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s5, v62731; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s6, v42732; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s7, v32733; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s8, v22734; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0)2735; GFX1010-SDAG-NEXT:    v_writelane_b32 v10, s4, s52736; GFX1010-SDAG-NEXT:    v_writelane_b32 v9, s6, s52737; GFX1010-SDAG-NEXT:    v_writelane_b32 v8, s7, s52738; GFX1010-SDAG-NEXT:    v_writelane_b32 v7, s8, s52739; GFX1010-SDAG-NEXT:    global_store_dwordx4 v[0:1], v[7:10], off2740; GFX1010-SDAG-NEXT:    s_setpc_b64 s[30:31]2741;2742; GFX1100-SDAG-LABEL: test_writelane_v8i16:2743; GFX1100-SDAG:       ; %bb.0:2744; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2745; GFX1100-SDAG-NEXT:    global_load_b128 v[7:10], v[0:1], off2746; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s0, v52747; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s1, v62748; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s2, v42749; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s3, v32750; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s4, v22751; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0)2752; GFX1100-SDAG-NEXT:    v_writelane_b32 v10, s0, s12753; GFX1100-SDAG-NEXT:    v_writelane_b32 v9, s2, s12754; GFX1100-SDAG-NEXT:    v_writelane_b32 v8, s3, s12755; GFX1100-SDAG-NEXT:    v_writelane_b32 v7, s4, s12756; GFX1100-SDAG-NEXT:    global_store_b128 v[0:1], v[7:10], off2757; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]2758;2759; GFX802-GISEL-LABEL: test_writelane_v8i16:2760; GFX802-GISEL:       ; %bb.0:2761; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2762; GFX802-GISEL-NEXT:    flat_load_dwordx4 v[7:10], v[0:1]2763; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s5, v62764; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s4, v22765; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s6, v32766; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s7, v42767; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s8, v52768; GFX802-GISEL-NEXT:    s_mov_b32 m0, s52769; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)2770; GFX802-GISEL-NEXT:    v_writelane_b32 v7, s4, m02771; GFX802-GISEL-NEXT:    v_writelane_b32 v8, s6, m02772; GFX802-GISEL-NEXT:    v_writelane_b32 v9, s7, m02773; GFX802-GISEL-NEXT:    v_writelane_b32 v10, s8, m02774; GFX802-GISEL-NEXT:    flat_store_dwordx4 v[0:1], v[7:10]2775; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)2776; GFX802-GISEL-NEXT:    s_setpc_b64 s[30:31]2777;2778; GFX1010-GISEL-LABEL: test_writelane_v8i16:2779; GFX1010-GISEL:       ; %bb.0:2780; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2781; GFX1010-GISEL-NEXT:    global_load_dwordx4 v[7:10], v[0:1], off2782; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s4, v22783; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s5, v62784; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s6, v32785; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s7, v42786; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s8, v52787; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0)2788; GFX1010-GISEL-NEXT:    v_writelane_b32 v7, s4, s52789; GFX1010-GISEL-NEXT:    v_writelane_b32 v8, s6, s52790; GFX1010-GISEL-NEXT:    v_writelane_b32 v9, s7, s52791; GFX1010-GISEL-NEXT:    v_writelane_b32 v10, s8, s52792; GFX1010-GISEL-NEXT:    global_store_dwordx4 v[0:1], v[7:10], off2793; GFX1010-GISEL-NEXT:    s_setpc_b64 s[30:31]2794;2795; GFX1100-GISEL-LABEL: test_writelane_v8i16:2796; GFX1100-GISEL:       ; %bb.0:2797; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2798; GFX1100-GISEL-NEXT:    global_load_b128 v[7:10], v[0:1], off2799; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s0, v22800; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s1, v62801; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s2, v32802; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s3, v42803; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s4, v52804; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0)2805; GFX1100-GISEL-NEXT:    v_writelane_b32 v7, s0, s12806; GFX1100-GISEL-NEXT:    v_writelane_b32 v8, s2, s12807; GFX1100-GISEL-NEXT:    v_writelane_b32 v9, s3, s12808; GFX1100-GISEL-NEXT:    v_writelane_b32 v10, s4, s12809; GFX1100-GISEL-NEXT:    global_store_b128 v[0:1], v[7:10], off2810; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]2811  %oldval = load <8 x i16>, ptr addrspace(1) %out2812  %writelane = call <8 x i16> @llvm.amdgcn.writelane.v8i16(<8 x i16> %src, i32 %src1, <8 x i16> %oldval)2813  store <8 x i16> %writelane, ptr addrspace(1) %out, align 42814  ret void2815}2816 2817define void @test_writelane_v2i64(ptr addrspace(1) %out, <2 x i64> %src, i32 %src1) {2818; GFX802-SDAG-LABEL: test_writelane_v2i64:2819; GFX802-SDAG:       ; %bb.0:2820; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2821; GFX802-SDAG-NEXT:    flat_load_dwordx4 v[7:10], v[0:1]2822; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s4, v62823; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s5, v52824; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s6, v42825; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s7, v32826; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s8, v22827; GFX802-SDAG-NEXT:    s_mov_b32 m0, s42828; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2829; GFX802-SDAG-NEXT:    v_writelane_b32 v10, s5, m02830; GFX802-SDAG-NEXT:    v_writelane_b32 v9, s6, m02831; GFX802-SDAG-NEXT:    v_writelane_b32 v8, s7, m02832; GFX802-SDAG-NEXT:    v_writelane_b32 v7, s8, m02833; GFX802-SDAG-NEXT:    flat_store_dwordx4 v[0:1], v[7:10]2834; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2835; GFX802-SDAG-NEXT:    s_setpc_b64 s[30:31]2836;2837; GFX1010-SDAG-LABEL: test_writelane_v2i64:2838; GFX1010-SDAG:       ; %bb.0:2839; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2840; GFX1010-SDAG-NEXT:    global_load_dwordx4 v[7:10], v[0:1], off2841; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s4, v52842; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s5, v62843; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s6, v42844; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s7, v32845; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s8, v22846; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0)2847; GFX1010-SDAG-NEXT:    v_writelane_b32 v10, s4, s52848; GFX1010-SDAG-NEXT:    v_writelane_b32 v9, s6, s52849; GFX1010-SDAG-NEXT:    v_writelane_b32 v8, s7, s52850; GFX1010-SDAG-NEXT:    v_writelane_b32 v7, s8, s52851; GFX1010-SDAG-NEXT:    global_store_dwordx4 v[0:1], v[7:10], off2852; GFX1010-SDAG-NEXT:    s_setpc_b64 s[30:31]2853;2854; GFX1100-SDAG-LABEL: test_writelane_v2i64:2855; GFX1100-SDAG:       ; %bb.0:2856; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2857; GFX1100-SDAG-NEXT:    global_load_b128 v[7:10], v[0:1], off2858; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s0, v52859; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s1, v62860; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s2, v42861; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s3, v32862; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s4, v22863; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0)2864; GFX1100-SDAG-NEXT:    v_writelane_b32 v10, s0, s12865; GFX1100-SDAG-NEXT:    v_writelane_b32 v9, s2, s12866; GFX1100-SDAG-NEXT:    v_writelane_b32 v8, s3, s12867; GFX1100-SDAG-NEXT:    v_writelane_b32 v7, s4, s12868; GFX1100-SDAG-NEXT:    global_store_b128 v[0:1], v[7:10], off2869; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]2870;2871; GFX802-GISEL-LABEL: test_writelane_v2i64:2872; GFX802-GISEL:       ; %bb.0:2873; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2874; GFX802-GISEL-NEXT:    flat_load_dwordx4 v[7:10], v[0:1]2875; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s5, v62876; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s4, v22877; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s6, v32878; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s7, v42879; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s8, v52880; GFX802-GISEL-NEXT:    s_mov_b32 m0, s52881; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)2882; GFX802-GISEL-NEXT:    v_writelane_b32 v7, s4, m02883; GFX802-GISEL-NEXT:    v_writelane_b32 v8, s6, m02884; GFX802-GISEL-NEXT:    v_writelane_b32 v9, s7, m02885; GFX802-GISEL-NEXT:    v_writelane_b32 v10, s8, m02886; GFX802-GISEL-NEXT:    flat_store_dwordx4 v[0:1], v[7:10]2887; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)2888; GFX802-GISEL-NEXT:    s_setpc_b64 s[30:31]2889;2890; GFX1010-GISEL-LABEL: test_writelane_v2i64:2891; GFX1010-GISEL:       ; %bb.0:2892; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2893; GFX1010-GISEL-NEXT:    global_load_dwordx4 v[7:10], v[0:1], off2894; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s4, v22895; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s5, v62896; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s6, v32897; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s7, v42898; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s8, v52899; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0)2900; GFX1010-GISEL-NEXT:    v_writelane_b32 v7, s4, s52901; GFX1010-GISEL-NEXT:    v_writelane_b32 v8, s6, s52902; GFX1010-GISEL-NEXT:    v_writelane_b32 v9, s7, s52903; GFX1010-GISEL-NEXT:    v_writelane_b32 v10, s8, s52904; GFX1010-GISEL-NEXT:    global_store_dwordx4 v[0:1], v[7:10], off2905; GFX1010-GISEL-NEXT:    s_setpc_b64 s[30:31]2906;2907; GFX1100-GISEL-LABEL: test_writelane_v2i64:2908; GFX1100-GISEL:       ; %bb.0:2909; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2910; GFX1100-GISEL-NEXT:    global_load_b128 v[7:10], v[0:1], off2911; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s0, v22912; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s1, v62913; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s2, v32914; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s3, v42915; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s4, v52916; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0)2917; GFX1100-GISEL-NEXT:    v_writelane_b32 v7, s0, s12918; GFX1100-GISEL-NEXT:    v_writelane_b32 v8, s2, s12919; GFX1100-GISEL-NEXT:    v_writelane_b32 v9, s3, s12920; GFX1100-GISEL-NEXT:    v_writelane_b32 v10, s4, s12921; GFX1100-GISEL-NEXT:    global_store_b128 v[0:1], v[7:10], off2922; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]2923  %oldval = load <2 x i64>, ptr addrspace(1) %out2924  %writelane = call <2 x i64> @llvm.amdgcn.writelane.v2i64(<2 x i64> %src, i32 %src1, <2 x i64> %oldval)2925  store <2 x i64> %writelane, ptr addrspace(1) %out, align 42926  ret void2927}2928 2929define void @test_writelane_v3i64(ptr addrspace(1) %out, <3 x i64> %src, i32 %src1) {2930; GFX802-SDAG-LABEL: test_writelane_v3i64:2931; GFX802-SDAG:       ; %bb.0:2932; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2933; GFX802-SDAG-NEXT:    v_add_u32_e32 v13, vcc, 16, v02934; GFX802-SDAG-NEXT:    flat_load_dwordx4 v[9:12], v[0:1]2935; GFX802-SDAG-NEXT:    v_addc_u32_e32 v14, vcc, 0, v1, vcc2936; GFX802-SDAG-NEXT:    flat_load_dwordx2 v[15:16], v[13:14]2937; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s4, v82938; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s7, v52939; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s8, v42940; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s9, v32941; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s10, v22942; GFX802-SDAG-NEXT:    s_mov_b32 m0, s42943; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s5, v72944; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s6, v62945; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(1)2946; GFX802-SDAG-NEXT:    v_writelane_b32 v12, s7, m02947; GFX802-SDAG-NEXT:    v_writelane_b32 v11, s8, m02948; GFX802-SDAG-NEXT:    v_writelane_b32 v10, s9, m02949; GFX802-SDAG-NEXT:    v_writelane_b32 v9, s10, m02950; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2951; GFX802-SDAG-NEXT:    v_writelane_b32 v16, s5, m02952; GFX802-SDAG-NEXT:    v_writelane_b32 v15, s6, m02953; GFX802-SDAG-NEXT:    flat_store_dwordx4 v[0:1], v[9:12]2954; GFX802-SDAG-NEXT:    flat_store_dwordx2 v[13:14], v[15:16]2955; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)2956; GFX802-SDAG-NEXT:    s_setpc_b64 s[30:31]2957;2958; GFX1010-SDAG-LABEL: test_writelane_v3i64:2959; GFX1010-SDAG:       ; %bb.0:2960; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2961; GFX1010-SDAG-NEXT:    s_clause 0x12962; GFX1010-SDAG-NEXT:    global_load_dwordx2 v[13:14], v[0:1], off offset:162963; GFX1010-SDAG-NEXT:    global_load_dwordx4 v[9:12], v[0:1], off2964; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s5, v82965; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s7, v52966; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s8, v42967; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s9, v32968; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s10, v22969; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s4, v72970; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s6, v62971; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(1)2972; GFX1010-SDAG-NEXT:    v_writelane_b32 v14, s4, s52973; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0)2974; GFX1010-SDAG-NEXT:    v_writelane_b32 v12, s7, s52975; GFX1010-SDAG-NEXT:    v_writelane_b32 v11, s8, s52976; GFX1010-SDAG-NEXT:    v_writelane_b32 v10, s9, s52977; GFX1010-SDAG-NEXT:    v_writelane_b32 v9, s10, s52978; GFX1010-SDAG-NEXT:    v_writelane_b32 v13, s6, s52979; GFX1010-SDAG-NEXT:    global_store_dwordx4 v[0:1], v[9:12], off2980; GFX1010-SDAG-NEXT:    global_store_dwordx2 v[0:1], v[13:14], off offset:162981; GFX1010-SDAG-NEXT:    s_setpc_b64 s[30:31]2982;2983; GFX1100-SDAG-LABEL: test_writelane_v3i64:2984; GFX1100-SDAG:       ; %bb.0:2985; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2986; GFX1100-SDAG-NEXT:    s_clause 0x12987; GFX1100-SDAG-NEXT:    global_load_b64 v[13:14], v[0:1], off offset:162988; GFX1100-SDAG-NEXT:    global_load_b128 v[9:12], v[0:1], off2989; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s1, v82990; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s3, v52991; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s4, v42992; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s5, v32993; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s6, v22994; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s0, v72995; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s2, v62996; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(1)2997; GFX1100-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)2998; GFX1100-SDAG-NEXT:    v_writelane_b32 v14, s0, s12999; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0)3000; GFX1100-SDAG-NEXT:    v_writelane_b32 v12, s3, s13001; GFX1100-SDAG-NEXT:    v_writelane_b32 v11, s4, s13002; GFX1100-SDAG-NEXT:    v_writelane_b32 v10, s5, s13003; GFX1100-SDAG-NEXT:    v_writelane_b32 v9, s6, s13004; GFX1100-SDAG-NEXT:    v_writelane_b32 v13, s2, s13005; GFX1100-SDAG-NEXT:    s_clause 0x13006; GFX1100-SDAG-NEXT:    global_store_b128 v[0:1], v[9:12], off3007; GFX1100-SDAG-NEXT:    global_store_b64 v[0:1], v[13:14], off offset:163008; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]3009;3010; GFX802-GISEL-LABEL: test_writelane_v3i64:3011; GFX802-GISEL:       ; %bb.0:3012; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3013; GFX802-GISEL-NEXT:    v_add_u32_e32 v17, vcc, 16, v03014; GFX802-GISEL-NEXT:    flat_load_dwordx4 v[9:12], v[0:1]3015; GFX802-GISEL-NEXT:    v_addc_u32_e32 v18, vcc, 0, v1, vcc3016; GFX802-GISEL-NEXT:    flat_load_dwordx4 v[13:16], v[17:18]3017; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s5, v83018; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s4, v23019; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s6, v33020; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s7, v43021; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s8, v53022; GFX802-GISEL-NEXT:    s_mov_b32 m0, s53023; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s9, v63024; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s10, v73025; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(1)3026; GFX802-GISEL-NEXT:    v_writelane_b32 v9, s4, m03027; GFX802-GISEL-NEXT:    v_writelane_b32 v10, s6, m03028; GFX802-GISEL-NEXT:    v_writelane_b32 v11, s7, m03029; GFX802-GISEL-NEXT:    v_writelane_b32 v12, s8, m03030; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)3031; GFX802-GISEL-NEXT:    v_writelane_b32 v13, s9, m03032; GFX802-GISEL-NEXT:    v_writelane_b32 v14, s10, m03033; GFX802-GISEL-NEXT:    flat_store_dwordx4 v[0:1], v[9:12]3034; GFX802-GISEL-NEXT:    flat_store_dwordx2 v[17:18], v[13:14]3035; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)3036; GFX802-GISEL-NEXT:    s_setpc_b64 s[30:31]3037;3038; GFX1010-GISEL-LABEL: test_writelane_v3i64:3039; GFX1010-GISEL:       ; %bb.0:3040; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3041; GFX1010-GISEL-NEXT:    s_clause 0x13042; GFX1010-GISEL-NEXT:    global_load_dwordx4 v[9:12], v[0:1], off3043; GFX1010-GISEL-NEXT:    global_load_dwordx4 v[13:16], v[0:1], off offset:163044; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s4, v23045; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s5, v83046; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s6, v33047; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s7, v43048; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s8, v53049; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s9, v63050; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s10, v73051; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(1)3052; GFX1010-GISEL-NEXT:    v_writelane_b32 v9, s4, s53053; GFX1010-GISEL-NEXT:    v_writelane_b32 v10, s6, s53054; GFX1010-GISEL-NEXT:    v_writelane_b32 v11, s7, s53055; GFX1010-GISEL-NEXT:    v_writelane_b32 v12, s8, s53056; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0)3057; GFX1010-GISEL-NEXT:    v_writelane_b32 v13, s9, s53058; GFX1010-GISEL-NEXT:    v_writelane_b32 v14, s10, s53059; GFX1010-GISEL-NEXT:    global_store_dwordx4 v[0:1], v[9:12], off3060; GFX1010-GISEL-NEXT:    global_store_dwordx2 v[0:1], v[13:14], off offset:163061; GFX1010-GISEL-NEXT:    s_setpc_b64 s[30:31]3062;3063; GFX1100-GISEL-LABEL: test_writelane_v3i64:3064; GFX1100-GISEL:       ; %bb.0:3065; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3066; GFX1100-GISEL-NEXT:    s_clause 0x13067; GFX1100-GISEL-NEXT:    global_load_b128 v[9:12], v[0:1], off3068; GFX1100-GISEL-NEXT:    global_load_b128 v[13:16], v[0:1], off offset:163069; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s0, v23070; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s1, v83071; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s2, v33072; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s3, v43073; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s4, v53074; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s5, v63075; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s6, v73076; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(1)3077; GFX1100-GISEL-NEXT:    v_writelane_b32 v9, s0, s13078; GFX1100-GISEL-NEXT:    v_writelane_b32 v10, s2, s13079; GFX1100-GISEL-NEXT:    v_writelane_b32 v11, s3, s13080; GFX1100-GISEL-NEXT:    v_writelane_b32 v12, s4, s13081; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0)3082; GFX1100-GISEL-NEXT:    v_writelane_b32 v13, s5, s13083; GFX1100-GISEL-NEXT:    v_writelane_b32 v14, s6, s13084; GFX1100-GISEL-NEXT:    s_clause 0x13085; GFX1100-GISEL-NEXT:    global_store_b128 v[0:1], v[9:12], off3086; GFX1100-GISEL-NEXT:    global_store_b64 v[0:1], v[13:14], off offset:163087; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]3088  %oldval = load <3 x i64>, ptr addrspace(1) %out3089  %writelane = call <3 x i64> @llvm.amdgcn.writelane.v2i64(<3 x i64> %src, i32 %src1, <3 x i64> %oldval)3090  store <3 x i64> %writelane, ptr addrspace(1) %out, align 43091  ret void3092}3093 3094define void @test_writelane_v4f64(ptr addrspace(1) %out, <4 x double> %src, i32 %src1) {3095; GFX802-SDAG-LABEL: test_writelane_v4f64:3096; GFX802-SDAG:       ; %bb.0:3097; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3098; GFX802-SDAG-NEXT:    v_add_u32_e32 v19, vcc, 16, v03099; GFX802-SDAG-NEXT:    flat_load_dwordx4 v[11:14], v[0:1]3100; GFX802-SDAG-NEXT:    v_addc_u32_e32 v20, vcc, 0, v1, vcc3101; GFX802-SDAG-NEXT:    flat_load_dwordx4 v[15:18], v[19:20]3102; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s4, v103103; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s9, v53104; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s10, v43105; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s11, v33106; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s12, v23107; GFX802-SDAG-NEXT:    s_mov_b32 m0, s43108; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s5, v93109; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s6, v83110; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s7, v73111; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s8, v63112; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(1)3113; GFX802-SDAG-NEXT:    v_writelane_b32 v14, s9, m03114; GFX802-SDAG-NEXT:    v_writelane_b32 v13, s10, m03115; GFX802-SDAG-NEXT:    v_writelane_b32 v12, s11, m03116; GFX802-SDAG-NEXT:    v_writelane_b32 v11, s12, m03117; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)3118; GFX802-SDAG-NEXT:    v_writelane_b32 v18, s5, m03119; GFX802-SDAG-NEXT:    v_writelane_b32 v17, s6, m03120; GFX802-SDAG-NEXT:    v_writelane_b32 v16, s7, m03121; GFX802-SDAG-NEXT:    v_writelane_b32 v15, s8, m03122; GFX802-SDAG-NEXT:    flat_store_dwordx4 v[0:1], v[11:14]3123; GFX802-SDAG-NEXT:    flat_store_dwordx4 v[19:20], v[15:18]3124; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)3125; GFX802-SDAG-NEXT:    s_setpc_b64 s[30:31]3126;3127; GFX1010-SDAG-LABEL: test_writelane_v4f64:3128; GFX1010-SDAG:       ; %bb.0:3129; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3130; GFX1010-SDAG-NEXT:    s_clause 0x13131; GFX1010-SDAG-NEXT:    global_load_dwordx4 v[11:14], v[0:1], off offset:163132; GFX1010-SDAG-NEXT:    global_load_dwordx4 v[15:18], v[0:1], off3133; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s5, v103134; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s9, v53135; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s10, v43136; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s11, v33137; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s12, v23138; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s4, v93139; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s6, v83140; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s7, v73141; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s8, v63142; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(1)3143; GFX1010-SDAG-NEXT:    v_writelane_b32 v14, s4, s53144; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0)3145; GFX1010-SDAG-NEXT:    v_writelane_b32 v18, s9, s53146; GFX1010-SDAG-NEXT:    v_writelane_b32 v17, s10, s53147; GFX1010-SDAG-NEXT:    v_writelane_b32 v16, s11, s53148; GFX1010-SDAG-NEXT:    v_writelane_b32 v15, s12, s53149; GFX1010-SDAG-NEXT:    v_writelane_b32 v13, s6, s53150; GFX1010-SDAG-NEXT:    v_writelane_b32 v12, s7, s53151; GFX1010-SDAG-NEXT:    v_writelane_b32 v11, s8, s53152; GFX1010-SDAG-NEXT:    global_store_dwordx4 v[0:1], v[15:18], off3153; GFX1010-SDAG-NEXT:    global_store_dwordx4 v[0:1], v[11:14], off offset:163154; GFX1010-SDAG-NEXT:    s_setpc_b64 s[30:31]3155;3156; GFX1100-SDAG-LABEL: test_writelane_v4f64:3157; GFX1100-SDAG:       ; %bb.0:3158; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3159; GFX1100-SDAG-NEXT:    s_clause 0x13160; GFX1100-SDAG-NEXT:    global_load_b128 v[11:14], v[0:1], off offset:163161; GFX1100-SDAG-NEXT:    global_load_b128 v[15:18], v[0:1], off3162; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s1, v103163; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s5, v53164; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s6, v43165; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s7, v33166; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s8, v23167; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s0, v93168; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s2, v83169; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s3, v73170; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s4, v63171; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(1)3172; GFX1100-SDAG-NEXT:    v_writelane_b32 v14, s0, s13173; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0)3174; GFX1100-SDAG-NEXT:    v_writelane_b32 v18, s5, s13175; GFX1100-SDAG-NEXT:    v_writelane_b32 v17, s6, s13176; GFX1100-SDAG-NEXT:    v_writelane_b32 v16, s7, s13177; GFX1100-SDAG-NEXT:    v_writelane_b32 v15, s8, s13178; GFX1100-SDAG-NEXT:    v_writelane_b32 v13, s2, s13179; GFX1100-SDAG-NEXT:    v_writelane_b32 v12, s3, s13180; GFX1100-SDAG-NEXT:    v_writelane_b32 v11, s4, s13181; GFX1100-SDAG-NEXT:    s_clause 0x13182; GFX1100-SDAG-NEXT:    global_store_b128 v[0:1], v[15:18], off3183; GFX1100-SDAG-NEXT:    global_store_b128 v[0:1], v[11:14], off offset:163184; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]3185;3186; GFX802-GISEL-LABEL: test_writelane_v4f64:3187; GFX802-GISEL:       ; %bb.0:3188; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3189; GFX802-GISEL-NEXT:    v_add_u32_e32 v19, vcc, 16, v03190; GFX802-GISEL-NEXT:    flat_load_dwordx4 v[11:14], v[0:1]3191; GFX802-GISEL-NEXT:    v_addc_u32_e32 v20, vcc, 0, v1, vcc3192; GFX802-GISEL-NEXT:    flat_load_dwordx4 v[15:18], v[19:20]3193; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s5, v103194; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s4, v23195; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s6, v33196; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s7, v43197; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s8, v53198; GFX802-GISEL-NEXT:    s_mov_b32 m0, s53199; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s9, v63200; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s10, v73201; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s11, v83202; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s12, v93203; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(1)3204; GFX802-GISEL-NEXT:    v_writelane_b32 v11, s4, m03205; GFX802-GISEL-NEXT:    v_writelane_b32 v12, s6, m03206; GFX802-GISEL-NEXT:    v_writelane_b32 v13, s7, m03207; GFX802-GISEL-NEXT:    v_writelane_b32 v14, s8, m03208; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)3209; GFX802-GISEL-NEXT:    v_writelane_b32 v15, s9, m03210; GFX802-GISEL-NEXT:    v_writelane_b32 v16, s10, m03211; GFX802-GISEL-NEXT:    v_writelane_b32 v17, s11, m03212; GFX802-GISEL-NEXT:    v_writelane_b32 v18, s12, m03213; GFX802-GISEL-NEXT:    flat_store_dwordx4 v[0:1], v[11:14]3214; GFX802-GISEL-NEXT:    flat_store_dwordx4 v[19:20], v[15:18]3215; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)3216; GFX802-GISEL-NEXT:    s_setpc_b64 s[30:31]3217;3218; GFX1010-GISEL-LABEL: test_writelane_v4f64:3219; GFX1010-GISEL:       ; %bb.0:3220; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3221; GFX1010-GISEL-NEXT:    s_clause 0x13222; GFX1010-GISEL-NEXT:    global_load_dwordx4 v[11:14], v[0:1], off3223; GFX1010-GISEL-NEXT:    global_load_dwordx4 v[15:18], v[0:1], off offset:163224; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s4, v23225; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s5, v103226; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s6, v33227; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s7, v43228; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s8, v53229; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s9, v63230; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s10, v73231; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s11, v83232; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s12, v93233; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(1)3234; GFX1010-GISEL-NEXT:    v_writelane_b32 v11, s4, s53235; GFX1010-GISEL-NEXT:    v_writelane_b32 v12, s6, s53236; GFX1010-GISEL-NEXT:    v_writelane_b32 v13, s7, s53237; GFX1010-GISEL-NEXT:    v_writelane_b32 v14, s8, s53238; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0)3239; GFX1010-GISEL-NEXT:    v_writelane_b32 v15, s9, s53240; GFX1010-GISEL-NEXT:    v_writelane_b32 v16, s10, s53241; GFX1010-GISEL-NEXT:    v_writelane_b32 v17, s11, s53242; GFX1010-GISEL-NEXT:    v_writelane_b32 v18, s12, s53243; GFX1010-GISEL-NEXT:    global_store_dwordx4 v[0:1], v[11:14], off3244; GFX1010-GISEL-NEXT:    global_store_dwordx4 v[0:1], v[15:18], off offset:163245; GFX1010-GISEL-NEXT:    s_setpc_b64 s[30:31]3246;3247; GFX1100-GISEL-LABEL: test_writelane_v4f64:3248; GFX1100-GISEL:       ; %bb.0:3249; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3250; GFX1100-GISEL-NEXT:    s_clause 0x13251; GFX1100-GISEL-NEXT:    global_load_b128 v[11:14], v[0:1], off3252; GFX1100-GISEL-NEXT:    global_load_b128 v[15:18], v[0:1], off offset:163253; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s0, v23254; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s1, v103255; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s2, v33256; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s3, v43257; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s4, v53258; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s5, v63259; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s6, v73260; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s7, v83261; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s8, v93262; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(1)3263; GFX1100-GISEL-NEXT:    v_writelane_b32 v11, s0, s13264; GFX1100-GISEL-NEXT:    v_writelane_b32 v12, s2, s13265; GFX1100-GISEL-NEXT:    v_writelane_b32 v13, s3, s13266; GFX1100-GISEL-NEXT:    v_writelane_b32 v14, s4, s13267; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0)3268; GFX1100-GISEL-NEXT:    v_writelane_b32 v15, s5, s13269; GFX1100-GISEL-NEXT:    v_writelane_b32 v16, s6, s13270; GFX1100-GISEL-NEXT:    v_writelane_b32 v17, s7, s13271; GFX1100-GISEL-NEXT:    v_writelane_b32 v18, s8, s13272; GFX1100-GISEL-NEXT:    s_clause 0x13273; GFX1100-GISEL-NEXT:    global_store_b128 v[0:1], v[11:14], off3274; GFX1100-GISEL-NEXT:    global_store_b128 v[0:1], v[15:18], off offset:163275; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]3276  %oldval = load <4 x double>, ptr addrspace(1) %out3277  %writelane = call <4 x double> @llvm.amdgcn.writelane.v4f64(<4 x double> %src, i32 %src1, <4 x double> %oldval)3278  store <4 x double> %writelane, ptr addrspace(1) %out, align 43279  ret void3280}3281 3282define void @test_writelane_v8f64(ptr addrspace(1) %out, <8 x double> %src, i32 %src1) {3283; GFX802-SDAG-LABEL: test_writelane_v8f64:3284; GFX802-SDAG:       ; %bb.0:3285; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3286; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s4, v183287; GFX802-SDAG-NEXT:    flat_load_dwordx4 v[18:21], v[0:1]3288; GFX802-SDAG-NEXT:    v_add_u32_e32 v22, vcc, 16, v03289; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s5, v53290; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s6, v43291; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s7, v33292; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s8, v23293; GFX802-SDAG-NEXT:    v_addc_u32_e32 v23, vcc, 0, v1, vcc3294; GFX802-SDAG-NEXT:    s_mov_b32 m0, s43295; GFX802-SDAG-NEXT:    flat_load_dwordx4 v[2:5], v[22:23]3296; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s4, v93297; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s10, v153298; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s11, v143299; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s12, v133300; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s13, v123301; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s14, v113302; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s15, v103303; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s9, v163304; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(1)3305; GFX802-SDAG-NEXT:    v_writelane_b32 v21, s5, m03306; GFX802-SDAG-NEXT:    v_writelane_b32 v20, s6, m03307; GFX802-SDAG-NEXT:    v_writelane_b32 v19, s7, m03308; GFX802-SDAG-NEXT:    v_writelane_b32 v18, s8, m03309; GFX802-SDAG-NEXT:    flat_store_dwordx4 v[0:1], v[18:21]3310; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s5, v83311; GFX802-SDAG-NEXT:    v_add_u32_e32 v18, vcc, 32, v03312; GFX802-SDAG-NEXT:    v_addc_u32_e32 v19, vcc, 0, v1, vcc3313; GFX802-SDAG-NEXT:    v_add_u32_e32 v0, vcc, 48, v03314; GFX802-SDAG-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3315; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s6, v73316; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s7, v63317; GFX802-SDAG-NEXT:    flat_load_dwordx4 v[6:9], v[0:1]3318; GFX802-SDAG-NEXT:    flat_load_dwordx4 v[12:15], v[18:19]3319; GFX802-SDAG-NEXT:    v_readfirstlane_b32 s8, v173320; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(3)3321; GFX802-SDAG-NEXT:    v_writelane_b32 v5, s4, m03322; GFX802-SDAG-NEXT:    v_writelane_b32 v4, s5, m03323; GFX802-SDAG-NEXT:    v_writelane_b32 v3, s6, m03324; GFX802-SDAG-NEXT:    v_writelane_b32 v2, s7, m03325; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(1)3326; GFX802-SDAG-NEXT:    v_writelane_b32 v9, s8, m03327; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)3328; GFX802-SDAG-NEXT:    v_writelane_b32 v15, s12, m03329; GFX802-SDAG-NEXT:    v_writelane_b32 v14, s13, m03330; GFX802-SDAG-NEXT:    v_writelane_b32 v13, s14, m03331; GFX802-SDAG-NEXT:    v_writelane_b32 v12, s15, m03332; GFX802-SDAG-NEXT:    v_writelane_b32 v8, s9, m03333; GFX802-SDAG-NEXT:    v_writelane_b32 v7, s10, m03334; GFX802-SDAG-NEXT:    v_writelane_b32 v6, s11, m03335; GFX802-SDAG-NEXT:    flat_store_dwordx4 v[18:19], v[12:15]3336; GFX802-SDAG-NEXT:    flat_store_dwordx4 v[0:1], v[6:9]3337; GFX802-SDAG-NEXT:    flat_store_dwordx4 v[22:23], v[2:5]3338; GFX802-SDAG-NEXT:    s_waitcnt vmcnt(0)3339; GFX802-SDAG-NEXT:    s_setpc_b64 s[30:31]3340;3341; GFX1010-SDAG-LABEL: test_writelane_v8f64:3342; GFX1010-SDAG:       ; %bb.0:3343; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3344; GFX1010-SDAG-NEXT:    s_clause 0x33345; GFX1010-SDAG-NEXT:    global_load_dwordx4 v[19:22], v[0:1], off offset:163346; GFX1010-SDAG-NEXT:    global_load_dwordx4 v[23:26], v[0:1], off3347; GFX1010-SDAG-NEXT:    global_load_dwordx4 v[27:30], v[0:1], off offset:483348; GFX1010-SDAG-NEXT:    global_load_dwordx4 v[31:34], v[0:1], off offset:323349; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s5, v183350; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s17, v133351; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s18, v123352; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s19, v113353; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s20, v103354; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s13, v173355; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s14, v163356; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s15, v153357; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s16, v143358; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s9, v53359; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s10, v43360; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s11, v33361; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s12, v23362; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s4, v93363; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s6, v83364; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s7, v73365; GFX1010-SDAG-NEXT:    v_readfirstlane_b32 s8, v63366; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(3)3367; GFX1010-SDAG-NEXT:    v_writelane_b32 v22, s4, s53368; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(2)3369; GFX1010-SDAG-NEXT:    v_writelane_b32 v26, s9, s53370; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(1)3371; GFX1010-SDAG-NEXT:    v_writelane_b32 v30, s13, s53372; GFX1010-SDAG-NEXT:    s_waitcnt vmcnt(0)3373; GFX1010-SDAG-NEXT:    v_writelane_b32 v34, s17, s53374; GFX1010-SDAG-NEXT:    v_writelane_b32 v33, s18, s53375; GFX1010-SDAG-NEXT:    v_writelane_b32 v32, s19, s53376; GFX1010-SDAG-NEXT:    v_writelane_b32 v31, s20, s53377; GFX1010-SDAG-NEXT:    v_writelane_b32 v29, s14, s53378; GFX1010-SDAG-NEXT:    v_writelane_b32 v28, s15, s53379; GFX1010-SDAG-NEXT:    v_writelane_b32 v27, s16, s53380; GFX1010-SDAG-NEXT:    v_writelane_b32 v25, s10, s53381; GFX1010-SDAG-NEXT:    v_writelane_b32 v24, s11, s53382; GFX1010-SDAG-NEXT:    v_writelane_b32 v23, s12, s53383; GFX1010-SDAG-NEXT:    v_writelane_b32 v21, s6, s53384; GFX1010-SDAG-NEXT:    v_writelane_b32 v20, s7, s53385; GFX1010-SDAG-NEXT:    v_writelane_b32 v19, s8, s53386; GFX1010-SDAG-NEXT:    global_store_dwordx4 v[0:1], v[31:34], off offset:323387; GFX1010-SDAG-NEXT:    global_store_dwordx4 v[0:1], v[27:30], off offset:483388; GFX1010-SDAG-NEXT:    global_store_dwordx4 v[0:1], v[23:26], off3389; GFX1010-SDAG-NEXT:    global_store_dwordx4 v[0:1], v[19:22], off offset:163390; GFX1010-SDAG-NEXT:    s_setpc_b64 s[30:31]3391;3392; GFX1100-SDAG-LABEL: test_writelane_v8f64:3393; GFX1100-SDAG:       ; %bb.0:3394; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3395; GFX1100-SDAG-NEXT:    s_clause 0x33396; GFX1100-SDAG-NEXT:    global_load_b128 v[19:22], v[0:1], off offset:163397; GFX1100-SDAG-NEXT:    global_load_b128 v[23:26], v[0:1], off3398; GFX1100-SDAG-NEXT:    global_load_b128 v[27:30], v[0:1], off offset:483399; GFX1100-SDAG-NEXT:    global_load_b128 v[31:34], v[0:1], off offset:323400; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s1, v183401; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s13, v133402; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s14, v123403; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s15, v113404; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s16, v103405; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s9, v173406; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s10, v163407; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s11, v153408; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s12, v143409; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s5, v53410; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s6, v43411; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s7, v33412; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s8, v23413; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s0, v93414; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s2, v83415; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s3, v73416; GFX1100-SDAG-NEXT:    v_readfirstlane_b32 s4, v63417; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(3)3418; GFX1100-SDAG-NEXT:    v_writelane_b32 v22, s0, s13419; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(2)3420; GFX1100-SDAG-NEXT:    v_writelane_b32 v26, s5, s13421; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(1)3422; GFX1100-SDAG-NEXT:    v_writelane_b32 v30, s9, s13423; GFX1100-SDAG-NEXT:    s_waitcnt vmcnt(0)3424; GFX1100-SDAG-NEXT:    v_writelane_b32 v34, s13, s13425; GFX1100-SDAG-NEXT:    v_writelane_b32 v33, s14, s13426; GFX1100-SDAG-NEXT:    v_writelane_b32 v32, s15, s13427; GFX1100-SDAG-NEXT:    v_writelane_b32 v31, s16, s13428; GFX1100-SDAG-NEXT:    v_writelane_b32 v29, s10, s13429; GFX1100-SDAG-NEXT:    v_writelane_b32 v28, s11, s13430; GFX1100-SDAG-NEXT:    v_writelane_b32 v27, s12, s13431; GFX1100-SDAG-NEXT:    v_writelane_b32 v25, s6, s13432; GFX1100-SDAG-NEXT:    v_writelane_b32 v24, s7, s13433; GFX1100-SDAG-NEXT:    v_writelane_b32 v23, s8, s13434; GFX1100-SDAG-NEXT:    v_writelane_b32 v21, s2, s13435; GFX1100-SDAG-NEXT:    v_writelane_b32 v20, s3, s13436; GFX1100-SDAG-NEXT:    v_writelane_b32 v19, s4, s13437; GFX1100-SDAG-NEXT:    s_clause 0x33438; GFX1100-SDAG-NEXT:    global_store_b128 v[0:1], v[31:34], off offset:323439; GFX1100-SDAG-NEXT:    global_store_b128 v[0:1], v[27:30], off offset:483440; GFX1100-SDAG-NEXT:    global_store_b128 v[0:1], v[23:26], off3441; GFX1100-SDAG-NEXT:    global_store_b128 v[0:1], v[19:22], off offset:163442; GFX1100-SDAG-NEXT:    s_setpc_b64 s[30:31]3443;3444; GFX802-GISEL-LABEL: test_writelane_v8f64:3445; GFX802-GISEL:       ; %bb.0:3446; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3447; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s5, v183448; GFX802-GISEL-NEXT:    flat_load_dwordx4 v[18:21], v[0:1]3449; GFX802-GISEL-NEXT:    v_add_u32_e32 v22, vcc, 16, v03450; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s4, v23451; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s6, v33452; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s7, v43453; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s8, v53454; GFX802-GISEL-NEXT:    v_addc_u32_e32 v23, vcc, 0, v1, vcc3455; GFX802-GISEL-NEXT:    s_mov_b32 m0, s53456; GFX802-GISEL-NEXT:    flat_load_dwordx4 v[2:5], v[22:23]3457; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s5, v73458; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s9, v113459; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s10, v123460; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s11, v133461; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s12, v143462; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s13, v153463; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s14, v163464; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s15, v173465; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(1)3466; GFX802-GISEL-NEXT:    v_writelane_b32 v18, s4, m03467; GFX802-GISEL-NEXT:    v_writelane_b32 v19, s6, m03468; GFX802-GISEL-NEXT:    v_writelane_b32 v20, s7, m03469; GFX802-GISEL-NEXT:    v_writelane_b32 v21, s8, m03470; GFX802-GISEL-NEXT:    flat_store_dwordx4 v[0:1], v[18:21]3471; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s4, v63472; GFX802-GISEL-NEXT:    v_add_u32_e32 v18, vcc, 32, v03473; GFX802-GISEL-NEXT:    v_addc_u32_e32 v19, vcc, 0, v1, vcc3474; GFX802-GISEL-NEXT:    v_add_u32_e32 v0, vcc, 48, v03475; GFX802-GISEL-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3476; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s6, v83477; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s7, v93478; GFX802-GISEL-NEXT:    v_readfirstlane_b32 s8, v103479; GFX802-GISEL-NEXT:    flat_load_dwordx4 v[6:9], v[18:19]3480; GFX802-GISEL-NEXT:    flat_load_dwordx4 v[10:13], v[0:1]3481; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(3)3482; GFX802-GISEL-NEXT:    v_writelane_b32 v2, s4, m03483; GFX802-GISEL-NEXT:    v_writelane_b32 v3, s5, m03484; GFX802-GISEL-NEXT:    v_writelane_b32 v4, s6, m03485; GFX802-GISEL-NEXT:    v_writelane_b32 v5, s7, m03486; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(1)3487; GFX802-GISEL-NEXT:    v_writelane_b32 v6, s8, m03488; GFX802-GISEL-NEXT:    v_writelane_b32 v7, s9, m03489; GFX802-GISEL-NEXT:    v_writelane_b32 v8, s10, m03490; GFX802-GISEL-NEXT:    v_writelane_b32 v9, s11, m03491; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)3492; GFX802-GISEL-NEXT:    v_writelane_b32 v10, s12, m03493; GFX802-GISEL-NEXT:    v_writelane_b32 v11, s13, m03494; GFX802-GISEL-NEXT:    v_writelane_b32 v12, s14, m03495; GFX802-GISEL-NEXT:    v_writelane_b32 v13, s15, m03496; GFX802-GISEL-NEXT:    flat_store_dwordx4 v[22:23], v[2:5]3497; GFX802-GISEL-NEXT:    flat_store_dwordx4 v[18:19], v[6:9]3498; GFX802-GISEL-NEXT:    flat_store_dwordx4 v[0:1], v[10:13]3499; GFX802-GISEL-NEXT:    s_waitcnt vmcnt(0)3500; GFX802-GISEL-NEXT:    s_setpc_b64 s[30:31]3501;3502; GFX1010-GISEL-LABEL: test_writelane_v8f64:3503; GFX1010-GISEL:       ; %bb.0:3504; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3505; GFX1010-GISEL-NEXT:    s_clause 0x33506; GFX1010-GISEL-NEXT:    global_load_dwordx4 v[19:22], v[0:1], off3507; GFX1010-GISEL-NEXT:    global_load_dwordx4 v[23:26], v[0:1], off offset:163508; GFX1010-GISEL-NEXT:    global_load_dwordx4 v[27:30], v[0:1], off offset:323509; GFX1010-GISEL-NEXT:    global_load_dwordx4 v[31:34], v[0:1], off offset:483510; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s4, v23511; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s5, v183512; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s6, v33513; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s7, v43514; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s8, v53515; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s9, v63516; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s10, v73517; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s11, v83518; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s12, v93519; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s13, v103520; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s14, v113521; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s15, v123522; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s16, v133523; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s17, v143524; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s18, v153525; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s19, v163526; GFX1010-GISEL-NEXT:    v_readfirstlane_b32 s20, v173527; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(3)3528; GFX1010-GISEL-NEXT:    v_writelane_b32 v19, s4, s53529; GFX1010-GISEL-NEXT:    v_writelane_b32 v20, s6, s53530; GFX1010-GISEL-NEXT:    v_writelane_b32 v21, s7, s53531; GFX1010-GISEL-NEXT:    v_writelane_b32 v22, s8, s53532; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(2)3533; GFX1010-GISEL-NEXT:    v_writelane_b32 v23, s9, s53534; GFX1010-GISEL-NEXT:    v_writelane_b32 v24, s10, s53535; GFX1010-GISEL-NEXT:    v_writelane_b32 v25, s11, s53536; GFX1010-GISEL-NEXT:    v_writelane_b32 v26, s12, s53537; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(1)3538; GFX1010-GISEL-NEXT:    v_writelane_b32 v27, s13, s53539; GFX1010-GISEL-NEXT:    v_writelane_b32 v28, s14, s53540; GFX1010-GISEL-NEXT:    v_writelane_b32 v29, s15, s53541; GFX1010-GISEL-NEXT:    v_writelane_b32 v30, s16, s53542; GFX1010-GISEL-NEXT:    s_waitcnt vmcnt(0)3543; GFX1010-GISEL-NEXT:    v_writelane_b32 v31, s17, s53544; GFX1010-GISEL-NEXT:    v_writelane_b32 v32, s18, s53545; GFX1010-GISEL-NEXT:    v_writelane_b32 v33, s19, s53546; GFX1010-GISEL-NEXT:    v_writelane_b32 v34, s20, s53547; GFX1010-GISEL-NEXT:    global_store_dwordx4 v[0:1], v[19:22], off3548; GFX1010-GISEL-NEXT:    global_store_dwordx4 v[0:1], v[23:26], off offset:163549; GFX1010-GISEL-NEXT:    global_store_dwordx4 v[0:1], v[27:30], off offset:323550; GFX1010-GISEL-NEXT:    global_store_dwordx4 v[0:1], v[31:34], off offset:483551; GFX1010-GISEL-NEXT:    s_setpc_b64 s[30:31]3552;3553; GFX1100-GISEL-LABEL: test_writelane_v8f64:3554; GFX1100-GISEL:       ; %bb.0:3555; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3556; GFX1100-GISEL-NEXT:    s_clause 0x33557; GFX1100-GISEL-NEXT:    global_load_b128 v[19:22], v[0:1], off3558; GFX1100-GISEL-NEXT:    global_load_b128 v[23:26], v[0:1], off offset:163559; GFX1100-GISEL-NEXT:    global_load_b128 v[27:30], v[0:1], off offset:323560; GFX1100-GISEL-NEXT:    global_load_b128 v[31:34], v[0:1], off offset:483561; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s0, v23562; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s1, v183563; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s2, v33564; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s3, v43565; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s4, v53566; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s5, v63567; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s6, v73568; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s7, v83569; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s8, v93570; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s9, v103571; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s10, v113572; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s11, v123573; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s12, v133574; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s13, v143575; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s14, v153576; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s15, v163577; GFX1100-GISEL-NEXT:    v_readfirstlane_b32 s16, v173578; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(3)3579; GFX1100-GISEL-NEXT:    v_writelane_b32 v19, s0, s13580; GFX1100-GISEL-NEXT:    v_writelane_b32 v20, s2, s13581; GFX1100-GISEL-NEXT:    v_writelane_b32 v21, s3, s13582; GFX1100-GISEL-NEXT:    v_writelane_b32 v22, s4, s13583; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(2)3584; GFX1100-GISEL-NEXT:    v_writelane_b32 v23, s5, s13585; GFX1100-GISEL-NEXT:    v_writelane_b32 v24, s6, s13586; GFX1100-GISEL-NEXT:    v_writelane_b32 v25, s7, s13587; GFX1100-GISEL-NEXT:    v_writelane_b32 v26, s8, s13588; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(1)3589; GFX1100-GISEL-NEXT:    v_writelane_b32 v27, s9, s13590; GFX1100-GISEL-NEXT:    v_writelane_b32 v28, s10, s13591; GFX1100-GISEL-NEXT:    v_writelane_b32 v29, s11, s13592; GFX1100-GISEL-NEXT:    v_writelane_b32 v30, s12, s13593; GFX1100-GISEL-NEXT:    s_waitcnt vmcnt(0)3594; GFX1100-GISEL-NEXT:    v_writelane_b32 v31, s13, s13595; GFX1100-GISEL-NEXT:    v_writelane_b32 v32, s14, s13596; GFX1100-GISEL-NEXT:    v_writelane_b32 v33, s15, s13597; GFX1100-GISEL-NEXT:    v_writelane_b32 v34, s16, s13598; GFX1100-GISEL-NEXT:    s_clause 0x33599; GFX1100-GISEL-NEXT:    global_store_b128 v[0:1], v[19:22], off3600; GFX1100-GISEL-NEXT:    global_store_b128 v[0:1], v[23:26], off offset:163601; GFX1100-GISEL-NEXT:    global_store_b128 v[0:1], v[27:30], off offset:323602; GFX1100-GISEL-NEXT:    global_store_b128 v[0:1], v[31:34], off offset:483603; GFX1100-GISEL-NEXT:    s_setpc_b64 s[30:31]3604  %oldval = load <8 x double>, ptr addrspace(1) %out3605  %writelane = call <8 x double> @llvm.amdgcn.writelane.v8f64(<8 x double> %src, i32 %src1, <8 x double> %oldval)3606  store <8 x double> %writelane, ptr addrspace(1) %out, align 43607  ret void3608}3609 3610declare i32 @llvm.amdgcn.workitem.id.x() #23611 3612attributes #0 = { nounwind readnone convergent }3613attributes #1 = { nounwind }3614attributes #2 = { nounwind readnone }3615