brintos

brintos / llvm-project-archived public Read only

0
0
Text · 174.2 KiB · 0741cb2 Raw
3876 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 < %s | FileCheck %s -check-prefixes=GFX103; RUN: llc -mtriple=amdgcn -mcpu=gfx908  < %s | FileCheck %s -check-prefixes=GFX94 5define hidden void @shuffle6766(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {6; GFX10-LABEL: shuffle6766:7; GFX10:       ; %bb.0:8; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9; GFX10-NEXT:    global_load_dword v0, v[2:3], off10; GFX10-NEXT:    s_waitcnt vmcnt(0)11; GFX10-NEXT:    v_perm_b32 v0, v0, v0, 0x606070612; GFX10-NEXT:    global_store_dword v[4:5], v0, off13; GFX10-NEXT:    s_setpc_b64 s[30:31]14;15; GFX9-LABEL: shuffle6766:16; GFX9:       ; %bb.0:17; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)18; GFX9-NEXT:    global_load_dword v0, v[2:3], off19; GFX9-NEXT:    s_mov_b32 s4, 0x606070620; GFX9-NEXT:    s_waitcnt vmcnt(0)21; GFX9-NEXT:    v_perm_b32 v0, v0, v0, s422; GFX9-NEXT:    global_store_dword v[4:5], v0, off23; GFX9-NEXT:    s_waitcnt vmcnt(0)24; GFX9-NEXT:    s_setpc_b64 s[30:31]25  %vec0 = load <4 x i8>, ptr addrspace(1) %in0, align 426  %vec1 = load <4 x i8>, ptr addrspace(1) %in1, align 427  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 6, i32 7, i32 6, i32 6>28  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out0, align 429  ret void30}31 32define hidden void @shuffle3744(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {33; GFX10-LABEL: shuffle3744:34; GFX10:       ; %bb.0:35; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)36; GFX10-NEXT:    global_load_dword v6, v[0:1], off37; GFX10-NEXT:    global_load_dword v7, v[2:3], off38; GFX10-NEXT:    s_waitcnt vmcnt(0)39; GFX10-NEXT:    v_perm_b32 v0, v6, v7, 0x30740; GFX10-NEXT:    global_store_dword v[4:5], v0, off41; GFX10-NEXT:    s_setpc_b64 s[30:31]42;43; GFX9-LABEL: shuffle3744:44; GFX9:       ; %bb.0:45; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)46; GFX9-NEXT:    global_load_dword v6, v[0:1], off47; GFX9-NEXT:    global_load_dword v7, v[2:3], off48; GFX9-NEXT:    s_movk_i32 s4, 0x30749; GFX9-NEXT:    s_waitcnt vmcnt(0)50; GFX9-NEXT:    v_perm_b32 v0, v6, v7, s451; GFX9-NEXT:    global_store_dword v[4:5], v0, off52; GFX9-NEXT:    s_waitcnt vmcnt(0)53; GFX9-NEXT:    s_setpc_b64 s[30:31]54  %vec0 = load <4 x i8>, ptr addrspace(1) %in0, align 455  %vec1 = load <4 x i8>, ptr addrspace(1) %in1, align 456  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 3, i32 7, i32 4, i32 4>57  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out0, align 458  ret void59}60 61define hidden void @shuffle4445(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {62; GFX10-LABEL: shuffle4445:63; GFX10:       ; %bb.0:64; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)65; GFX10-NEXT:    global_load_dword v0, v[2:3], off66; GFX10-NEXT:    s_waitcnt vmcnt(0)67; GFX10-NEXT:    v_perm_b32 v0, v0, v0, 0x504040468; GFX10-NEXT:    global_store_dword v[4:5], v0, off69; GFX10-NEXT:    s_setpc_b64 s[30:31]70;71; GFX9-LABEL: shuffle4445:72; GFX9:       ; %bb.0:73; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)74; GFX9-NEXT:    global_load_dword v0, v[2:3], off75; GFX9-NEXT:    s_mov_b32 s4, 0x504040476; GFX9-NEXT:    s_waitcnt vmcnt(0)77; GFX9-NEXT:    v_perm_b32 v0, v0, v0, s478; GFX9-NEXT:    global_store_dword v[4:5], v0, off79; GFX9-NEXT:    s_waitcnt vmcnt(0)80; GFX9-NEXT:    s_setpc_b64 s[30:31]81  %vec0 = load <4 x i8>, ptr addrspace(1) %in0, align 482  %vec1 = load <4 x i8>, ptr addrspace(1) %in1, align 483  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 4, i32 4, i32 4, i32 5>84  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out0, align 485  ret void86}87 88define hidden void @shuffle0101(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {89; GFX10-LABEL: shuffle0101:90; GFX10:       ; %bb.0:91; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)92; GFX10-NEXT:    global_load_dword v0, v[0:1], off93; GFX10-NEXT:    s_waitcnt vmcnt(0)94; GFX10-NEXT:    v_perm_b32 v0, v0, v0, 0x504050495; GFX10-NEXT:    global_store_dword v[4:5], v0, off96; GFX10-NEXT:    s_setpc_b64 s[30:31]97;98; GFX9-LABEL: shuffle0101:99; GFX9:       ; %bb.0:100; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)101; GFX9-NEXT:    global_load_dword v0, v[0:1], off102; GFX9-NEXT:    s_mov_b32 s4, 0x5040504103; GFX9-NEXT:    s_waitcnt vmcnt(0)104; GFX9-NEXT:    v_perm_b32 v0, v0, v0, s4105; GFX9-NEXT:    global_store_dword v[4:5], v0, off106; GFX9-NEXT:    s_waitcnt vmcnt(0)107; GFX9-NEXT:    s_setpc_b64 s[30:31]108  %vec0 = load <4 x i8>, ptr addrspace(1) %in0, align 4109  %vec1 = load <4 x i8>, ptr addrspace(1) %in1, align 4110  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 0, i32 1, i32 0, i32 1>111  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out0, align 4112  ret void113}114 115define hidden void @shuffle1004(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {116; GFX10-LABEL: shuffle1004:117; GFX10:       ; %bb.0:118; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)119; GFX10-NEXT:    global_load_dword v6, v[0:1], off120; GFX10-NEXT:    global_load_dword v7, v[2:3], off121; GFX10-NEXT:    s_waitcnt vmcnt(0)122; GFX10-NEXT:    v_perm_b32 v0, v6, v7, 0x40405123; GFX10-NEXT:    global_store_dword v[4:5], v0, off124; GFX10-NEXT:    s_setpc_b64 s[30:31]125;126; GFX9-LABEL: shuffle1004:127; GFX9:       ; %bb.0:128; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)129; GFX9-NEXT:    global_load_dword v6, v[0:1], off130; GFX9-NEXT:    global_load_dword v7, v[2:3], off131; GFX9-NEXT:    s_mov_b32 s4, 0x40405132; GFX9-NEXT:    s_waitcnt vmcnt(0)133; GFX9-NEXT:    v_perm_b32 v0, v6, v7, s4134; GFX9-NEXT:    global_store_dword v[4:5], v0, off135; GFX9-NEXT:    s_waitcnt vmcnt(0)136; GFX9-NEXT:    s_setpc_b64 s[30:31]137  %vec0 = load <4 x i8>, ptr addrspace(1) %in0, align 4138  %vec1 = load <4 x i8>, ptr addrspace(1) %in1, align 4139  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 1, i32 0, i32 0, i32 4>140  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out0, align 4141  ret void142}143 144 145 146define hidden void @shuffle7533(ptr addrspace(0) %in0, ptr addrspace(0) %in1, ptr addrspace(0) %out0) {147; GFX10-LABEL: shuffle7533:148; GFX10:       ; %bb.0:149; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)150; GFX10-NEXT:    flat_load_dword v6, v[0:1]151; GFX10-NEXT:    flat_load_dword v7, v[2:3]152; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)153; GFX10-NEXT:    v_perm_b32 v0, v7, v6, 0x3030507154; GFX10-NEXT:    flat_store_dword v[4:5], v0155; GFX10-NEXT:    s_waitcnt lgkmcnt(0)156; GFX10-NEXT:    s_setpc_b64 s[30:31]157;158; GFX9-LABEL: shuffle7533:159; GFX9:       ; %bb.0:160; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)161; GFX9-NEXT:    flat_load_dword v6, v[0:1]162; GFX9-NEXT:    flat_load_dword v7, v[2:3]163; GFX9-NEXT:    s_mov_b32 s4, 0x3030507164; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)165; GFX9-NEXT:    v_perm_b32 v0, v7, v6, s4166; GFX9-NEXT:    flat_store_dword v[4:5], v0167; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)168; GFX9-NEXT:    s_setpc_b64 s[30:31]169  %vec0 = load <4 x i8>, ptr addrspace(0) %in0, align 4170  %vec1 = load <4 x i8>, ptr addrspace(0) %in1, align 4171  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 7, i32 5, i32 3, i32 3>172  store <4 x i8> %shuffle0_0, ptr addrspace(0) %out0, align 4173  ret void174}175 176define hidden void @shuffle7767(ptr addrspace(0) %in0, ptr addrspace(0) %in1, ptr addrspace(0) %out0) {177; GFX10-LABEL: shuffle7767:178; GFX10:       ; %bb.0:179; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)180; GFX10-NEXT:    flat_load_dword v0, v[2:3]181; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)182; GFX10-NEXT:    v_perm_b32 v0, v0, v0, 0x7060707183; GFX10-NEXT:    flat_store_dword v[4:5], v0184; GFX10-NEXT:    s_waitcnt lgkmcnt(0)185; GFX10-NEXT:    s_setpc_b64 s[30:31]186;187; GFX9-LABEL: shuffle7767:188; GFX9:       ; %bb.0:189; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)190; GFX9-NEXT:    flat_load_dword v0, v[2:3]191; GFX9-NEXT:    s_mov_b32 s4, 0x7060707192; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)193; GFX9-NEXT:    v_perm_b32 v0, v0, v0, s4194; GFX9-NEXT:    flat_store_dword v[4:5], v0195; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)196; GFX9-NEXT:    s_setpc_b64 s[30:31]197  %vec0 = load <4 x i8>, ptr addrspace(0) %in0, align 4198  %vec1 = load <4 x i8>, ptr addrspace(0) %in1, align 4199  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 7, i32 7, i32 6, i32 7>200  store <4 x i8> %shuffle0_0, ptr addrspace(0) %out0, align 4201  ret void202}203 204define hidden void @shuffle0554(ptr addrspace(3) %in0, ptr addrspace(3) %in1, ptr addrspace(3) %out0) {205; GFX10-LABEL: shuffle0554:206; GFX10:       ; %bb.0:207; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)208; GFX10-NEXT:    ds_read_b32 v0, v0209; GFX10-NEXT:    ds_read_b32 v1, v1210; GFX10-NEXT:    s_waitcnt lgkmcnt(0)211; GFX10-NEXT:    v_perm_b32 v0, v0, v1, 0x10104212; GFX10-NEXT:    ds_write_b32 v2, v0213; GFX10-NEXT:    s_waitcnt lgkmcnt(0)214; GFX10-NEXT:    s_setpc_b64 s[30:31]215;216; GFX9-LABEL: shuffle0554:217; GFX9:       ; %bb.0:218; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)219; GFX9-NEXT:    ds_read_b32 v0, v0220; GFX9-NEXT:    ds_read_b32 v1, v1221; GFX9-NEXT:    s_mov_b32 s4, 0x10104222; GFX9-NEXT:    s_waitcnt lgkmcnt(0)223; GFX9-NEXT:    v_perm_b32 v0, v0, v1, s4224; GFX9-NEXT:    ds_write_b32 v2, v0225; GFX9-NEXT:    s_waitcnt lgkmcnt(0)226; GFX9-NEXT:    s_setpc_b64 s[30:31]227  %vec0 = load <4 x i8>, ptr addrspace(3) %in0, align 4228  %vec1 = load <4 x i8>, ptr addrspace(3) %in1, align 4229  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 0, i32 5, i32 5, i32 4>230  store <4 x i8> %shuffle0_0, ptr addrspace(3) %out0, align 4231  ret void232}233 234define hidden void @shuffle2127(ptr addrspace(3) %in0, ptr addrspace(3) %in1, ptr addrspace(3) %out0) {235; GFX10-LABEL: shuffle2127:236; GFX10:       ; %bb.0:237; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)238; GFX10-NEXT:    ds_read_b32 v0, v0239; GFX10-NEXT:    ds_read_b32 v1, v1240; GFX10-NEXT:    s_waitcnt lgkmcnt(0)241; GFX10-NEXT:    v_perm_b32 v0, v0, v1, 0x3060506242; GFX10-NEXT:    ds_write_b32 v2, v0243; GFX10-NEXT:    s_waitcnt lgkmcnt(0)244; GFX10-NEXT:    s_setpc_b64 s[30:31]245;246; GFX9-LABEL: shuffle2127:247; GFX9:       ; %bb.0:248; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)249; GFX9-NEXT:    ds_read_b32 v0, v0250; GFX9-NEXT:    ds_read_b32 v1, v1251; GFX9-NEXT:    s_mov_b32 s4, 0x3060506252; GFX9-NEXT:    s_waitcnt lgkmcnt(0)253; GFX9-NEXT:    v_perm_b32 v0, v0, v1, s4254; GFX9-NEXT:    ds_write_b32 v2, v0255; GFX9-NEXT:    s_waitcnt lgkmcnt(0)256; GFX9-NEXT:    s_setpc_b64 s[30:31]257  %vec0 = load <4 x i8>, ptr addrspace(3) %in0, align 4258  %vec1 = load <4 x i8>, ptr addrspace(3) %in1, align 4259  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 2, i32 1, i32 2, i32 7>260  store <4 x i8> %shuffle0_0, ptr addrspace(3) %out0, align 4261  ret void262}263 264define hidden void @shuffle5047(ptr addrspace(5) %in0, ptr addrspace(5) %in1, ptr addrspace(5) %out0) {265; GFX10-LABEL: shuffle5047:266; GFX10:       ; %bb.0:267; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)268; GFX10-NEXT:    s_clause 0x1269; GFX10-NEXT:    buffer_load_dword v3, v0, s[0:3], 0 offen270; GFX10-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen271; GFX10-NEXT:    s_waitcnt vmcnt(0)272; GFX10-NEXT:    v_perm_b32 v0, v4, v3, 0x7040005273; GFX10-NEXT:    buffer_store_dword v0, v2, s[0:3], 0 offen274; GFX10-NEXT:    s_setpc_b64 s[30:31]275;276; GFX9-LABEL: shuffle5047:277; GFX9:       ; %bb.0:278; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)279; GFX9-NEXT:    buffer_load_dword v3, v0, s[0:3], 0 offen280; GFX9-NEXT:    buffer_load_dword v4, v1, s[0:3], 0 offen281; GFX9-NEXT:    s_mov_b32 s4, 0x7040005282; GFX9-NEXT:    s_waitcnt vmcnt(0)283; GFX9-NEXT:    v_perm_b32 v0, v4, v3, s4284; GFX9-NEXT:    buffer_store_dword v0, v2, s[0:3], 0 offen285; GFX9-NEXT:    s_waitcnt vmcnt(0)286; GFX9-NEXT:    s_setpc_b64 s[30:31]287  %vec0 = load <4 x i8>, ptr addrspace(5) %in0, align 4288  %vec1 = load <4 x i8>, ptr addrspace(5) %in1, align 4289  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 5, i32 0, i32 4, i32 7>290  store <4 x i8> %shuffle0_0, ptr addrspace(5) %out0, align 4291  ret void292}293 294define hidden void @shuffle3546(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {295; GFX10-LABEL: shuffle3546:296; GFX10:       ; %bb.0:297; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)298; GFX10-NEXT:    global_load_dword v6, v[0:1], off299; GFX10-NEXT:    global_load_dword v7, v[2:3], off300; GFX10-NEXT:    s_waitcnt vmcnt(0)301; GFX10-NEXT:    v_perm_b32 v0, v6, v7, 0x2000107302; GFX10-NEXT:    global_store_dword v[4:5], v0, off303; GFX10-NEXT:    s_setpc_b64 s[30:31]304;305; GFX9-LABEL: shuffle3546:306; GFX9:       ; %bb.0:307; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)308; GFX9-NEXT:    global_load_dword v6, v[0:1], off309; GFX9-NEXT:    global_load_dword v7, v[2:3], off310; GFX9-NEXT:    s_mov_b32 s4, 0x2000107311; GFX9-NEXT:    s_waitcnt vmcnt(0)312; GFX9-NEXT:    v_perm_b32 v0, v6, v7, s4313; GFX9-NEXT:    global_store_dword v[4:5], v0, off314; GFX9-NEXT:    s_waitcnt vmcnt(0)315; GFX9-NEXT:    s_setpc_b64 s[30:31]316  %vec0 = load <4 x i8>, ptr addrspace(1) %in0, align 4317  %vec1 = load <4 x i8>, ptr addrspace(1) %in1, align 4318  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 3, i32 5, i32 4, i32 6>319  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out0, align 4320  ret void321}322 323 324define hidden void @shuffle7330ud2(ptr addrspace(1) %in0, ptr addrspace(1) %out0) {325; GFX10-LABEL: shuffle7330ud2:326; GFX10:       ; %bb.0:327; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)328; GFX10-NEXT:    global_load_dword v0, v[0:1], off329; GFX10-NEXT:    s_waitcnt vmcnt(0)330; GFX10-NEXT:    v_perm_b32 v0, v0, v0, 0x4070706331; GFX10-NEXT:    global_store_dword v[2:3], v0, off332; GFX10-NEXT:    s_setpc_b64 s[30:31]333;334; GFX9-LABEL: shuffle7330ud2:335; GFX9:       ; %bb.0:336; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)337; GFX9-NEXT:    global_load_dword v0, v[0:1], off338; GFX9-NEXT:    s_mov_b32 s4, 0x4070706339; GFX9-NEXT:    s_waitcnt vmcnt(0)340; GFX9-NEXT:    v_perm_b32 v0, v0, v0, s4341; GFX9-NEXT:    global_store_dword v[2:3], v0, off342; GFX9-NEXT:    s_waitcnt vmcnt(0)343; GFX9-NEXT:    s_setpc_b64 s[30:31]344  %vec0 = load <4 x i8>, ptr addrspace(1) %in0, align 4345  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> poison, <4 x i32> <i32 7, i32 3, i32 3, i32 0>346  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out0, align 4347  ret void348}349 350define hidden void @shuffle5341ud2(ptr addrspace(1) %in0, ptr addrspace(1) %out0) {351; GFX10-LABEL: shuffle5341ud2:352; GFX10:       ; %bb.0:353; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)354; GFX10-NEXT:    global_load_dword v0, v[0:1], off355; GFX10-NEXT:    s_waitcnt vmcnt(0)356; GFX10-NEXT:    v_alignbit_b32 v0, v0, v0, 16357; GFX10-NEXT:    global_store_dword v[2:3], v0, off358; GFX10-NEXT:    s_setpc_b64 s[30:31]359;360; GFX9-LABEL: shuffle5341ud2:361; GFX9:       ; %bb.0:362; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)363; GFX9-NEXT:    global_load_dword v0, v[0:1], off364; GFX9-NEXT:    s_waitcnt vmcnt(0)365; GFX9-NEXT:    v_alignbit_b32 v0, v0, v0, 16366; GFX9-NEXT:    global_store_dword v[2:3], v0, off367; GFX9-NEXT:    s_waitcnt vmcnt(0)368; GFX9-NEXT:    s_setpc_b64 s[30:31]369  %vec0 = load <4 x i8>, ptr addrspace(1) %in0, align 4370  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> poison, <4 x i32> <i32 5, i32 3, i32 4, i32 1>371  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out0, align 4372  ret void373}374 375define hidden void @shuffle6106ud2(ptr addrspace(1) %in0, ptr addrspace(1) %out0) {376; GFX10-LABEL: shuffle6106ud2:377; GFX10:       ; %bb.0:378; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)379; GFX10-NEXT:    global_load_dword v0, v[0:1], off380; GFX10-NEXT:    s_waitcnt vmcnt(0)381; GFX10-NEXT:    v_perm_b32 v0, v0, v0, 0x5040504382; GFX10-NEXT:    global_store_dword v[2:3], v0, off383; GFX10-NEXT:    s_setpc_b64 s[30:31]384;385; GFX9-LABEL: shuffle6106ud2:386; GFX9:       ; %bb.0:387; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)388; GFX9-NEXT:    global_load_dword v0, v[0:1], off389; GFX9-NEXT:    s_mov_b32 s4, 0x5040504390; GFX9-NEXT:    s_waitcnt vmcnt(0)391; GFX9-NEXT:    v_perm_b32 v0, v0, v0, s4392; GFX9-NEXT:    global_store_dword v[2:3], v0, off393; GFX9-NEXT:    s_waitcnt vmcnt(0)394; GFX9-NEXT:    s_setpc_b64 s[30:31]395  %vec0 = load <4 x i8>, ptr addrspace(1) %in0, align 4396  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> poison, <4 x i32> <i32 6, i32 1, i32 0, i32 6>397  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out0, align 4398  ret void399}400 401 402define hidden void @shuffle4327ud2(ptr addrspace(1) %in0, ptr addrspace(1) %out0) {403; GFX10-LABEL: shuffle4327ud2:404; GFX10:       ; %bb.0:405; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)406; GFX10-NEXT:    global_load_dword v0, v[0:1], off407; GFX10-NEXT:    s_waitcnt vmcnt(0)408; GFX10-NEXT:    v_perm_b32 v0, v0, v0, 0x7060706409; GFX10-NEXT:    global_store_dword v[2:3], v0, off410; GFX10-NEXT:    s_setpc_b64 s[30:31]411;412; GFX9-LABEL: shuffle4327ud2:413; GFX9:       ; %bb.0:414; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)415; GFX9-NEXT:    global_load_dword v0, v[0:1], off416; GFX9-NEXT:    s_mov_b32 s4, 0x7060706417; GFX9-NEXT:    s_waitcnt vmcnt(0)418; GFX9-NEXT:    v_perm_b32 v0, v0, v0, s4419; GFX9-NEXT:    global_store_dword v[2:3], v0, off420; GFX9-NEXT:    s_waitcnt vmcnt(0)421; GFX9-NEXT:    s_setpc_b64 s[30:31]422  %vec0 = load <4 x i8>, ptr addrspace(1) %in0, align 4423  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> poison, <4 x i32> <i32 4, i32 3, i32 2, i32 7>424  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out0, align 4425  ret void426}427 428define hidden void @shuffle3263ud2(ptr addrspace(1) %in0, ptr addrspace(1) %out0) {429; GFX10-LABEL: shuffle3263ud2:430; GFX10:       ; %bb.0:431; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)432; GFX10-NEXT:    global_load_dword v0, v[0:1], off433; GFX10-NEXT:    s_waitcnt vmcnt(0)434; GFX10-NEXT:    v_perm_b32 v0, v0, v0, 0x7060607435; GFX10-NEXT:    global_store_dword v[2:3], v0, off436; GFX10-NEXT:    s_setpc_b64 s[30:31]437;438; GFX9-LABEL: shuffle3263ud2:439; GFX9:       ; %bb.0:440; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)441; GFX9-NEXT:    global_load_dword v0, v[0:1], off442; GFX9-NEXT:    s_mov_b32 s4, 0x7060607443; GFX9-NEXT:    s_waitcnt vmcnt(0)444; GFX9-NEXT:    v_perm_b32 v0, v0, v0, s4445; GFX9-NEXT:    global_store_dword v[2:3], v0, off446; GFX9-NEXT:    s_waitcnt vmcnt(0)447; GFX9-NEXT:    s_setpc_b64 s[30:31]448  %vec0 = load <4 x i8>, ptr addrspace(1) %in0, align 4449  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> poison, <4 x i32> <i32 3, i32 2, i32 6, i32 3>450  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out0, align 4451  ret void452}453 454define hidden void @shuffle2763ud2(ptr addrspace(1) %in0, ptr addrspace(1) %out0) {455; GFX10-LABEL: shuffle2763ud2:456; GFX10:       ; %bb.0:457; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)458; GFX10-NEXT:    global_load_dword v0, v[0:1], off459; GFX10-NEXT:    s_waitcnt vmcnt(0)460; GFX10-NEXT:    v_perm_b32 v0, v0, v0, 0x7060706461; GFX10-NEXT:    global_store_dword v[2:3], v0, off462; GFX10-NEXT:    s_setpc_b64 s[30:31]463;464; GFX9-LABEL: shuffle2763ud2:465; GFX9:       ; %bb.0:466; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)467; GFX9-NEXT:    global_load_dword v0, v[0:1], off468; GFX9-NEXT:    s_mov_b32 s4, 0x7060706469; GFX9-NEXT:    s_waitcnt vmcnt(0)470; GFX9-NEXT:    v_perm_b32 v0, v0, v0, s4471; GFX9-NEXT:    global_store_dword v[2:3], v0, off472; GFX9-NEXT:    s_waitcnt vmcnt(0)473; GFX9-NEXT:    s_setpc_b64 s[30:31]474  %vec0 = load <4 x i8>, ptr addrspace(1) %in0, align 4475  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> poison, <4 x i32> <i32 2, i32 7, i32 6, i32 3>476  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out0, align 4477  ret void478}479 480define hidden void @shuffle1327ud2(ptr addrspace(1) %in0, ptr addrspace(1) %out0) {481; GFX10-LABEL: shuffle1327ud2:482; GFX10:       ; %bb.0:483; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)484; GFX10-NEXT:    global_load_dword v0, v[0:1], off485; GFX10-NEXT:    s_waitcnt vmcnt(0)486; GFX10-NEXT:    v_perm_b32 v0, v0, v0, 0x7060705487; GFX10-NEXT:    global_store_dword v[2:3], v0, off488; GFX10-NEXT:    s_setpc_b64 s[30:31]489;490; GFX9-LABEL: shuffle1327ud2:491; GFX9:       ; %bb.0:492; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)493; GFX9-NEXT:    global_load_dword v0, v[0:1], off494; GFX9-NEXT:    s_mov_b32 s4, 0x7060705495; GFX9-NEXT:    s_waitcnt vmcnt(0)496; GFX9-NEXT:    v_perm_b32 v0, v0, v0, s4497; GFX9-NEXT:    global_store_dword v[2:3], v0, off498; GFX9-NEXT:    s_waitcnt vmcnt(0)499; GFX9-NEXT:    s_setpc_b64 s[30:31]500  %vec0 = load <4 x i8>, ptr addrspace(1) %in0, align 4501  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> poison, <4 x i32> <i32 1, i32 3, i32 2, i32 7>502  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out0, align 4503  ret void504}505 506define hidden void @shuffle0605ud2(ptr addrspace(1) %in0, ptr addrspace(1) %out0) {507; GFX10-LABEL: shuffle0605ud2:508; GFX10:       ; %bb.0:509; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)510; GFX10-NEXT:    global_load_dword v0, v[0:1], off511; GFX10-NEXT:    s_waitcnt vmcnt(0)512; GFX10-NEXT:    v_perm_b32 v0, v0, v0, 0x5040504513; GFX10-NEXT:    global_store_dword v[2:3], v0, off514; GFX10-NEXT:    s_setpc_b64 s[30:31]515;516; GFX9-LABEL: shuffle0605ud2:517; GFX9:       ; %bb.0:518; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)519; GFX9-NEXT:    global_load_dword v0, v[0:1], off520; GFX9-NEXT:    s_mov_b32 s4, 0x5040504521; GFX9-NEXT:    s_waitcnt vmcnt(0)522; GFX9-NEXT:    v_perm_b32 v0, v0, v0, s4523; GFX9-NEXT:    global_store_dword v[2:3], v0, off524; GFX9-NEXT:    s_waitcnt vmcnt(0)525; GFX9-NEXT:    s_setpc_b64 s[30:31]526  %vec0 = load <4 x i8>, ptr addrspace(1) %in0, align 4527  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> poison, <4 x i32> <i32 0, i32 6, i32 0, i32 5>528  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out0, align 4529  ret void530}531 532define hidden void @insertUsesOr(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0) {533; GFX10-LABEL: insertUsesOr:534; GFX10:       ; %bb.0:535; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)536; GFX10-NEXT:    global_load_dword v0, v[0:1], off537; GFX10-NEXT:    v_lshlrev_b16 v1, 8, v4538; GFX10-NEXT:    s_waitcnt vmcnt(0)539; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD540; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff, v0541; GFX10-NEXT:    global_store_dword v[5:6], v0, off542; GFX10-NEXT:    s_setpc_b64 s[30:31]543;544; GFX9-LABEL: insertUsesOr:545; GFX9:       ; %bb.0:546; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)547; GFX9-NEXT:    global_load_dword v0, v[0:1], off548; GFX9-NEXT:    v_lshlrev_b16_e32 v1, 8, v4549; GFX9-NEXT:    s_waitcnt vmcnt(0)550; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD551; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0552; GFX9-NEXT:    global_store_dword v[5:6], v0, off553; GFX9-NEXT:    s_waitcnt vmcnt(0)554; GFX9-NEXT:    s_setpc_b64 s[30:31]555  %vec0 = load <4 x i8>, ptr addrspace(1) %in0, align 4556  %vec1 = load <4 x i8>, ptr addrspace(1) %in1, align 4557  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 4>558  %vecins = insertelement <4 x i8> %shuffle0_0, i8 %elt, i32 1559  store <4 x i8> %vecins, ptr addrspace(1) %out0560  ret void561}562 563define hidden void @addUsesOr(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0) {564; GFX10-LABEL: addUsesOr:565; GFX10:       ; %bb.0:566; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)567; GFX10-NEXT:    global_load_dword v4, v[0:1], off568; GFX10-NEXT:    global_load_dword v7, v[2:3], off569; GFX10-NEXT:    s_waitcnt vmcnt(1)570; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 24, v4571; GFX10-NEXT:    s_waitcnt vmcnt(0)572; GFX10-NEXT:    v_lshrrev_b32_e32 v1, 24, v7573; GFX10-NEXT:    v_lshrrev_b32_e32 v2, 16, v4574; GFX10-NEXT:    v_lshrrev_b32_e32 v3, 16, v7575; GFX10-NEXT:    v_add_nc_u16 v0, v0, v1576; GFX10-NEXT:    v_lshrrev_b16 v1, 8, v7577; GFX10-NEXT:    v_add_nc_u16 v2, v2, v3578; GFX10-NEXT:    v_lshlrev_b16 v0, 8, v0579; GFX10-NEXT:    v_add_nc_u16 v1, v4, v1580; GFX10-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD581; GFX10-NEXT:    v_lshlrev_b16 v1, 8, v1582; GFX10-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD583; GFX10-NEXT:    global_store_dword v[5:6], v0, off584; GFX10-NEXT:    s_setpc_b64 s[30:31]585;586; GFX9-LABEL: addUsesOr:587; GFX9:       ; %bb.0:588; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)589; GFX9-NEXT:    global_load_dword v4, v[0:1], off590; GFX9-NEXT:    global_load_dword v7, v[2:3], off591; GFX9-NEXT:    s_waitcnt vmcnt(0)592; GFX9-NEXT:    v_add_u16_sdwa v0, v4, v7 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:BYTE_3593; GFX9-NEXT:    v_add_u16_sdwa v1, v4, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1594; GFX9-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD595; GFX9-NEXT:    v_add_u16_sdwa v0, v4, v7 dst_sel:BYTE_1 dst_unused:UNUSED_PRESERVE src0_sel:DWORD src1_sel:BYTE_1596; GFX9-NEXT:    global_store_dword v[5:6], v0, off597; GFX9-NEXT:    s_waitcnt vmcnt(0)598; GFX9-NEXT:    s_setpc_b64 s[30:31]599  %vec0 = load <4 x i8>, ptr addrspace(1) %in0, align 4600  %vec1 = load <4 x i8>, ptr addrspace(1) %in1, align 4601  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> poison, <4 x i32> <i32 7, i32 0, i32 6, i32 3>602  %added = add <4 x i8> %shuffle0_0, %vec1603  store <4 x i8> %added, ptr addrspace(1) %out0604  ret void605}606 607 608define amdgpu_kernel void @shuffle8i8(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out1) #0 {609; GFX10-LABEL: shuffle8i8:610; GFX10:       ; %bb.0: ; %bb611; GFX10-NEXT:    s_clause 0x1612; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24613; GFX10-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34614; GFX10-NEXT:    v_mov_b32_e32 v2, 0615; GFX10-NEXT:    s_waitcnt lgkmcnt(0)616; GFX10-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0617; GFX10-NEXT:    s_load_dwordx2 s[8:9], s[2:3], 0x0618; GFX10-NEXT:    s_waitcnt lgkmcnt(0)619; GFX10-NEXT:    s_bfe_u32 s2, s5, 0x80008620; GFX10-NEXT:    s_lshl_b32 s1, s9, 8621; GFX10-NEXT:    s_bfe_u32 s9, s9, 0x100010622; GFX10-NEXT:    s_bfe_u32 s0, s4, 0x80008623; GFX10-NEXT:    s_lshl_b32 s3, s8, 8624; GFX10-NEXT:    s_and_b32 s5, s8, 0xff00625; GFX10-NEXT:    s_bfe_u32 s8, s4, 0x80010626; GFX10-NEXT:    s_and_b32 s4, s4, 0xff627; GFX10-NEXT:    s_or_b32 s1, s2, s1628; GFX10-NEXT:    s_lshl_b32 s2, s9, 8629; GFX10-NEXT:    s_or_b32 s0, s0, s3630; GFX10-NEXT:    s_or_b32 s3, s8, s5631; GFX10-NEXT:    s_or_b32 s2, s4, s2632; GFX10-NEXT:    s_and_b32 s0, s0, 0xffff633; GFX10-NEXT:    s_lshl_b32 s1, s1, 16634; GFX10-NEXT:    s_and_b32 s2, s2, 0xffff635; GFX10-NEXT:    s_lshl_b32 s3, s3, 16636; GFX10-NEXT:    s_or_b32 s0, s0, s1637; GFX10-NEXT:    s_or_b32 s1, s2, s3638; GFX10-NEXT:    v_mov_b32_e32 v0, s0639; GFX10-NEXT:    v_mov_b32_e32 v1, s1640; GFX10-NEXT:    global_store_dwordx2 v2, v[0:1], s[6:7]641; GFX10-NEXT:    s_endpgm642;643; GFX9-LABEL: shuffle8i8:644; GFX9:       ; %bb.0: ; %bb645; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24646; GFX9-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34647; GFX9-NEXT:    v_mov_b32_e32 v2, 0648; GFX9-NEXT:    s_waitcnt lgkmcnt(0)649; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0650; GFX9-NEXT:    s_load_dwordx2 s[8:9], s[2:3], 0x0651; GFX9-NEXT:    s_waitcnt lgkmcnt(0)652; GFX9-NEXT:    s_bfe_u32 s0, s4, 0x80008653; GFX9-NEXT:    s_lshl_b32 s1, s9, 8654; GFX9-NEXT:    s_bfe_u32 s2, s5, 0x80008655; GFX9-NEXT:    s_lshl_b32 s3, s8, 8656; GFX9-NEXT:    s_or_b32 s1, s2, s1657; GFX9-NEXT:    s_or_b32 s0, s0, s3658; GFX9-NEXT:    s_bfe_u32 s2, s4, 0x80010659; GFX9-NEXT:    s_and_b32 s3, s4, 0xff660; GFX9-NEXT:    s_bfe_u32 s4, s9, 0x100010661; GFX9-NEXT:    s_and_b32 s5, s8, 0xff00662; GFX9-NEXT:    s_lshl_b32 s4, s4, 8663; GFX9-NEXT:    s_or_b32 s2, s2, s5664; GFX9-NEXT:    s_or_b32 s3, s3, s4665; GFX9-NEXT:    s_and_b32 s3, s3, 0xffff666; GFX9-NEXT:    s_lshl_b32 s2, s2, 16667; GFX9-NEXT:    s_and_b32 s0, s0, 0xffff668; GFX9-NEXT:    s_lshl_b32 s1, s1, 16669; GFX9-NEXT:    s_or_b32 s2, s3, s2670; GFX9-NEXT:    s_or_b32 s0, s0, s1671; GFX9-NEXT:    v_mov_b32_e32 v0, s0672; GFX9-NEXT:    v_mov_b32_e32 v1, s2673; GFX9-NEXT:    global_store_dwordx2 v2, v[0:1], s[6:7]674; GFX9-NEXT:    s_endpgm675bb:676  %vec0 = load <8 x i8>, ptr addrspace(1) %in0677  %vec1 = load <8 x i8>, ptr addrspace(1) %in1678  %shuffle0 = shufflevector <8 x i8> %vec0, <8 x i8> %vec1, <8 x i32> <i32 1, i32 8, i32 5, i32 12, i32 0, i32 14, i32 2, i32 9>679  store <8 x i8> %shuffle0, ptr addrspace(1) %out1680  ret void681}682 683declare i32 @llvm.amdgcn.workitem.id.x() nounwind readnone684declare i32 @llvm.amdgcn.workitem.id.y() nounwind readnone685 686; Not combined to perm due to non-vectorized use, non-divergent687define hidden void @add(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0) {688; GFX10-LABEL: add:689; GFX10:       ; %bb.0:690; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)691; GFX10-NEXT:    global_load_dword v4, v[0:1], off692; GFX10-NEXT:    global_load_dword v7, v[2:3], off693; GFX10-NEXT:    s_waitcnt vmcnt(1)694; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 24, v4695; GFX10-NEXT:    s_waitcnt vmcnt(0)696; GFX10-NEXT:    v_lshrrev_b16 v1, 8, v7697; GFX10-NEXT:    v_lshrrev_b32_e32 v2, 24, v7698; GFX10-NEXT:    v_lshrrev_b16 v3, 8, v4699; GFX10-NEXT:    v_lshrrev_b32_e32 v4, 16, v7700; GFX10-NEXT:    v_add_nc_u16 v0, v0, v1701; GFX10-NEXT:    v_add_nc_u16 v2, v7, v2702; GFX10-NEXT:    v_add_nc_u16 v3, v3, v7703; GFX10-NEXT:    v_add_nc_u16 v1, v1, v4704; GFX10-NEXT:    v_lshlrev_b16 v0, 8, v0705; GFX10-NEXT:    v_lshlrev_b16 v2, 8, v2706; GFX10-NEXT:    v_or_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD707; GFX10-NEXT:    v_or_b32_sdwa v1, v1, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD708; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD709; GFX10-NEXT:    global_store_dword v[5:6], v0, off710; GFX10-NEXT:    s_setpc_b64 s[30:31]711;712; GFX9-LABEL: add:713; GFX9:       ; %bb.0:714; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)715; GFX9-NEXT:    global_load_dword v4, v[0:1], off716; GFX9-NEXT:    global_load_dword v7, v[2:3], off717; GFX9-NEXT:    s_waitcnt vmcnt(0)718; GFX9-NEXT:    v_add_u16_sdwa v0, v4, v7 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:BYTE_1719; GFX9-NEXT:    v_add_u16_sdwa v1, v4, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD720; GFX9-NEXT:    v_add_u16_sdwa v2, v7, v7 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_3721; GFX9-NEXT:    v_add_u16_sdwa v3, v7, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:WORD_1722; GFX9-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD723; GFX9-NEXT:    v_or_b32_sdwa v1, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD724; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD725; GFX9-NEXT:    global_store_dword v[5:6], v0, off726; GFX9-NEXT:    s_waitcnt vmcnt(0)727; GFX9-NEXT:    s_setpc_b64 s[30:31]728  %vec0 = load <4 x i8>, ptr addrspace(1) %in0, align 4729  %vec1 = load <4 x i8>, ptr addrspace(1) %in1, align 4730  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 1, i32 3, i32 5, i32 4>731  %vecins = add <4 x i8> %shuffle0_0, %vec1732  store <4 x i8> %vecins, ptr addrspace(1) %out0733  ret void734}735 736; Not combined to perm due to non-vectorized use737define hidden void @add_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0) {738; GFX10-LABEL: add_div:739; GFX10:       ; %bb.0:740; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)741; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v31742; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v4743; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v4744; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo745; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v4746; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo747; GFX10-NEXT:    global_load_dword v4, v[0:1], off748; GFX10-NEXT:    global_load_dword v7, v[2:3], off749; GFX10-NEXT:    s_waitcnt vmcnt(1)750; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 24, v4751; GFX10-NEXT:    s_waitcnt vmcnt(0)752; GFX10-NEXT:    v_lshrrev_b16 v1, 8, v7753; GFX10-NEXT:    v_add_nc_u16 v0, v0, v1754; GFX10-NEXT:    v_lshrrev_b16 v1, 8, v4755; GFX10-NEXT:    v_lshlrev_b16 v0, 8, v0756; GFX10-NEXT:    v_add_nc_u16 v1, v1, v7757; GFX10-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD758; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff, v0759; GFX10-NEXT:    global_store_dword v[5:6], v0, off760; GFX10-NEXT:    s_setpc_b64 s[30:31]761;762; GFX9-LABEL: add_div:763; GFX9:       ; %bb.0:764; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)765; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v31766; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v4767; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v4768; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc769; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v4770; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc771; GFX9-NEXT:    global_load_dword v4, v[0:1], off772; GFX9-NEXT:    global_load_dword v7, v[2:3], off773; GFX9-NEXT:    s_waitcnt vmcnt(0)774; GFX9-NEXT:    v_add_u16_sdwa v0, v4, v7 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:BYTE_1775; GFX9-NEXT:    v_add_u16_sdwa v1, v4, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD776; GFX9-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD777; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0778; GFX9-NEXT:    global_store_dword v[5:6], v0, off779; GFX9-NEXT:    s_waitcnt vmcnt(0)780; GFX9-NEXT:    s_setpc_b64 s[30:31]781  %tid = call i32 @llvm.amdgcn.workitem.id.x()782  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid783  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid784  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 4785  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 4786  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 4>787  %vecins = add <4 x i8> %shuffle0_0, %vec1788  store <4 x i8> %vecins, ptr addrspace(1) %out0789  ret void790}791 792; Not combined to perm due to non-divergent use793define hidden void @add_store(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {794; GFX10-LABEL: add_store:795; GFX10:       ; %bb.0:796; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)797; GFX10-NEXT:    global_load_dword v4, v[0:1], off798; GFX10-NEXT:    global_load_dword v9, v[2:3], off799; GFX10-NEXT:    s_waitcnt vmcnt(1)800; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 24, v4801; GFX10-NEXT:    s_waitcnt vmcnt(0)802; GFX10-NEXT:    v_lshrrev_b16 v1, 8, v9803; GFX10-NEXT:    v_lshrrev_b16 v2, 8, v4804; GFX10-NEXT:    v_add_nc_u16 v0, v0, v1805; GFX10-NEXT:    v_mov_b32_e32 v1, 0xffffff00806; GFX10-NEXT:    v_add_nc_u16 v3, v2, v9807; GFX10-NEXT:    v_lshlrev_b16 v0, 8, v0808; GFX10-NEXT:    v_and_b32_sdwa v1, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD809; GFX10-NEXT:    v_or_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD810; GFX10-NEXT:    v_or_b32_e32 v1, v2, v1811; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff, v0812; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1813; GFX10-NEXT:    global_store_dword v[5:6], v0, off814; GFX10-NEXT:    global_store_dword v[7:8], v1, off815; GFX10-NEXT:    s_setpc_b64 s[30:31]816;817; GFX9-LABEL: add_store:818; GFX9:       ; %bb.0:819; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)820; GFX9-NEXT:    global_load_dword v4, v[0:1], off821; GFX9-NEXT:    global_load_dword v9, v[2:3], off822; GFX9-NEXT:    s_movk_i32 s4, 0xff00823; GFX9-NEXT:    s_waitcnt vmcnt(1)824; GFX9-NEXT:    v_and_b32_sdwa v0, v4, s4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD825; GFX9-NEXT:    s_waitcnt vmcnt(0)826; GFX9-NEXT:    v_add_u16_sdwa v1, v4, v9 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:BYTE_1827; GFX9-NEXT:    v_add_u16_sdwa v2, v4, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD828; GFX9-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD829; GFX9-NEXT:    v_or_b32_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD830; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1831; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0832; GFX9-NEXT:    global_store_dword v[5:6], v1, off833; GFX9-NEXT:    global_store_dword v[7:8], v0, off834; GFX9-NEXT:    s_waitcnt vmcnt(0)835; GFX9-NEXT:    s_setpc_b64 s[30:31]836  %vec0 = load <4 x i8>, ptr addrspace(1) %in0, align 4837  %vec1 = load <4 x i8>, ptr addrspace(1) %in1, align 4838  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 4>839  %vecins = add <4 x i8> %shuffle0_0, %vec1840  store <4 x i8> %vecins, ptr addrspace(1) %out0841  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out1842  ret void843}844 845; Not combined to perm due to 16 bit or846define hidden void @add_store_div_16(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {847; GFX10-LABEL: add_store_div_16:848; GFX10:       ; %bb.0:849; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)850; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v31851; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v4852; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v4853; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo854; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v4855; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo856; GFX10-NEXT:    global_load_dword v4, v[0:1], off857; GFX10-NEXT:    global_load_dword v9, v[2:3], off858; GFX10-NEXT:    s_waitcnt vmcnt(1)859; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 24, v4860; GFX10-NEXT:    s_waitcnt vmcnt(0)861; GFX10-NEXT:    v_lshrrev_b16 v1, 8, v9862; GFX10-NEXT:    v_lshrrev_b16 v2, 8, v4863; GFX10-NEXT:    v_add_nc_u16 v0, v0, v1864; GFX10-NEXT:    v_mov_b32_e32 v1, 0xffffff00865; GFX10-NEXT:    v_add_nc_u16 v3, v2, v9866; GFX10-NEXT:    v_lshlrev_b16 v0, 8, v0867; GFX10-NEXT:    v_and_b32_sdwa v1, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD868; GFX10-NEXT:    v_or_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD869; GFX10-NEXT:    v_or_b32_e32 v1, v2, v1870; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff, v0871; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1872; GFX10-NEXT:    global_store_dword v[5:6], v0, off873; GFX10-NEXT:    global_store_dword v[7:8], v1, off874; GFX10-NEXT:    s_setpc_b64 s[30:31]875;876; GFX9-LABEL: add_store_div_16:877; GFX9:       ; %bb.0:878; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)879; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v31880; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v4881; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v4882; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc883; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v4884; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc885; GFX9-NEXT:    global_load_dword v4, v[0:1], off886; GFX9-NEXT:    global_load_dword v9, v[2:3], off887; GFX9-NEXT:    s_movk_i32 s4, 0xff00888; GFX9-NEXT:    s_waitcnt vmcnt(1)889; GFX9-NEXT:    v_and_b32_sdwa v0, v4, s4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD890; GFX9-NEXT:    s_waitcnt vmcnt(0)891; GFX9-NEXT:    v_add_u16_sdwa v1, v4, v9 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:BYTE_1892; GFX9-NEXT:    v_add_u16_sdwa v2, v4, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD893; GFX9-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD894; GFX9-NEXT:    v_or_b32_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD895; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1896; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0897; GFX9-NEXT:    global_store_dword v[5:6], v1, off898; GFX9-NEXT:    global_store_dword v[7:8], v0, off899; GFX9-NEXT:    s_waitcnt vmcnt(0)900; GFX9-NEXT:    s_setpc_b64 s[30:31]901  %tid = call i32 @llvm.amdgcn.workitem.id.x()902  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid903  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid904  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 4905  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 4906  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 4>907  %vecins = add <4 x i8> %shuffle0_0, %vec1908  store <4 x i8> %vecins, ptr addrspace(1) %out0909  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out1910  ret void911}912 913; Vectorized use, divergent, 32 bit or914define hidden void @add_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {915; GFX10-LABEL: add_store_div:916; GFX10:       ; %bb.0:917; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)918; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v31919; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v4920; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v4921; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo922; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v4923; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo924; GFX10-NEXT:    global_load_dword v4, v[0:1], off925; GFX10-NEXT:    global_load_dword v9, v[2:3], off926; GFX10-NEXT:    s_waitcnt vmcnt(1)927; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 24, v4928; GFX10-NEXT:    s_waitcnt vmcnt(0)929; GFX10-NEXT:    v_lshrrev_b16 v1, 8, v9930; GFX10-NEXT:    v_lshrrev_b32_e32 v2, 24, v9931; GFX10-NEXT:    v_lshrrev_b16 v3, 8, v4932; GFX10-NEXT:    v_lshrrev_b32_e32 v10, 16, v9933; GFX10-NEXT:    v_add_nc_u16 v0, v0, v1934; GFX10-NEXT:    v_add_nc_u16 v2, v9, v2935; GFX10-NEXT:    v_add_nc_u16 v3, v3, v9936; GFX10-NEXT:    v_add_nc_u16 v1, v1, v10937; GFX10-NEXT:    v_lshlrev_b16 v0, 8, v0938; GFX10-NEXT:    v_lshlrev_b16 v2, 8, v2939; GFX10-NEXT:    v_or_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD940; GFX10-NEXT:    v_or_b32_sdwa v1, v1, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD941; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD942; GFX10-NEXT:    v_perm_b32 v1, v4, v9, 0x10705943; GFX10-NEXT:    global_store_dword v[5:6], v0, off944; GFX10-NEXT:    global_store_dword v[7:8], v1, off945; GFX10-NEXT:    s_setpc_b64 s[30:31]946;947; GFX9-LABEL: add_store_div:948; GFX9:       ; %bb.0:949; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)950; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v31951; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v4952; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v4953; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc954; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v4955; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc956; GFX9-NEXT:    global_load_dword v4, v[0:1], off957; GFX9-NEXT:    global_load_dword v9, v[2:3], off958; GFX9-NEXT:    s_mov_b32 s4, 0x10705959; GFX9-NEXT:    s_waitcnt vmcnt(0)960; GFX9-NEXT:    v_perm_b32 v0, v4, v9, s4961; GFX9-NEXT:    v_add_u16_sdwa v1, v4, v9 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:BYTE_1962; GFX9-NEXT:    v_add_u16_sdwa v2, v4, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD963; GFX9-NEXT:    v_add_u16_sdwa v3, v9, v9 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_3964; GFX9-NEXT:    v_add_u16_sdwa v4, v9, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:WORD_1965; GFX9-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD966; GFX9-NEXT:    v_or_b32_sdwa v2, v4, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD967; GFX9-NEXT:    v_or_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD968; GFX9-NEXT:    global_store_dword v[5:6], v1, off969; GFX9-NEXT:    global_store_dword v[7:8], v0, off970; GFX9-NEXT:    s_waitcnt vmcnt(0)971; GFX9-NEXT:    s_setpc_b64 s[30:31]972  %tid = call i32 @llvm.amdgcn.workitem.id.x()973  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid974  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid975  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 4976  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 4977  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 1, i32 3, i32 5, i32 4>978  %vecins = add <4 x i8> %shuffle0_0, %vec1979  store <4 x i8> %vecins, ptr addrspace(1) %out0980  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out1981  ret void982}983 984define hidden void @and_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {985; GFX10-LABEL: and_store_div:986; GFX10:       ; %bb.0:987; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)988; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v31989; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v4990; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v4991; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo992; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v4993; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo994; GFX10-NEXT:    global_load_dword v4, v[2:3], off995; GFX10-NEXT:    global_load_dword v9, v[0:1], off996; GFX10-NEXT:    v_mov_b32_e32 v0, 2997; GFX10-NEXT:    v_mov_b32_e32 v1, 1998; GFX10-NEXT:    s_waitcnt vmcnt(1)999; GFX10-NEXT:    v_and_b32_sdwa v2, v4, v0 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1000; GFX10-NEXT:    s_waitcnt vmcnt(0)1001; GFX10-NEXT:    v_and_b32_sdwa v1, v9, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD1002; GFX10-NEXT:    v_and_b32_e32 v3, 0x100, v91003; GFX10-NEXT:    v_and_b32_sdwa v0, v9, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:DWORD1004; GFX10-NEXT:    v_or_b32_e32 v1, v1, v21005; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1006; GFX10-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1007; GFX10-NEXT:    v_perm_b32 v1, v9, v4, 0x50700061008; GFX10-NEXT:    global_store_dword v[5:6], v0, off1009; GFX10-NEXT:    global_store_dword v[7:8], v1, off1010; GFX10-NEXT:    s_setpc_b64 s[30:31]1011;1012; GFX9-LABEL: and_store_div:1013; GFX9:       ; %bb.0:1014; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1015; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v311016; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v41017; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v41018; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1019; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v41020; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1021; GFX9-NEXT:    global_load_dword v4, v[0:1], off1022; GFX9-NEXT:    global_load_dword v9, v[2:3], off1023; GFX9-NEXT:    s_mov_b32 s4, 0x50700061024; GFX9-NEXT:    v_mov_b32_e32 v0, 21025; GFX9-NEXT:    v_mov_b32_e32 v1, 11026; GFX9-NEXT:    s_waitcnt vmcnt(1)1027; GFX9-NEXT:    v_and_b32_sdwa v1, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD1028; GFX9-NEXT:    s_waitcnt vmcnt(0)1029; GFX9-NEXT:    v_perm_b32 v2, v4, v9, s41030; GFX9-NEXT:    v_and_b32_sdwa v3, v9, v0 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1031; GFX9-NEXT:    v_and_b32_e32 v9, 0x100, v41032; GFX9-NEXT:    v_and_b32_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:DWORD1033; GFX9-NEXT:    v_or_b32_e32 v1, v1, v31034; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1035; GFX9-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1036; GFX9-NEXT:    global_store_dword v[5:6], v0, off1037; GFX9-NEXT:    global_store_dword v[7:8], v2, off1038; GFX9-NEXT:    s_waitcnt vmcnt(0)1039; GFX9-NEXT:    s_setpc_b64 s[30:31]1040  %tid = call i32 @llvm.amdgcn.workitem.id.x()1041  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid1042  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid1043  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 41044  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 41045  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 2, i32 4, i32 3, i32 1>1046  %vecins = and <4 x i8> %shuffle0_0, <i8 1, i8 2, i8 2, i8 1>1047  store <4 x i8> %vecins, ptr addrspace(1) %out01048  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out11049  ret void1050}1051 1052define hidden void @ashr_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {1053; GFX10-LABEL: ashr_store_div:1054; GFX10:       ; %bb.0:1055; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1056; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v311057; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v41058; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v41059; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo1060; GFX10-NEXT:    global_load_dword v9, v[0:1], off1061; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v2, v41062; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v3, vcc_lo1063; GFX10-NEXT:    v_mov_b32_e32 v2, 261064; GFX10-NEXT:    global_load_dword v0, v[0:1], off1065; GFX10-NEXT:    s_waitcnt vmcnt(1)1066; GFX10-NEXT:    v_bfe_i32 v1, v9, 0, 81067; GFX10-NEXT:    v_ashrrev_i32_sdwa v2, v2, v9 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1068; GFX10-NEXT:    v_ashrrev_i32_e32 v3, 25, v91069; GFX10-NEXT:    v_lshlrev_b16 v1, 7, v11070; GFX10-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD1071; GFX10-NEXT:    s_waitcnt vmcnt(0)1072; GFX10-NEXT:    v_ashrrev_i16 v4, 10, v01073; GFX10-NEXT:    v_perm_b32 v0, v9, v0, 0x40107071074; GFX10-NEXT:    v_and_b32_e32 v1, 0xffffff00, v11075; GFX10-NEXT:    v_or_b32_sdwa v1, v4, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD1076; GFX10-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1077; GFX10-NEXT:    global_store_dword v[5:6], v1, off1078; GFX10-NEXT:    global_store_dword v[7:8], v0, off1079; GFX10-NEXT:    s_setpc_b64 s[30:31]1080;1081; GFX9-LABEL: ashr_store_div:1082; GFX9:       ; %bb.0:1083; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1084; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v311085; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v41086; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v41087; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1088; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v41089; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1090; GFX9-NEXT:    global_load_dword v4, v[0:1], off1091; GFX9-NEXT:    global_load_dword v9, v[2:3], off1092; GFX9-NEXT:    v_mov_b32_e32 v1, 71093; GFX9-NEXT:    s_mov_b32 s4, 0x40107071094; GFX9-NEXT:    v_mov_b32_e32 v0, 261095; GFX9-NEXT:    s_waitcnt vmcnt(1)1096; GFX9-NEXT:    v_lshlrev_b16_sdwa v1, v1, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_01097; GFX9-NEXT:    s_waitcnt vmcnt(0)1098; GFX9-NEXT:    v_perm_b32 v2, v4, v9, s41099; GFX9-NEXT:    v_ashrrev_i32_sdwa v0, v0, v4 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1100; GFX9-NEXT:    v_ashrrev_i32_e32 v3, 25, v41101; GFX9-NEXT:    v_ashrrev_i16_e32 v9, 10, v91102; GFX9-NEXT:    v_and_b32_e32 v1, 0xffffff00, v11103; GFX9-NEXT:    v_or_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD1104; GFX9-NEXT:    v_or_b32_sdwa v1, v9, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD1105; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1106; GFX9-NEXT:    global_store_dword v[5:6], v0, off1107; GFX9-NEXT:    global_store_dword v[7:8], v2, off1108; GFX9-NEXT:    s_waitcnt vmcnt(0)1109; GFX9-NEXT:    s_setpc_b64 s[30:31]1110  %tid = call i32 @llvm.amdgcn.workitem.id.x()1111  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid1112  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid1113  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 41114  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 41115  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 3, i32 3, i32 5, i32 0>1116  %vecins = ashr <4 x i8> %shuffle0_0, <i8 1, i8 2, i8 2, i8 1>1117  store <4 x i8> %vecins, ptr addrspace(1) %out01118  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out11119  ret void1120}1121 1122define hidden void @bc_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {1123; GFX10-LABEL: bc_store_div:1124; GFX10:       ; %bb.0:1125; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1126; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v311127; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v41128; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v41129; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo1130; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v41131; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo1132; GFX10-NEXT:    global_load_dword v4, v[0:1], off1133; GFX10-NEXT:    global_load_dword v9, v[2:3], off1134; GFX10-NEXT:    s_waitcnt vmcnt(0)1135; GFX10-NEXT:    v_perm_b32 v0, v9, v4, 0x70601041136; GFX10-NEXT:    global_store_dword v[7:8], v0, off1137; GFX10-NEXT:    global_store_dword v[5:6], v0, off1138; GFX10-NEXT:    s_setpc_b64 s[30:31]1139;1140; GFX9-LABEL: bc_store_div:1141; GFX9:       ; %bb.0:1142; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1143; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v311144; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v41145; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v41146; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1147; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v41148; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1149; GFX9-NEXT:    global_load_dword v4, v[0:1], off1150; GFX9-NEXT:    global_load_dword v9, v[2:3], off1151; GFX9-NEXT:    s_mov_b32 s4, 0x70601041152; GFX9-NEXT:    s_waitcnt vmcnt(0)1153; GFX9-NEXT:    v_perm_b32 v0, v9, v4, s41154; GFX9-NEXT:    global_store_dword v[7:8], v0, off1155; GFX9-NEXT:    global_store_dword v[5:6], v0, off1156; GFX9-NEXT:    s_waitcnt vmcnt(0)1157; GFX9-NEXT:    s_setpc_b64 s[30:31]1158  %tid = call i32 @llvm.amdgcn.workitem.id.x()1159  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid1160  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid1161  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 41162  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 41163  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 4, i32 1, i32 6, i32 7>1164  %insvec = bitcast <4 x i8> %shuffle0_0 to i321165  store i32 %insvec, ptr addrspace(1) %out11166  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out01167  ret void1168}1169 1170 1171define hidden void @eve_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1, ptr addrspace(1) %out2) {1172; GFX10-LABEL: eve_store_div:1173; GFX10:       ; %bb.0:1174; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1175; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v311176; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v41177; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v41178; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo1179; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v41180; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo1181; GFX10-NEXT:    global_load_dword v4, v[0:1], off1182; GFX10-NEXT:    global_load_dword v5, v[2:3], off1183; GFX10-NEXT:    s_waitcnt vmcnt(1)1184; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 24, v41185; GFX10-NEXT:    s_waitcnt vmcnt(0)1186; GFX10-NEXT:    v_perm_b32 v1, v5, v4, 0x10203051187; GFX10-NEXT:    global_store_byte v[9:10], v0, off1188; GFX10-NEXT:    global_store_dword v[7:8], v1, off1189; GFX10-NEXT:    s_setpc_b64 s[30:31]1190;1191; GFX9-LABEL: eve_store_div:1192; GFX9:       ; %bb.0:1193; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1194; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v311195; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v41196; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v41197; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1198; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v41199; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1200; GFX9-NEXT:    global_load_dword v4, v[0:1], off1201; GFX9-NEXT:    global_load_dword v5, v[2:3], off1202; GFX9-NEXT:    s_mov_b32 s4, 0x10203051203; GFX9-NEXT:    s_waitcnt vmcnt(1)1204; GFX9-NEXT:    v_lshrrev_b32_e32 v1, 24, v41205; GFX9-NEXT:    s_waitcnt vmcnt(0)1206; GFX9-NEXT:    v_perm_b32 v0, v5, v4, s41207; GFX9-NEXT:    global_store_byte v[9:10], v1, off1208; GFX9-NEXT:    global_store_dword v[7:8], v0, off1209; GFX9-NEXT:    s_waitcnt vmcnt(0)1210; GFX9-NEXT:    s_setpc_b64 s[30:31]1211  %tid = call i32 @llvm.amdgcn.workitem.id.x()1212  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid1213  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid1214  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 41215  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 41216  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 5, i32 3, i32 2, i32 1>1217  %tmp = extractelement <4 x i8> %shuffle0_0, i32 11218  store i8 %tmp, ptr addrspace(1) %out21219  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out11220  ret void1221}1222 1223; Not combined to perm due to multi use of or operands (introduced by insert op)1224define hidden void @ive_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {1225; GFX10-LABEL: ive_store_div:1226; GFX10:       ; %bb.0:1227; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1228; GFX10-NEXT:    v_and_b32_e32 v9, 0x3ff, v311229; GFX10-NEXT:    v_lshlrev_b32_e32 v9, 2, v91230; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v91231; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo1232; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v91233; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo1234; GFX10-NEXT:    global_load_dword v9, v[0:1], off1235; GFX10-NEXT:    global_load_dword v10, v[2:3], off1236; GFX10-NEXT:    v_mov_b32_e32 v0, 161237; GFX10-NEXT:    v_mov_b32_e32 v1, 0xff1238; GFX10-NEXT:    v_lshlrev_b16 v2, 8, v41239; GFX10-NEXT:    s_waitcnt vmcnt(1)1240; GFX10-NEXT:    v_lshrrev_b32_sdwa v0, v0, v9 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1241; GFX10-NEXT:    s_waitcnt vmcnt(0)1242; GFX10-NEXT:    v_and_b32_sdwa v1, v10, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD1243; GFX10-NEXT:    v_or_b32_sdwa v0, v9, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD1244; GFX10-NEXT:    v_or_b32_e32 v1, v1, v21245; GFX10-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1246; GFX10-NEXT:    v_perm_b32 v1, v10, v9, 0x20007061247; GFX10-NEXT:    global_store_dword v[5:6], v0, off1248; GFX10-NEXT:    global_store_dword v[7:8], v1, off1249; GFX10-NEXT:    s_setpc_b64 s[30:31]1250;1251; GFX9-LABEL: ive_store_div:1252; GFX9:       ; %bb.0:1253; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1254; GFX9-NEXT:    v_and_b32_e32 v9, 0x3ff, v311255; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 2, v91256; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v91257; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1258; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v91259; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1260; GFX9-NEXT:    global_load_dword v9, v[0:1], off1261; GFX9-NEXT:    global_load_dword v10, v[2:3], off1262; GFX9-NEXT:    s_movk_i32 s4, 0xff1263; GFX9-NEXT:    v_lshlrev_b16_e32 v0, 8, v41264; GFX9-NEXT:    s_mov_b32 s5, 0x20007061265; GFX9-NEXT:    s_waitcnt vmcnt(1)1266; GFX9-NEXT:    v_lshrrev_b32_e32 v1, 16, v91267; GFX9-NEXT:    s_waitcnt vmcnt(0)1268; GFX9-NEXT:    v_and_b32_sdwa v2, v10, s4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD1269; GFX9-NEXT:    v_lshlrev_b16_e32 v1, 8, v11270; GFX9-NEXT:    v_or_b32_e32 v0, v2, v01271; GFX9-NEXT:    v_or_b32_sdwa v1, v9, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD1272; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1273; GFX9-NEXT:    v_perm_b32 v3, v10, v9, s51274; GFX9-NEXT:    global_store_dword v[5:6], v0, off1275; GFX9-NEXT:    global_store_dword v[7:8], v3, off1276; GFX9-NEXT:    s_waitcnt vmcnt(0)1277; GFX9-NEXT:    s_setpc_b64 s[30:31]1278  %tid = call i32 @llvm.amdgcn.workitem.id.x()1279  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid1280  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid1281  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 41282  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 41283  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 6, i32 7, i32 0, i32 2>1284  %vecins = insertelement <4 x i8> %shuffle0_0, i8 %elt, i32 11285  store <4 x i8> %vecins, ptr addrspace(1) %out01286  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out11287  ret void1288}1289 1290 1291define hidden void @lhsr_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {1292; GFX10-LABEL: lhsr_store_div:1293; GFX10:       ; %bb.0:1294; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1295; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v311296; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v41297; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v41298; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo1299; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v41300; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo1301; GFX10-NEXT:    global_load_dword v4, v[0:1], off1302; GFX10-NEXT:    global_load_dword v9, v[2:3], off1303; GFX10-NEXT:    v_mov_b32_e32 v0, 261304; GFX10-NEXT:    s_waitcnt vmcnt(1)1305; GFX10-NEXT:    v_lshrrev_b16 v1, 1, v41306; GFX10-NEXT:    s_waitcnt vmcnt(0)1307; GFX10-NEXT:    v_lshrrev_b32_sdwa v0, v0, v9 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1308; GFX10-NEXT:    v_lshrrev_b32_e32 v2, 25, v91309; GFX10-NEXT:    v_lshrrev_b32_e32 v3, 26, v41310; GFX10-NEXT:    v_and_b32_e32 v1, 0x7f00, v11311; GFX10-NEXT:    v_or_b32_e32 v0, v2, v01312; GFX10-NEXT:    v_or_b32_sdwa v1, v3, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1313; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1314; GFX10-NEXT:    v_perm_b32 v1, v9, v4, 0x10307071315; GFX10-NEXT:    global_store_dword v[5:6], v0, off1316; GFX10-NEXT:    global_store_dword v[7:8], v1, off1317; GFX10-NEXT:    s_setpc_b64 s[30:31]1318;1319; GFX9-LABEL: lhsr_store_div:1320; GFX9:       ; %bb.0:1321; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1322; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v311323; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v41324; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v41325; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1326; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v41327; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1328; GFX9-NEXT:    global_load_dword v4, v[0:1], off1329; GFX9-NEXT:    global_load_dword v9, v[2:3], off1330; GFX9-NEXT:    v_mov_b32_e32 v0, 261331; GFX9-NEXT:    s_mov_b32 s4, 0x10307071332; GFX9-NEXT:    s_waitcnt vmcnt(1)1333; GFX9-NEXT:    v_lshrrev_b16_e32 v3, 1, v41334; GFX9-NEXT:    s_waitcnt vmcnt(0)1335; GFX9-NEXT:    v_lshrrev_b32_sdwa v0, v0, v9 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1336; GFX9-NEXT:    v_lshrrev_b32_e32 v2, 25, v91337; GFX9-NEXT:    v_perm_b32 v1, v9, v4, s41338; GFX9-NEXT:    v_lshrrev_b32_e32 v4, 26, v41339; GFX9-NEXT:    v_or_b32_e32 v0, v2, v01340; GFX9-NEXT:    v_and_b32_e32 v2, 0x7f00, v31341; GFX9-NEXT:    v_or_b32_sdwa v2, v4, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1342; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1343; GFX9-NEXT:    global_store_dword v[5:6], v0, off1344; GFX9-NEXT:    global_store_dword v[7:8], v1, off1345; GFX9-NEXT:    s_waitcnt vmcnt(0)1346; GFX9-NEXT:    s_setpc_b64 s[30:31]1347  %tid = call i32 @llvm.amdgcn.workitem.id.x()1348  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid1349  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid1350  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 41351  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 41352  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 7, i32 7, i32 3, i32 1>1353  %vecins = lshr <4 x i8> %shuffle0_0, <i8 1, i8 2, i8 2, i8 1>1354  store <4 x i8> %vecins, ptr addrspace(1) %out01355  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out11356  ret void1357}1358 1359 1360define hidden void @mul_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {1361; GFX10-LABEL: mul_store_div:1362; GFX10:       ; %bb.0:1363; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1364; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v311365; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v41366; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v41367; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo1368; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v41369; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo1370; GFX10-NEXT:    global_load_dword v4, v[0:1], off1371; GFX10-NEXT:    global_load_dword v9, v[2:3], off1372; GFX10-NEXT:    s_waitcnt vmcnt(1)1373; GFX10-NEXT:    v_lshrrev_b16 v0, 8, v41374; GFX10-NEXT:    s_waitcnt vmcnt(0)1375; GFX10-NEXT:    v_lshrrev_b32_e32 v1, 24, v91376; GFX10-NEXT:    v_lshrrev_b16 v2, 8, v91377; GFX10-NEXT:    v_lshrrev_b32_e32 v3, 16, v91378; GFX10-NEXT:    v_mul_lo_u16 v0, v0, v21379; GFX10-NEXT:    v_mul_lo_u16 v1, v3, v11380; GFX10-NEXT:    v_mul_lo_u16 v2, v4, v91381; GFX10-NEXT:    v_mul_lo_u16 v3, v9, v31382; GFX10-NEXT:    v_lshlrev_b16 v0, 8, v01383; GFX10-NEXT:    v_lshlrev_b16 v1, 8, v11384; GFX10-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD1385; GFX10-NEXT:    v_or_b32_sdwa v1, v3, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD1386; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1387; GFX10-NEXT:    v_perm_b32 v1, v4, v9, 0x20005041388; GFX10-NEXT:    global_store_dword v[5:6], v0, off1389; GFX10-NEXT:    global_store_dword v[7:8], v1, off1390; GFX10-NEXT:    s_setpc_b64 s[30:31]1391;1392; GFX9-LABEL: mul_store_div:1393; GFX9:       ; %bb.0:1394; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1395; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v311396; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v41397; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v41398; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1399; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v41400; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1401; GFX9-NEXT:    global_load_dword v4, v[0:1], off1402; GFX9-NEXT:    global_load_dword v9, v[2:3], off1403; GFX9-NEXT:    s_mov_b32 s4, 0x20005041404; GFX9-NEXT:    s_waitcnt vmcnt(0)1405; GFX9-NEXT:    v_perm_b32 v0, v4, v9, s41406; GFX9-NEXT:    v_mul_lo_u16_e32 v1, v4, v91407; GFX9-NEXT:    v_mul_lo_u16_sdwa v2, v4, v9 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_11408; GFX9-NEXT:    v_mul_lo_u16_sdwa v3, v9, v9 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:BYTE_31409; GFX9-NEXT:    v_mul_lo_u16_sdwa v4, v9, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_11410; GFX9-NEXT:    v_or_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD1411; GFX9-NEXT:    v_or_b32_sdwa v2, v4, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD1412; GFX9-NEXT:    v_or_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1413; GFX9-NEXT:    global_store_dword v[5:6], v1, off1414; GFX9-NEXT:    global_store_dword v[7:8], v0, off1415; GFX9-NEXT:    s_waitcnt vmcnt(0)1416; GFX9-NEXT:    s_setpc_b64 s[30:31]1417  %tid = call i32 @llvm.amdgcn.workitem.id.x()1418  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid1419  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid1420  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 41421  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 41422  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 0, i32 1, i32 4, i32 6>1423  %vecins = mul <4 x i8> %shuffle0_0, %vec11424  store <4 x i8> %vecins, ptr addrspace(1) %out01425  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out11426  ret void1427}1428 1429 1430define hidden void @or_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {1431; GFX10-LABEL: or_store_div:1432; GFX10:       ; %bb.0:1433; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1434; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v311435; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v41436; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v41437; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo1438; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v41439; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo1440; GFX10-NEXT:    global_load_dword v4, v[2:3], off1441; GFX10-NEXT:    global_load_dword v9, v[0:1], off1442; GFX10-NEXT:    v_mov_b32_e32 v0, 161443; GFX10-NEXT:    v_bfrev_b32_e32 v2, 4.01444; GFX10-NEXT:    s_waitcnt vmcnt(1)1445; GFX10-NEXT:    v_lshlrev_b16 v1, 8, v41446; GFX10-NEXT:    v_lshrrev_b32_sdwa v0, v0, v4 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1447; GFX10-NEXT:    s_waitcnt vmcnt(0)1448; GFX10-NEXT:    v_or_b32_sdwa v1, v9, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD1449; GFX10-NEXT:    v_or_b32_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD1450; GFX10-NEXT:    v_or_b32_e32 v1, 0x201, v11451; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1452; GFX10-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1453; GFX10-NEXT:    v_perm_b32 v1, v9, v4, 0x20100051454; GFX10-NEXT:    global_store_dword v[5:6], v0, off1455; GFX10-NEXT:    global_store_dword v[7:8], v1, off1456; GFX10-NEXT:    s_setpc_b64 s[30:31]1457;1458; GFX9-LABEL: or_store_div:1459; GFX9:       ; %bb.0:1460; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1461; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v311462; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v41463; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v41464; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1465; GFX9-NEXT:    global_load_dword v2, v[2:3], off1466; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v41467; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1468; GFX9-NEXT:    global_load_dword v0, v[0:1], off1469; GFX9-NEXT:    s_mov_b32 s4, 0x20100051470; GFX9-NEXT:    s_movk_i32 s5, 0x1021471; GFX9-NEXT:    s_waitcnt vmcnt(1)1472; GFX9-NEXT:    v_lshrrev_b32_e32 v1, 16, v21473; GFX9-NEXT:    v_lshlrev_b16_e32 v3, 8, v21474; GFX9-NEXT:    v_lshlrev_b16_e32 v1, 8, v11475; GFX9-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD1476; GFX9-NEXT:    v_or_b32_sdwa v1, v1, s5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1477; GFX9-NEXT:    s_waitcnt vmcnt(0)1478; GFX9-NEXT:    v_perm_b32 v4, v0, v2, s41479; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD1480; GFX9-NEXT:    v_or_b32_e32 v0, 0x201, v01481; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1482; GFX9-NEXT:    global_store_dword v[5:6], v0, off1483; GFX9-NEXT:    global_store_dword v[7:8], v4, off1484; GFX9-NEXT:    s_waitcnt vmcnt(0)1485; GFX9-NEXT:    s_setpc_b64 s[30:31]1486  %tid = call i32 @llvm.amdgcn.workitem.id.x()1487  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid1488  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid1489  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 41490  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 41491  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 1, i32 4, i32 5, i32 6>1492  %vecins = or <4 x i8> %shuffle0_0, <i8 1, i8 2, i8 2, i8 1>1493  store <4 x i8> %vecins, ptr addrspace(1) %out01494  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out11495  ret void1496}1497 1498define hidden void @sdiv_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {1499; GFX10-LABEL: sdiv_store_div:1500; GFX10:       ; %bb.0:1501; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1502; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v311503; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v41504; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v41505; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo1506; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v41507; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo1508; GFX10-NEXT:    global_load_dword v4, v[2:3], off1509; GFX10-NEXT:    global_load_dword v9, v[0:1], off1510; GFX10-NEXT:    s_waitcnt vmcnt(1)1511; GFX10-NEXT:    v_cvt_f32_i32_sdwa v1, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_01512; GFX10-NEXT:    v_cvt_f32_i32_sdwa v10, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_11513; GFX10-NEXT:    s_waitcnt vmcnt(0)1514; GFX10-NEXT:    v_cvt_f32_i32_sdwa v2, sext(v9) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_21515; GFX10-NEXT:    v_cvt_f32_i32_sdwa v12, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_21516; GFX10-NEXT:    v_cvt_f32_i32_sdwa v14, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_31517; GFX10-NEXT:    v_rcp_iflag_f32_e32 v15, v11518; GFX10-NEXT:    v_rcp_iflag_f32_e32 v16, v101519; GFX10-NEXT:    v_cvt_f32_i32_sdwa v19, sext(v9) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_31520; GFX10-NEXT:    v_rcp_iflag_f32_e32 v17, v121521; GFX10-NEXT:    v_xor_b32_sdwa v0, sext(v9), sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_2 src1_sel:BYTE_01522; GFX10-NEXT:    v_rcp_iflag_f32_e32 v18, v141523; GFX10-NEXT:    v_xor_b32_sdwa v3, sext(v9), sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:BYTE_11524; GFX10-NEXT:    v_xor_b32_sdwa v11, sext(v9), sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_2 src1_sel:BYTE_21525; GFX10-NEXT:    v_xor_b32_sdwa v13, sext(v4), sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:BYTE_31526; GFX10-NEXT:    v_ashrrev_i32_e32 v0, 30, v01527; GFX10-NEXT:    v_mul_f32_e32 v15, v2, v151528; GFX10-NEXT:    v_mul_f32_e32 v16, v19, v161529; GFX10-NEXT:    v_ashrrev_i32_e32 v3, 30, v31530; GFX10-NEXT:    v_mul_f32_e32 v17, v2, v171531; GFX10-NEXT:    v_or_b32_e32 v0, 1, v01532; GFX10-NEXT:    v_trunc_f32_e32 v15, v151533; GFX10-NEXT:    v_trunc_f32_e32 v16, v161534; GFX10-NEXT:    v_mul_f32_e32 v18, v1, v181535; GFX10-NEXT:    v_trunc_f32_e32 v17, v171536; GFX10-NEXT:    v_ashrrev_i32_e32 v11, 30, v111537; GFX10-NEXT:    v_mad_f32 v20, -v15, v1, v21538; GFX10-NEXT:    v_mad_f32 v19, -v16, v10, v191539; GFX10-NEXT:    v_or_b32_e32 v3, 1, v31540; GFX10-NEXT:    v_trunc_f32_e32 v18, v181541; GFX10-NEXT:    v_mad_f32 v2, -v17, v12, v21542; GFX10-NEXT:    v_cmp_ge_f32_e64 vcc_lo, |v20|, |v1|1543; GFX10-NEXT:    v_ashrrev_i32_e32 v13, 30, v131544; GFX10-NEXT:    v_or_b32_e32 v11, 1, v111545; GFX10-NEXT:    v_mad_f32 v21, -v18, v14, v11546; GFX10-NEXT:    v_cvt_i32_f32_e32 v15, v151547; GFX10-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc_lo1548; GFX10-NEXT:    v_cmp_ge_f32_e64 vcc_lo, |v19|, |v10|1549; GFX10-NEXT:    v_or_b32_e32 v13, 1, v131550; GFX10-NEXT:    v_cvt_i32_f32_e32 v16, v161551; GFX10-NEXT:    v_cvt_i32_f32_e32 v17, v171552; GFX10-NEXT:    v_cvt_i32_f32_e32 v18, v181553; GFX10-NEXT:    v_cndmask_b32_e32 v1, 0, v3, vcc_lo1554; GFX10-NEXT:    v_cmp_ge_f32_e64 vcc_lo, |v2|, |v12|1555; GFX10-NEXT:    v_add_nc_u32_e32 v0, v15, v01556; GFX10-NEXT:    v_add_nc_u32_sdwa v1, v16, v1 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1557; GFX10-NEXT:    v_cndmask_b32_e32 v2, 0, v11, vcc_lo1558; GFX10-NEXT:    v_cmp_ge_f32_e64 vcc_lo, |v21|, |v14|1559; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD1560; GFX10-NEXT:    v_add_nc_u32_e32 v2, v17, v21561; GFX10-NEXT:    v_cndmask_b32_e32 v3, 0, v13, vcc_lo1562; GFX10-NEXT:    v_add_nc_u32_sdwa v3, v18, v3 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1563; GFX10-NEXT:    v_or_b32_sdwa v1, v2, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD1564; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1565; GFX10-NEXT:    v_perm_b32 v1, v9, v4, 0x607061566; GFX10-NEXT:    global_store_dword v[5:6], v0, off1567; GFX10-NEXT:    global_store_dword v[7:8], v1, off1568; GFX10-NEXT:    s_setpc_b64 s[30:31]1569;1570; GFX9-LABEL: sdiv_store_div:1571; GFX9:       ; %bb.0:1572; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1573; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v311574; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v41575; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v41576; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1577; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v41578; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1579; GFX9-NEXT:    global_load_dword v4, v[2:3], off1580; GFX9-NEXT:    global_load_dword v9, v[0:1], off1581; GFX9-NEXT:    s_mov_b32 s4, 0x607061582; GFX9-NEXT:    s_waitcnt vmcnt(1)1583; GFX9-NEXT:    v_cvt_f32_i32_sdwa v2, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_01584; GFX9-NEXT:    v_cvt_f32_i32_sdwa v12, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_11585; GFX9-NEXT:    s_waitcnt vmcnt(0)1586; GFX9-NEXT:    v_perm_b32 v0, v9, v4, s41587; GFX9-NEXT:    v_xor_b32_sdwa v1, sext(v9), sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_2 src1_sel:BYTE_01588; GFX9-NEXT:    v_cvt_f32_i32_sdwa v3, sext(v9) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_21589; GFX9-NEXT:    v_xor_b32_sdwa v10, sext(v9), sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:BYTE_11590; GFX9-NEXT:    v_cvt_f32_i32_sdwa v11, sext(v9) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_31591; GFX9-NEXT:    v_xor_b32_sdwa v9, sext(v9), sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_2 src1_sel:BYTE_21592; GFX9-NEXT:    v_cvt_f32_i32_sdwa v13, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_21593; GFX9-NEXT:    v_xor_b32_sdwa v14, sext(v4), sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:BYTE_31594; GFX9-NEXT:    v_cvt_f32_i32_sdwa v4, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_31595; GFX9-NEXT:    v_rcp_iflag_f32_e32 v15, v21596; GFX9-NEXT:    v_rcp_iflag_f32_e32 v16, v121597; GFX9-NEXT:    v_rcp_iflag_f32_e32 v17, v131598; GFX9-NEXT:    v_rcp_iflag_f32_e32 v18, v41599; GFX9-NEXT:    v_mul_f32_e32 v15, v3, v151600; GFX9-NEXT:    v_mul_f32_e32 v16, v11, v161601; GFX9-NEXT:    v_trunc_f32_e32 v15, v151602; GFX9-NEXT:    v_ashrrev_i32_e32 v1, 30, v11603; GFX9-NEXT:    v_mul_f32_e32 v17, v3, v171604; GFX9-NEXT:    v_mul_f32_e32 v18, v2, v181605; GFX9-NEXT:    v_trunc_f32_e32 v16, v161606; GFX9-NEXT:    v_mad_f32 v19, -v15, v2, v31607; GFX9-NEXT:    v_ashrrev_i32_e32 v10, 30, v101608; GFX9-NEXT:    v_or_b32_e32 v1, 1, v11609; GFX9-NEXT:    v_trunc_f32_e32 v17, v171610; GFX9-NEXT:    v_trunc_f32_e32 v18, v181611; GFX9-NEXT:    v_mad_f32 v11, -v16, v12, v111612; GFX9-NEXT:    v_cmp_ge_f32_e64 vcc, |v19|, |v2|1613; GFX9-NEXT:    v_ashrrev_i32_e32 v9, 30, v91614; GFX9-NEXT:    v_or_b32_e32 v10, 1, v101615; GFX9-NEXT:    v_cvt_i32_f32_e32 v15, v151616; GFX9-NEXT:    v_cvt_i32_f32_e32 v16, v161617; GFX9-NEXT:    v_mad_f32 v3, -v17, v13, v31618; GFX9-NEXT:    v_cvt_i32_f32_e32 v17, v171619; GFX9-NEXT:    v_mad_f32 v2, -v18, v4, v21620; GFX9-NEXT:    v_cvt_i32_f32_e32 v18, v181621; GFX9-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc1622; GFX9-NEXT:    v_cmp_ge_f32_e64 vcc, |v11|, |v12|1623; GFX9-NEXT:    v_ashrrev_i32_e32 v14, 30, v141624; GFX9-NEXT:    v_or_b32_e32 v9, 1, v91625; GFX9-NEXT:    v_cndmask_b32_e32 v10, 0, v10, vcc1626; GFX9-NEXT:    v_cmp_ge_f32_e64 vcc, |v3|, |v13|1627; GFX9-NEXT:    v_or_b32_e32 v14, 1, v141628; GFX9-NEXT:    v_cndmask_b32_e32 v3, 0, v9, vcc1629; GFX9-NEXT:    v_cmp_ge_f32_e64 vcc, |v2|, |v4|1630; GFX9-NEXT:    v_cndmask_b32_e32 v2, 0, v14, vcc1631; GFX9-NEXT:    v_add_u32_e32 v1, v15, v11632; GFX9-NEXT:    v_add_u32_sdwa v4, v16, v10 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1633; GFX9-NEXT:    v_add_u32_e32 v3, v17, v31634; GFX9-NEXT:    v_add_u32_sdwa v2, v18, v2 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1635; GFX9-NEXT:    v_or_b32_sdwa v1, v1, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD1636; GFX9-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD1637; GFX9-NEXT:    v_or_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1638; GFX9-NEXT:    global_store_dword v[5:6], v1, off1639; GFX9-NEXT:    global_store_dword v[7:8], v0, off1640; GFX9-NEXT:    s_waitcnt vmcnt(0)1641; GFX9-NEXT:    s_setpc_b64 s[30:31]1642  %tid = call i32 @llvm.amdgcn.workitem.id.x()1643  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid1644  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid1645  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 41646  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 41647  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 2, i32 3, i32 2, i32 4>1648  %vecins = sdiv <4 x i8> %shuffle0_0, %vec11649  store <4 x i8> %vecins, ptr addrspace(1) %out01650  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out11651  ret void1652}1653 1654 1655define hidden void @sext_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {1656; GFX10-LABEL: sext_store_div:1657; GFX10:       ; %bb.0:1658; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1659; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v311660; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v41661; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v41662; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo1663; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v41664; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo1665; GFX10-NEXT:    global_load_dword v4, v[2:3], off1666; GFX10-NEXT:    global_load_dword v9, v[0:1], off1667; GFX10-NEXT:    s_waitcnt vmcnt(1)1668; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v41669; GFX10-NEXT:    s_waitcnt vmcnt(0)1670; GFX10-NEXT:    v_lshrrev_b32_e32 v1, 16, v91671; GFX10-NEXT:    v_ashrrev_i16 v2, 8, v41672; GFX10-NEXT:    v_ashrrev_i16 v0, 8, v01673; GFX10-NEXT:    v_ashrrev_i16 v3, 8, v11674; GFX10-NEXT:    v_perm_b32 v1, v0, v2, 0x50401001675; GFX10-NEXT:    v_perm_b32 v0, v3, v3, 0x50401001676; GFX10-NEXT:    v_perm_b32 v2, v9, v4, 0x30107071677; GFX10-NEXT:    global_store_dwordx2 v[7:8], v[0:1], off1678; GFX10-NEXT:    global_store_dword v[5:6], v2, off1679; GFX10-NEXT:    s_setpc_b64 s[30:31]1680;1681; GFX9-LABEL: sext_store_div:1682; GFX9:       ; %bb.0:1683; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1684; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v311685; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v41686; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v41687; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1688; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v41689; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1690; GFX9-NEXT:    global_load_dword v4, v[0:1], off1691; GFX9-NEXT:    global_load_dword v9, v[2:3], off1692; GFX9-NEXT:    v_mov_b32_e32 v0, 81693; GFX9-NEXT:    s_mov_b32 s5, 0x50401001694; GFX9-NEXT:    s_mov_b32 s4, 0x30107071695; GFX9-NEXT:    s_waitcnt vmcnt(0)1696; GFX9-NEXT:    v_ashrrev_i16_e32 v1, 8, v91697; GFX9-NEXT:    v_ashrrev_i16_sdwa v3, v0, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_11698; GFX9-NEXT:    v_ashrrev_i16_sdwa v0, v0, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_11699; GFX9-NEXT:    v_perm_b32 v1, v3, v1, s51700; GFX9-NEXT:    v_perm_b32 v0, v0, v0, s51701; GFX9-NEXT:    v_perm_b32 v2, v4, v9, s41702; GFX9-NEXT:    global_store_dwordx2 v[7:8], v[0:1], off1703; GFX9-NEXT:    global_store_dword v[5:6], v2, off1704; GFX9-NEXT:    s_waitcnt vmcnt(0)1705; GFX9-NEXT:    s_setpc_b64 s[30:31]1706  %tid = call i32 @llvm.amdgcn.workitem.id.x()1707  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid1708  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid1709  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 41710  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 41711  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 3, i32 3, i32 5, i32 7>1712  %insvec = sext <4 x i8> %shuffle0_0 to <4 x i16>1713  store <4 x i16> %insvec, ptr addrspace(1) %out11714  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out01715  ret void1716}1717 1718 1719define hidden void @shl_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {1720; GFX10-LABEL: shl_store_div:1721; GFX10:       ; %bb.0:1722; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1723; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v311724; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v41725; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v41726; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo1727; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v41728; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo1729; GFX10-NEXT:    global_load_dword v4, v[0:1], off1730; GFX10-NEXT:    global_load_dword v9, v[2:3], off1731; GFX10-NEXT:    s_waitcnt vmcnt(1)1732; GFX10-NEXT:    v_lshlrev_b16 v0, 2, v41733; GFX10-NEXT:    s_waitcnt vmcnt(0)1734; GFX10-NEXT:    v_lshlrev_b16 v1, 1, v91735; GFX10-NEXT:    v_and_b32_e32 v2, 0xfffffc00, v01736; GFX10-NEXT:    v_and_b32_e32 v3, 0xfe, v11737; GFX10-NEXT:    v_and_b32_e32 v1, 0xfffffe00, v11738; GFX10-NEXT:    v_and_b32_e32 v0, 0xfc, v01739; GFX10-NEXT:    v_or_b32_e32 v2, v3, v21740; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1741; GFX10-NEXT:    v_perm_b32 v1, v9, v4, 0x50001041742; GFX10-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1743; GFX10-NEXT:    global_store_dword v[5:6], v0, off1744; GFX10-NEXT:    global_store_dword v[7:8], v1, off1745; GFX10-NEXT:    s_setpc_b64 s[30:31]1746;1747; GFX9-LABEL: shl_store_div:1748; GFX9:       ; %bb.0:1749; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1750; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v311751; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v41752; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v41753; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1754; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v41755; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1756; GFX9-NEXT:    global_load_dword v4, v[0:1], off1757; GFX9-NEXT:    global_load_dword v9, v[2:3], off1758; GFX9-NEXT:    s_mov_b32 s4, 0x50001041759; GFX9-NEXT:    s_waitcnt vmcnt(1)1760; GFX9-NEXT:    v_lshlrev_b16_e32 v1, 2, v41761; GFX9-NEXT:    s_waitcnt vmcnt(0)1762; GFX9-NEXT:    v_lshlrev_b16_e32 v2, 1, v91763; GFX9-NEXT:    v_perm_b32 v0, v9, v4, s41764; GFX9-NEXT:    v_and_b32_e32 v3, 0xfffffc00, v11765; GFX9-NEXT:    v_and_b32_e32 v4, 0xfe, v21766; GFX9-NEXT:    v_and_b32_e32 v2, 0xfffffe00, v21767; GFX9-NEXT:    v_and_b32_e32 v1, 0xfc, v11768; GFX9-NEXT:    v_or_b32_e32 v3, v4, v31769; GFX9-NEXT:    v_or_b32_sdwa v1, v1, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1770; GFX9-NEXT:    v_or_b32_sdwa v1, v3, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1771; GFX9-NEXT:    global_store_dword v[5:6], v1, off1772; GFX9-NEXT:    global_store_dword v[7:8], v0, off1773; GFX9-NEXT:    s_waitcnt vmcnt(0)1774; GFX9-NEXT:    s_setpc_b64 s[30:31]1775  %tid = call i32 @llvm.amdgcn.workitem.id.x()1776  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid1777  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid1778  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 41779  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 41780  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 4, i32 1, i32 0, i32 5>1781  %vecins = shl <4 x i8> %shuffle0_0, <i8 1, i8 2, i8 2, i8 1>1782  store <4 x i8> %vecins, ptr addrspace(1) %out01783  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out11784  ret void1785}1786 1787 1788define hidden void @sitofp_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {1789; GFX10-LABEL: sitofp_store_div:1790; GFX10:       ; %bb.0:1791; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1792; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v311793; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v41794; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v41795; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo1796; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v41797; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo1798; GFX10-NEXT:    global_load_dword v4, v[0:1], off1799; GFX10-NEXT:    global_load_dword v9, v[2:3], off1800; GFX10-NEXT:    s_waitcnt vmcnt(1)1801; GFX10-NEXT:    v_ashrrev_i16 v0, 8, v41802; GFX10-NEXT:    s_waitcnt vmcnt(0)1803; GFX10-NEXT:    v_ashrrev_i16 v10, 8, v91804; GFX10-NEXT:    v_cvt_f32_i32_sdwa v3, sext(v9) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_21805; GFX10-NEXT:    v_cvt_f32_i32_sdwa v1, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_21806; GFX10-NEXT:    v_perm_b32 v4, v9, v4, 0x60102051807; GFX10-NEXT:    v_cvt_f32_i32_sdwa v2, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_01808; GFX10-NEXT:    v_cvt_f32_i32_sdwa v0, sext(v10) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_01809; GFX10-NEXT:    global_store_dwordx4 v[7:8], v[0:3], off1810; GFX10-NEXT:    global_store_dword v[5:6], v4, off1811; GFX10-NEXT:    s_setpc_b64 s[30:31]1812;1813; GFX9-LABEL: sitofp_store_div:1814; GFX9:       ; %bb.0:1815; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1816; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v311817; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v41818; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v41819; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1820; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v41821; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1822; GFX9-NEXT:    global_load_dword v4, v[0:1], off1823; GFX9-NEXT:    global_load_dword v9, v[2:3], off1824; GFX9-NEXT:    s_mov_b32 s4, 0x60102051825; GFX9-NEXT:    s_waitcnt vmcnt(1)1826; GFX9-NEXT:    v_ashrrev_i16_e32 v0, 8, v41827; GFX9-NEXT:    s_waitcnt vmcnt(0)1828; GFX9-NEXT:    v_ashrrev_i16_e32 v10, 8, v91829; GFX9-NEXT:    v_cvt_f32_i32_sdwa v3, sext(v9) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_21830; GFX9-NEXT:    v_cvt_f32_i32_sdwa v1, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_21831; GFX9-NEXT:    v_cvt_f32_i32_sdwa v2, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_01832; GFX9-NEXT:    v_cvt_f32_i32_sdwa v0, sext(v10) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_01833; GFX9-NEXT:    v_perm_b32 v4, v9, v4, s41834; GFX9-NEXT:    global_store_dwordx4 v[7:8], v[0:3], off1835; GFX9-NEXT:    global_store_dword v[5:6], v4, off1836; GFX9-NEXT:    s_waitcnt vmcnt(0)1837; GFX9-NEXT:    s_setpc_b64 s[30:31]1838  %tid = call i32 @llvm.amdgcn.workitem.id.x()1839  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid1840  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid1841  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 41842  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 41843  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 5, i32 2, i32 1, i32 6>1844  %insvec = sitofp <4 x i8> %shuffle0_0 to <4 x float>1845  store <4 x float> %insvec, ptr addrspace(1) %out11846  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out01847  ret void1848}1849 1850 1851define hidden void @srem_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {1852; GFX10-LABEL: srem_store_div:1853; GFX10:       ; %bb.0:1854; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1855; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v311856; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v41857; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v41858; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo1859; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v41860; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo1861; GFX10-NEXT:    global_load_dword v4, v[2:3], off1862; GFX10-NEXT:    global_load_dword v9, v[0:1], off1863; GFX10-NEXT:    s_waitcnt vmcnt(1)1864; GFX10-NEXT:    v_cvt_f32_i32_sdwa v2, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_01865; GFX10-NEXT:    v_cvt_f32_i32_sdwa v13, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_11866; GFX10-NEXT:    v_cvt_f32_i32_sdwa v3, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_21867; GFX10-NEXT:    s_waitcnt vmcnt(0)1868; GFX10-NEXT:    v_cvt_f32_i32_sdwa v12, sext(v9) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_31869; GFX10-NEXT:    v_cvt_f32_i32_sdwa v15, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_31870; GFX10-NEXT:    v_rcp_iflag_f32_e32 v17, v21871; GFX10-NEXT:    v_rcp_iflag_f32_e32 v18, v131872; GFX10-NEXT:    v_rcp_iflag_f32_e32 v19, v31873; GFX10-NEXT:    v_xor_b32_sdwa v1, sext(v4), sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_2 src1_sel:BYTE_01874; GFX10-NEXT:    v_rcp_iflag_f32_e32 v20, v151875; GFX10-NEXT:    v_xor_b32_sdwa v11, sext(v9), sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:BYTE_11876; GFX10-NEXT:    v_cvt_f32_i32_sdwa v21, sext(v9) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_21877; GFX10-NEXT:    v_xor_b32_sdwa v14, sext(v4), sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:BYTE_21878; GFX10-NEXT:    v_ashrrev_i32_e32 v1, 30, v11879; GFX10-NEXT:    v_xor_b32_sdwa v16, sext(v9), sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_2 src1_sel:BYTE_31880; GFX10-NEXT:    v_mul_f32_e32 v17, v3, v171881; GFX10-NEXT:    v_mul_f32_e32 v18, v12, v181882; GFX10-NEXT:    v_mul_f32_e32 v19, v15, v191883; GFX10-NEXT:    v_ashrrev_i32_e32 v11, 30, v111884; GFX10-NEXT:    v_or_b32_e32 v1, 1, v11885; GFX10-NEXT:    v_trunc_f32_e32 v17, v171886; GFX10-NEXT:    v_trunc_f32_e32 v18, v181887; GFX10-NEXT:    v_mul_f32_e32 v20, v21, v201888; GFX10-NEXT:    v_trunc_f32_e32 v19, v191889; GFX10-NEXT:    v_ashrrev_i32_e32 v14, 30, v141890; GFX10-NEXT:    v_mad_f32 v22, -v17, v2, v31891; GFX10-NEXT:    v_mad_f32 v12, -v18, v13, v121892; GFX10-NEXT:    v_or_b32_e32 v11, 1, v111893; GFX10-NEXT:    v_trunc_f32_e32 v20, v201894; GFX10-NEXT:    v_mad_f32 v23, -v19, v3, v151895; GFX10-NEXT:    v_cmp_ge_f32_e64 vcc_lo, |v22|, |v2|1896; GFX10-NEXT:    v_ashrrev_i32_e32 v16, 30, v161897; GFX10-NEXT:    v_or_b32_e32 v14, 1, v141898; GFX10-NEXT:    v_mad_f32 v21, -v20, v15, v211899; GFX10-NEXT:    v_cvt_i32_f32_e32 v17, v171900; GFX10-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc_lo1901; GFX10-NEXT:    v_cmp_ge_f32_e64 vcc_lo, |v12|, |v13|1902; GFX10-NEXT:    v_or_b32_e32 v16, 1, v161903; GFX10-NEXT:    v_cvt_i32_f32_e32 v18, v181904; GFX10-NEXT:    v_cvt_i32_f32_e32 v19, v191905; GFX10-NEXT:    v_cvt_i32_f32_e32 v20, v201906; GFX10-NEXT:    v_cndmask_b32_e32 v2, 0, v11, vcc_lo1907; GFX10-NEXT:    v_cmp_ge_f32_e64 vcc_lo, |v23|, |v3|1908; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v41909; GFX10-NEXT:    v_lshrrev_b32_e32 v10, 8, v41910; GFX10-NEXT:    v_lshrrev_b32_e32 v12, 24, v41911; GFX10-NEXT:    v_add_nc_u32_e32 v1, v17, v11912; GFX10-NEXT:    v_cndmask_b32_e32 v3, 0, v14, vcc_lo1913; GFX10-NEXT:    v_cmp_ge_f32_e64 vcc_lo, |v21|, |v15|1914; GFX10-NEXT:    v_add_nc_u32_e32 v2, v18, v21915; GFX10-NEXT:    v_mul_lo_u32 v1, v1, v41916; GFX10-NEXT:    v_add_nc_u32_e32 v3, v19, v31917; GFX10-NEXT:    v_cndmask_b32_e32 v11, 0, v16, vcc_lo1918; GFX10-NEXT:    v_mul_lo_u32 v2, v2, v101919; GFX10-NEXT:    v_mul_lo_u32 v3, v3, v01920; GFX10-NEXT:    v_add_nc_u32_e32 v11, v20, v111921; GFX10-NEXT:    v_sub_nc_u32_e32 v0, v0, v11922; GFX10-NEXT:    v_sub_nc_u32_sdwa v1, v9, v2 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:DWORD1923; GFX10-NEXT:    v_mul_lo_u32 v10, v11, v121924; GFX10-NEXT:    v_sub_nc_u32_e32 v2, v12, v31925; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD1926; GFX10-NEXT:    v_sub_nc_u32_sdwa v3, v9, v10 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD1927; GFX10-NEXT:    v_or_b32_sdwa v1, v2, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD1928; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1929; GFX10-NEXT:    v_perm_b32 v1, v4, v9, 0x20703061930; GFX10-NEXT:    global_store_dword v[5:6], v0, off1931; GFX10-NEXT:    global_store_dword v[7:8], v1, off1932; GFX10-NEXT:    s_setpc_b64 s[30:31]1933;1934; GFX9-LABEL: srem_store_div:1935; GFX9:       ; %bb.0:1936; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1937; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v311938; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v41939; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v41940; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc1941; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v41942; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc1943; GFX9-NEXT:    global_load_dword v4, v[2:3], off1944; GFX9-NEXT:    global_load_dword v9, v[0:1], off1945; GFX9-NEXT:    s_mov_b32 s4, 0x20703061946; GFX9-NEXT:    s_waitcnt vmcnt(1)1947; GFX9-NEXT:    v_cvt_f32_i32_sdwa v3, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_01948; GFX9-NEXT:    v_cvt_f32_i32_sdwa v10, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_21949; GFX9-NEXT:    v_cvt_f32_i32_sdwa v14, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_11950; GFX9-NEXT:    s_waitcnt vmcnt(0)1951; GFX9-NEXT:    v_cvt_f32_i32_sdwa v13, sext(v9) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_31952; GFX9-NEXT:    v_rcp_iflag_f32_e32 v17, v31953; GFX9-NEXT:    v_cvt_f32_i32_sdwa v16, sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_31954; GFX9-NEXT:    v_xor_b32_sdwa v15, sext(v4), sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:BYTE_21955; GFX9-NEXT:    v_perm_b32 v1, v4, v9, s41956; GFX9-NEXT:    v_mul_f32_e32 v17, v10, v171957; GFX9-NEXT:    v_trunc_f32_e32 v17, v171958; GFX9-NEXT:    v_mad_f32 v19, -v17, v3, v101959; GFX9-NEXT:    v_cmp_ge_f32_e64 vcc, |v19|, |v3|1960; GFX9-NEXT:    v_rcp_iflag_f32_e32 v3, v141961; GFX9-NEXT:    v_rcp_iflag_f32_e32 v19, v101962; GFX9-NEXT:    v_xor_b32_sdwa v2, sext(v4), sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_2 src1_sel:BYTE_01963; GFX9-NEXT:    v_xor_b32_sdwa v12, sext(v9), sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:BYTE_11964; GFX9-NEXT:    v_mul_f32_e32 v3, v13, v31965; GFX9-NEXT:    v_trunc_f32_e32 v3, v31966; GFX9-NEXT:    v_mad_f32 v13, -v3, v14, v131967; GFX9-NEXT:    v_cmp_ge_f32_e64 s[4:5], |v13|, |v14|1968; GFX9-NEXT:    v_ashrrev_i32_e32 v14, 30, v151969; GFX9-NEXT:    v_mul_f32_e32 v15, v16, v191970; GFX9-NEXT:    v_trunc_f32_e32 v15, v151971; GFX9-NEXT:    v_mad_f32 v19, -v15, v10, v161972; GFX9-NEXT:    v_cvt_f32_i32_sdwa v13, sext(v9) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_21973; GFX9-NEXT:    v_cmp_ge_f32_e64 s[6:7], |v19|, |v10|1974; GFX9-NEXT:    v_rcp_iflag_f32_e32 v10, v161975; GFX9-NEXT:    v_ashrrev_i32_e32 v2, 30, v21976; GFX9-NEXT:    v_xor_b32_sdwa v19, sext(v9), sext(v4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_2 src1_sel:BYTE_31977; GFX9-NEXT:    v_cvt_i32_f32_e32 v17, v171978; GFX9-NEXT:    v_mul_f32_e32 v10, v13, v101979; GFX9-NEXT:    v_trunc_f32_e32 v10, v101980; GFX9-NEXT:    v_cvt_i32_f32_e32 v3, v31981; GFX9-NEXT:    v_cvt_i32_f32_e32 v15, v151982; GFX9-NEXT:    v_mad_f32 v13, -v10, v16, v131983; GFX9-NEXT:    v_cvt_i32_f32_e32 v10, v101984; GFX9-NEXT:    v_or_b32_e32 v2, 1, v21985; GFX9-NEXT:    v_ashrrev_i32_e32 v12, 30, v121986; GFX9-NEXT:    v_ashrrev_i32_e32 v19, 30, v191987; GFX9-NEXT:    v_or_b32_e32 v12, 1, v121988; GFX9-NEXT:    v_or_b32_e32 v14, 1, v141989; GFX9-NEXT:    v_or_b32_e32 v19, 1, v191990; GFX9-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc1991; GFX9-NEXT:    v_cmp_ge_f32_e64 vcc, |v13|, |v16|1992; GFX9-NEXT:    v_cndmask_b32_e64 v12, 0, v12, s[4:5]1993; GFX9-NEXT:    v_cndmask_b32_e64 v14, 0, v14, s[6:7]1994; GFX9-NEXT:    v_cndmask_b32_e32 v13, 0, v19, vcc1995; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v41996; GFX9-NEXT:    v_lshrrev_b32_e32 v11, 8, v41997; GFX9-NEXT:    v_lshrrev_b32_e32 v18, 24, v41998; GFX9-NEXT:    v_add_u32_e32 v2, v17, v21999; GFX9-NEXT:    v_add_u32_e32 v3, v3, v122000; GFX9-NEXT:    v_add_u32_e32 v12, v15, v142001; GFX9-NEXT:    v_add_u32_e32 v10, v10, v132002; GFX9-NEXT:    v_mul_lo_u32 v2, v2, v42003; GFX9-NEXT:    v_mul_lo_u32 v3, v3, v112004; GFX9-NEXT:    v_mul_lo_u32 v4, v12, v02005; GFX9-NEXT:    v_mul_lo_u32 v10, v10, v182006; GFX9-NEXT:    v_sub_u32_e32 v0, v0, v22007; GFX9-NEXT:    v_sub_u32_sdwa v2, v9, v3 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:DWORD2008; GFX9-NEXT:    v_sub_u32_e32 v3, v18, v42009; GFX9-NEXT:    v_sub_u32_sdwa v4, v9, v10 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2010; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2011; GFX9-NEXT:    v_or_b32_sdwa v2, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2012; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2013; GFX9-NEXT:    global_store_dword v[5:6], v0, off2014; GFX9-NEXT:    global_store_dword v[7:8], v1, off2015; GFX9-NEXT:    s_waitcnt vmcnt(0)2016; GFX9-NEXT:    s_setpc_b64 s[30:31]2017  %tid = call i32 @llvm.amdgcn.workitem.id.x()2018  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid2019  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid2020  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 42021  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 42022  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 6, i32 3, i32 7, i32 2>2023  %vecins = srem <4 x i8> %shuffle0_0, %vec12024  store <4 x i8> %vecins, ptr addrspace(1) %out02025  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out12026  ret void2027}2028 2029 2030define hidden void @sub_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {2031; GFX10-LABEL: sub_store_div:2032; GFX10:       ; %bb.0:2033; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2034; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v312035; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v42036; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v42037; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo2038; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v42039; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo2040; GFX10-NEXT:    global_load_dword v2, v[2:3], off2041; GFX10-NEXT:    global_load_dword v0, v[0:1], off2042; GFX10-NEXT:    s_waitcnt vmcnt(1)2043; GFX10-NEXT:    v_lshrrev_b32_e32 v1, 16, v22044; GFX10-NEXT:    v_lshrrev_b16 v3, 8, v22045; GFX10-NEXT:    v_lshrrev_b32_e32 v4, 24, v22046; GFX10-NEXT:    s_waitcnt vmcnt(0)2047; GFX10-NEXT:    v_sub_nc_u16 v3, v0, v32048; GFX10-NEXT:    v_sub_nc_u16 v9, v1, v42049; GFX10-NEXT:    v_sub_nc_u16 v10, v4, v22050; GFX10-NEXT:    v_sub_nc_u16 v1, v4, v12051; GFX10-NEXT:    v_perm_b32 v0, v2, v0, 0x60700072052; GFX10-NEXT:    v_lshlrev_b16 v3, 8, v32053; GFX10-NEXT:    v_lshlrev_b16 v4, 8, v92054; GFX10-NEXT:    v_or_b32_sdwa v3, v10, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2055; GFX10-NEXT:    v_or_b32_sdwa v1, v1, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2056; GFX10-NEXT:    v_or_b32_sdwa v1, v3, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2057; GFX10-NEXT:    global_store_dword v[5:6], v1, off2058; GFX10-NEXT:    global_store_dword v[7:8], v0, off2059; GFX10-NEXT:    s_setpc_b64 s[30:31]2060;2061; GFX9-LABEL: sub_store_div:2062; GFX9:       ; %bb.0:2063; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2064; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v312065; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v42066; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v42067; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc2068; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v42069; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc2070; GFX9-NEXT:    global_load_dword v4, v[0:1], off2071; GFX9-NEXT:    global_load_dword v9, v[2:3], off2072; GFX9-NEXT:    s_mov_b32 s4, 0x60700072073; GFX9-NEXT:    s_waitcnt vmcnt(0)2074; GFX9-NEXT:    v_perm_b32 v0, v9, v4, s42075; GFX9-NEXT:    v_sub_u16_sdwa v1, v4, v9 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_12076; GFX9-NEXT:    v_sub_u16_sdwa v2, v9, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:DWORD2077; GFX9-NEXT:    v_sub_u16_sdwa v3, v9, v9 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:BYTE_32078; GFX9-NEXT:    v_sub_u16_sdwa v4, v9, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:WORD_12079; GFX9-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2080; GFX9-NEXT:    v_or_b32_sdwa v2, v4, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2081; GFX9-NEXT:    v_or_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2082; GFX9-NEXT:    global_store_dword v[5:6], v1, off2083; GFX9-NEXT:    global_store_dword v[7:8], v0, off2084; GFX9-NEXT:    s_waitcnt vmcnt(0)2085; GFX9-NEXT:    s_setpc_b64 s[30:31]2086  %tid = call i32 @llvm.amdgcn.workitem.id.x()2087  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid2088  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid2089  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 42090  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 42091  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 7, i32 0, i32 7, i32 6>2092  %vecins = sub <4 x i8> %shuffle0_0, %vec12093  store <4 x i8> %vecins, ptr addrspace(1) %out02094  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out12095  ret void2096}2097 2098 2099define hidden void @sv_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1, ptr addrspace(1) %out2) {2100; GFX10-LABEL: sv_store_div:2101; GFX10:       ; %bb.0:2102; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2103; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v312104; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v42105; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v42106; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo2107; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v42108; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo2109; GFX10-NEXT:    global_load_dword v4, v[0:1], off2110; GFX10-NEXT:    global_load_dword v5, v[2:3], off2111; GFX10-NEXT:    s_waitcnt vmcnt(0)2112; GFX10-NEXT:    v_perm_b32 v0, v4, v5, 0x507052113; GFX10-NEXT:    global_store_dword v[7:8], v0, off2114; GFX10-NEXT:    s_setpc_b64 s[30:31]2115;2116; GFX9-LABEL: sv_store_div:2117; GFX9:       ; %bb.0:2118; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2119; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v312120; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v42121; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v42122; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc2123; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v42124; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc2125; GFX9-NEXT:    global_load_dword v4, v[0:1], off2126; GFX9-NEXT:    global_load_dword v5, v[2:3], off2127; GFX9-NEXT:    s_mov_b32 s4, 0x507052128; GFX9-NEXT:    s_waitcnt vmcnt(0)2129; GFX9-NEXT:    v_perm_b32 v0, v4, v5, s42130; GFX9-NEXT:    global_store_dword v[7:8], v0, off2131; GFX9-NEXT:    s_waitcnt vmcnt(0)2132; GFX9-NEXT:    s_setpc_b64 s[30:31]2133  %tid = call i32 @llvm.amdgcn.workitem.id.x()2134  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid2135  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid2136  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 42137  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 42138  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 1, i32 3, i32 1, i32 4>2139  %insvec = shufflevector <4 x i8> %shuffle0_0, <4 x i8> %vec1, <4 x i32> <i32 6, i32 3, i32 7, i32 0>2140  store <4 x i8> %insvec, ptr addrspace(1) %out12141  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out12142  ret void2143}2144 2145 2146define hidden void @trunc_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {2147; GFX10-LABEL: trunc_store_div:2148; GFX10:       ; %bb.0:2149; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2150; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v312151; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v42152; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v42153; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo2154; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v42155; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo2156; GFX10-NEXT:    global_load_dword v4, v[0:1], off2157; GFX10-NEXT:    global_load_dword v9, v[2:3], off2158; GFX10-NEXT:    v_mov_b32_e32 v0, 12159; GFX10-NEXT:    s_waitcnt vmcnt(1)2160; GFX10-NEXT:    v_and_b32_sdwa v1, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2161; GFX10-NEXT:    s_waitcnt vmcnt(0)2162; GFX10-NEXT:    v_and_b32_sdwa v0, v9, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD2163; GFX10-NEXT:    v_lshlrev_b16 v1, 1, v12164; GFX10-NEXT:    v_lshlrev_b16 v2, 2, v02165; GFX10-NEXT:    v_or_b32_e32 v0, v0, v12166; GFX10-NEXT:    v_lshlrev_b16 v1, 3, v42167; GFX10-NEXT:    v_or_b32_e32 v0, v0, v22168; GFX10-NEXT:    v_or_b32_e32 v0, v0, v12169; GFX10-NEXT:    v_perm_b32 v1, v9, v4, 0x502052170; GFX10-NEXT:    v_and_b32_e32 v0, 15, v02171; GFX10-NEXT:    global_store_byte v[7:8], v0, off2172; GFX10-NEXT:    global_store_dword v[5:6], v1, off2173; GFX10-NEXT:    s_setpc_b64 s[30:31]2174;2175; GFX9-LABEL: trunc_store_div:2176; GFX9:       ; %bb.0:2177; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2178; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v312179; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v42180; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v42181; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc2182; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v42183; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc2184; GFX9-NEXT:    global_load_dword v4, v[0:1], off2185; GFX9-NEXT:    global_load_dword v9, v[2:3], off2186; GFX9-NEXT:    v_mov_b32_e32 v0, 12187; GFX9-NEXT:    s_mov_b32 s4, 0x502052188; GFX9-NEXT:    s_waitcnt vmcnt(1)2189; GFX9-NEXT:    v_lshlrev_b16_e32 v3, 3, v42190; GFX9-NEXT:    s_waitcnt vmcnt(0)2191; GFX9-NEXT:    v_and_b32_sdwa v2, v9, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD2192; GFX9-NEXT:    v_and_b32_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2193; GFX9-NEXT:    v_lshlrev_b16_e32 v0, 1, v02194; GFX9-NEXT:    v_perm_b32 v1, v9, v4, s42195; GFX9-NEXT:    v_lshlrev_b16_e32 v4, 2, v22196; GFX9-NEXT:    v_or_b32_e32 v0, v2, v02197; GFX9-NEXT:    v_or_b32_e32 v0, v0, v42198; GFX9-NEXT:    v_or_b32_e32 v0, v0, v32199; GFX9-NEXT:    v_and_b32_e32 v0, 15, v02200; GFX9-NEXT:    global_store_byte v[7:8], v0, off2201; GFX9-NEXT:    global_store_dword v[5:6], v1, off2202; GFX9-NEXT:    s_waitcnt vmcnt(0)2203; GFX9-NEXT:    s_setpc_b64 s[30:31]2204  %tid = call i32 @llvm.amdgcn.workitem.id.x()2205  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid2206  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid2207  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 42208  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 42209  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 5, i32 2, i32 5, i32 0>2210  %insvec = trunc <4 x i8> %shuffle0_0 to <4 x i1>2211  store <4 x i1> %insvec, ptr addrspace(1) %out12212  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out02213  ret void2214}2215 2216define hidden void @udiv(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {2217; GFX10-LABEL: udiv:2218; GFX10:       ; %bb.0:2219; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2220; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v312221; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v42222; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v42223; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo2224; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v42225; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo2226; GFX10-NEXT:    global_load_dword v2, v[2:3], off2227; GFX10-NEXT:    global_load_dword v0, v[0:1], off2228; GFX10-NEXT:    s_waitcnt vmcnt(1)2229; GFX10-NEXT:    v_cvt_f32_ubyte0_e32 v1, v22230; GFX10-NEXT:    v_cvt_f32_ubyte1_e32 v3, v22231; GFX10-NEXT:    v_cvt_f32_ubyte3_e32 v9, v22232; GFX10-NEXT:    s_waitcnt vmcnt(0)2233; GFX10-NEXT:    v_cvt_f32_ubyte3_e32 v14, v02234; GFX10-NEXT:    v_cvt_f32_ubyte2_e32 v4, v22235; GFX10-NEXT:    v_rcp_iflag_f32_e32 v10, v12236; GFX10-NEXT:    v_rcp_iflag_f32_e32 v11, v32237; GFX10-NEXT:    v_rcp_iflag_f32_e32 v13, v92238; GFX10-NEXT:    v_cvt_f32_ubyte0_e32 v15, v02239; GFX10-NEXT:    v_rcp_iflag_f32_e32 v12, v42240; GFX10-NEXT:    v_perm_b32 v0, v0, v2, 0x402072241; GFX10-NEXT:    v_mul_f32_e32 v10, v14, v102242; GFX10-NEXT:    v_mul_f32_e32 v11, v4, v112243; GFX10-NEXT:    v_mul_f32_e32 v13, v1, v132244; GFX10-NEXT:    v_mul_f32_e32 v12, v15, v122245; GFX10-NEXT:    v_trunc_f32_e32 v10, v102246; GFX10-NEXT:    v_trunc_f32_e32 v11, v112247; GFX10-NEXT:    v_trunc_f32_e32 v13, v132248; GFX10-NEXT:    v_trunc_f32_e32 v12, v122249; GFX10-NEXT:    v_mad_f32 v14, -v10, v1, v142250; GFX10-NEXT:    v_cvt_u32_f32_e32 v10, v102251; GFX10-NEXT:    v_mad_f32 v16, -v11, v3, v42252; GFX10-NEXT:    v_mad_f32 v17, -v13, v9, v12253; GFX10-NEXT:    v_cvt_u32_f32_e32 v11, v112254; GFX10-NEXT:    v_cmp_ge_f32_e64 vcc_lo, |v14|, v12255; GFX10-NEXT:    v_cvt_u32_f32_e32 v13, v132256; GFX10-NEXT:    v_mad_f32 v15, -v12, v4, v152257; GFX10-NEXT:    v_cvt_u32_f32_e32 v12, v122258; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v10, vcc_lo2259; GFX10-NEXT:    v_cmp_ge_f32_e64 vcc_lo, |v16|, v32260; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v11, vcc_lo2261; GFX10-NEXT:    v_cmp_ge_f32_e64 vcc_lo, |v17|, v92262; GFX10-NEXT:    v_lshlrev_b16 v3, 8, v32263; GFX10-NEXT:    v_add_co_ci_u32_e32 v9, vcc_lo, 0, v13, vcc_lo2264; GFX10-NEXT:    v_cmp_ge_f32_e64 vcc_lo, |v15|, v42265; GFX10-NEXT:    v_or_b32_sdwa v1, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2266; GFX10-NEXT:    v_lshlrev_b16 v9, 8, v92267; GFX10-NEXT:    v_add_co_ci_u32_e32 v4, vcc_lo, 0, v12, vcc_lo2268; GFX10-NEXT:    v_or_b32_sdwa v3, v4, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2269; GFX10-NEXT:    v_or_b32_sdwa v1, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2270; GFX10-NEXT:    global_store_dword v[5:6], v1, off2271; GFX10-NEXT:    global_store_dword v[7:8], v0, off2272; GFX10-NEXT:    s_setpc_b64 s[30:31]2273;2274; GFX9-LABEL: udiv:2275; GFX9:       ; %bb.0:2276; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2277; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v312278; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v42279; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v42280; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc2281; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v42282; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc2283; GFX9-NEXT:    global_load_dword v4, v[2:3], off2284; GFX9-NEXT:    global_load_dword v9, v[0:1], off2285; GFX9-NEXT:    s_mov_b32 s4, 0x402072286; GFX9-NEXT:    s_waitcnt vmcnt(1)2287; GFX9-NEXT:    v_cvt_f32_ubyte0_e32 v2, v42288; GFX9-NEXT:    v_rcp_iflag_f32_e32 v11, v22289; GFX9-NEXT:    v_cvt_f32_ubyte1_e32 v3, v42290; GFX9-NEXT:    v_rcp_iflag_f32_e32 v12, v32291; GFX9-NEXT:    s_waitcnt vmcnt(0)2292; GFX9-NEXT:    v_cvt_f32_ubyte3_e32 v1, v92293; GFX9-NEXT:    v_cvt_f32_ubyte2_e32 v10, v42294; GFX9-NEXT:    v_rcp_iflag_f32_e32 v13, v102295; GFX9-NEXT:    v_mul_f32_e32 v11, v1, v112296; GFX9-NEXT:    v_perm_b32 v0, v9, v4, s42297; GFX9-NEXT:    v_cvt_f32_ubyte3_e32 v4, v42298; GFX9-NEXT:    v_trunc_f32_e32 v11, v112299; GFX9-NEXT:    v_rcp_iflag_f32_e32 v14, v42300; GFX9-NEXT:    v_mul_f32_e32 v12, v10, v122301; GFX9-NEXT:    v_mad_f32 v1, -v11, v2, v12302; GFX9-NEXT:    v_cvt_u32_f32_e32 v11, v112303; GFX9-NEXT:    v_cvt_f32_ubyte0_e32 v9, v92304; GFX9-NEXT:    v_trunc_f32_e32 v12, v122305; GFX9-NEXT:    v_mul_f32_e32 v13, v9, v132306; GFX9-NEXT:    v_mad_f32 v15, -v12, v3, v102307; GFX9-NEXT:    v_cvt_u32_f32_e32 v12, v122308; GFX9-NEXT:    v_trunc_f32_e32 v13, v132309; GFX9-NEXT:    v_cmp_ge_f32_e64 vcc, |v1|, v22310; GFX9-NEXT:    v_mul_f32_e32 v14, v2, v142311; GFX9-NEXT:    v_mad_f32 v9, -v13, v10, v92312; GFX9-NEXT:    v_cvt_u32_f32_e32 v13, v132313; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v11, vcc2314; GFX9-NEXT:    v_trunc_f32_e32 v14, v142315; GFX9-NEXT:    v_cmp_ge_f32_e64 vcc, |v15|, v32316; GFX9-NEXT:    v_mad_f32 v16, -v14, v4, v22317; GFX9-NEXT:    v_cvt_u32_f32_e32 v14, v142318; GFX9-NEXT:    v_addc_co_u32_e32 v2, vcc, 0, v12, vcc2319; GFX9-NEXT:    v_cmp_ge_f32_e64 vcc, |v9|, v102320; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v13, vcc2321; GFX9-NEXT:    v_cmp_ge_f32_e64 vcc, |v16|, v42322; GFX9-NEXT:    v_addc_co_u32_e32 v4, vcc, 0, v14, vcc2323; GFX9-NEXT:    v_lshlrev_b16_e32 v2, 8, v22324; GFX9-NEXT:    v_lshlrev_b16_e32 v4, 8, v42325; GFX9-NEXT:    v_or_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2326; GFX9-NEXT:    v_or_b32_sdwa v2, v3, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2327; GFX9-NEXT:    v_or_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2328; GFX9-NEXT:    global_store_dword v[5:6], v1, off2329; GFX9-NEXT:    global_store_dword v[7:8], v0, off2330; GFX9-NEXT:    s_waitcnt vmcnt(0)2331; GFX9-NEXT:    s_setpc_b64 s[30:31]2332  %tid = call i32 @llvm.amdgcn.workitem.id.x()2333  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid2334  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid2335  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 42336  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 42337  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 3, i32 6, i32 0, i32 4>2338  %vecins = udiv <4 x i8> %shuffle0_0, %vec12339  store <4 x i8> %vecins, ptr addrspace(1) %out02340  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out12341  ret void2342}2343 2344 2345define hidden void @uitofp_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {2346; GFX10-LABEL: uitofp_store_div:2347; GFX10:       ; %bb.0:2348; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2349; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v312350; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v42351; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v42352; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo2353; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v42354; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo2355; GFX10-NEXT:    global_load_dword v4, v[2:3], off2356; GFX10-NEXT:    global_load_dword v9, v[0:1], off2357; GFX10-NEXT:    s_waitcnt vmcnt(1)2358; GFX10-NEXT:    v_cvt_f32_ubyte1_e32 v3, v42359; GFX10-NEXT:    s_waitcnt vmcnt(0)2360; GFX10-NEXT:    v_cvt_f32_ubyte2_e32 v2, v92361; GFX10-NEXT:    v_cvt_f32_ubyte1_e32 v1, v92362; GFX10-NEXT:    v_cvt_f32_ubyte0_e32 v0, v42363; GFX10-NEXT:    v_perm_b32 v4, v4, v9, 0x50201042364; GFX10-NEXT:    global_store_dwordx4 v[7:8], v[0:3], off2365; GFX10-NEXT:    global_store_dword v[5:6], v4, off2366; GFX10-NEXT:    s_setpc_b64 s[30:31]2367;2368; GFX9-LABEL: uitofp_store_div:2369; GFX9:       ; %bb.0:2370; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2371; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v312372; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v42373; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v42374; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc2375; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v42376; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc2377; GFX9-NEXT:    global_load_dword v4, v[0:1], off2378; GFX9-NEXT:    global_load_dword v9, v[2:3], off2379; GFX9-NEXT:    s_mov_b32 s4, 0x50201042380; GFX9-NEXT:    s_waitcnt vmcnt(1)2381; GFX9-NEXT:    v_cvt_f32_ubyte2_e32 v2, v42382; GFX9-NEXT:    s_waitcnt vmcnt(0)2383; GFX9-NEXT:    v_cvt_f32_ubyte1_e32 v3, v92384; GFX9-NEXT:    v_cvt_f32_ubyte1_e32 v1, v42385; GFX9-NEXT:    v_cvt_f32_ubyte0_e32 v0, v92386; GFX9-NEXT:    v_perm_b32 v10, v9, v4, s42387; GFX9-NEXT:    global_store_dwordx4 v[7:8], v[0:3], off2388; GFX9-NEXT:    global_store_dword v[5:6], v10, off2389; GFX9-NEXT:    s_waitcnt vmcnt(0)2390; GFX9-NEXT:    s_setpc_b64 s[30:31]2391  %tid = call i32 @llvm.amdgcn.workitem.id.x()2392  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid2393  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid2394  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 42395  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 42396  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 4, i32 1, i32 2, i32 5>2397  %insvec = uitofp <4 x i8> %shuffle0_0 to <4 x float>2398  store <4 x float> %insvec, ptr addrspace(1) %out12399  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out02400  ret void2401}2402 2403 2404define hidden void @urem_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {2405; GFX10-LABEL: urem_store_div:2406; GFX10:       ; %bb.0:2407; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2408; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v312409; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v42410; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v42411; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo2412; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v42413; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo2414; GFX10-NEXT:    global_load_dword v2, v[2:3], off2415; GFX10-NEXT:    global_load_dword v0, v[0:1], off2416; GFX10-NEXT:    s_waitcnt vmcnt(1)2417; GFX10-NEXT:    v_cvt_f32_ubyte0_e32 v1, v22418; GFX10-NEXT:    v_cvt_f32_ubyte1_e32 v3, v22419; GFX10-NEXT:    v_cvt_f32_ubyte2_e32 v4, v22420; GFX10-NEXT:    v_cvt_f32_ubyte3_e32 v9, v22421; GFX10-NEXT:    s_waitcnt vmcnt(0)2422; GFX10-NEXT:    v_cvt_f32_ubyte2_e32 v15, v02423; GFX10-NEXT:    v_rcp_iflag_f32_e32 v10, v12424; GFX10-NEXT:    v_rcp_iflag_f32_e32 v11, v32425; GFX10-NEXT:    v_rcp_iflag_f32_e32 v12, v42426; GFX10-NEXT:    v_rcp_iflag_f32_e32 v13, v92427; GFX10-NEXT:    v_lshrrev_b32_e32 v14, 16, v22428; GFX10-NEXT:    v_lshrrev_b32_e32 v16, 8, v22429; GFX10-NEXT:    v_lshrrev_b32_e32 v17, 24, v22430; GFX10-NEXT:    v_mul_f32_e32 v10, v3, v102431; GFX10-NEXT:    v_mul_f32_e32 v11, v3, v112432; GFX10-NEXT:    v_mul_f32_e32 v12, v3, v122433; GFX10-NEXT:    v_mul_f32_e32 v13, v15, v132434; GFX10-NEXT:    v_trunc_f32_e32 v10, v102435; GFX10-NEXT:    v_trunc_f32_e32 v11, v112436; GFX10-NEXT:    v_trunc_f32_e32 v12, v122437; GFX10-NEXT:    v_trunc_f32_e32 v13, v132438; GFX10-NEXT:    v_mad_f32 v18, -v10, v1, v32439; GFX10-NEXT:    v_cvt_u32_f32_e32 v10, v102440; GFX10-NEXT:    v_mad_f32 v19, -v11, v3, v32441; GFX10-NEXT:    v_cvt_u32_f32_e32 v11, v112442; GFX10-NEXT:    v_mad_f32 v20, -v12, v4, v32443; GFX10-NEXT:    v_cmp_ge_f32_e64 vcc_lo, |v18|, v12444; GFX10-NEXT:    v_cvt_u32_f32_e32 v12, v122445; GFX10-NEXT:    v_mad_f32 v15, -v13, v9, v152446; GFX10-NEXT:    v_cvt_u32_f32_e32 v13, v132447; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v10, vcc_lo2448; GFX10-NEXT:    v_cmp_ge_f32_e64 vcc_lo, |v19|, v32449; GFX10-NEXT:    v_mul_lo_u32 v1, v1, v22450; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v11, vcc_lo2451; GFX10-NEXT:    v_cmp_ge_f32_e64 vcc_lo, |v20|, v42452; GFX10-NEXT:    v_mul_lo_u32 v3, v3, v162453; GFX10-NEXT:    v_sub_nc_u32_e32 v1, v16, v12454; GFX10-NEXT:    v_add_co_ci_u32_e32 v4, vcc_lo, 0, v12, vcc_lo2455; GFX10-NEXT:    v_cmp_ge_f32_e64 vcc_lo, |v15|, v92456; GFX10-NEXT:    v_mul_lo_u32 v4, v4, v142457; GFX10-NEXT:    v_sub_nc_u32_sdwa v3, v16, v3 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2458; GFX10-NEXT:    v_add_co_ci_u32_e32 v9, vcc_lo, 0, v13, vcc_lo2459; GFX10-NEXT:    v_or_b32_sdwa v1, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2460; GFX10-NEXT:    v_mul_lo_u32 v9, v9, v172461; GFX10-NEXT:    v_sub_nc_u32_e32 v4, v16, v42462; GFX10-NEXT:    v_sub_nc_u32_sdwa v9, v0, v9 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2463; GFX10-NEXT:    v_perm_b32 v0, v2, v0, 0x20505052464; GFX10-NEXT:    v_or_b32_sdwa v3, v4, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2465; GFX10-NEXT:    v_or_b32_sdwa v1, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2466; GFX10-NEXT:    global_store_dword v[5:6], v1, off2467; GFX10-NEXT:    global_store_dword v[7:8], v0, off2468; GFX10-NEXT:    s_setpc_b64 s[30:31]2469;2470; GFX9-LABEL: urem_store_div:2471; GFX9:       ; %bb.0:2472; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2473; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v312474; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v42475; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v42476; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc2477; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v42478; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc2479; GFX9-NEXT:    global_load_dword v4, v[2:3], off2480; GFX9-NEXT:    global_load_dword v9, v[0:1], off2481; GFX9-NEXT:    s_mov_b32 s4, 0x20505052482; GFX9-NEXT:    s_waitcnt vmcnt(1)2483; GFX9-NEXT:    v_cvt_f32_ubyte0_e32 v2, v42484; GFX9-NEXT:    v_rcp_iflag_f32_e32 v15, v22485; GFX9-NEXT:    v_cvt_f32_ubyte1_e32 v3, v42486; GFX9-NEXT:    v_rcp_iflag_f32_e32 v16, v32487; GFX9-NEXT:    v_cvt_f32_ubyte2_e32 v11, v42488; GFX9-NEXT:    v_rcp_iflag_f32_e32 v17, v112489; GFX9-NEXT:    v_mul_f32_e32 v15, v3, v152490; GFX9-NEXT:    v_cvt_f32_ubyte3_e32 v14, v42491; GFX9-NEXT:    v_trunc_f32_e32 v15, v152492; GFX9-NEXT:    v_rcp_iflag_f32_e32 v18, v142493; GFX9-NEXT:    v_mul_f32_e32 v16, v3, v162494; GFX9-NEXT:    v_mad_f32 v19, -v15, v2, v32495; GFX9-NEXT:    v_cvt_u32_f32_e32 v15, v152496; GFX9-NEXT:    v_trunc_f32_e32 v16, v162497; GFX9-NEXT:    v_mul_f32_e32 v17, v3, v172498; GFX9-NEXT:    v_cmp_ge_f32_e64 vcc, |v19|, v22499; GFX9-NEXT:    v_mad_f32 v2, -v16, v3, v32500; GFX9-NEXT:    v_cvt_u32_f32_e32 v16, v162501; GFX9-NEXT:    s_waitcnt vmcnt(0)2502; GFX9-NEXT:    v_cvt_f32_ubyte2_e32 v13, v92503; GFX9-NEXT:    v_trunc_f32_e32 v17, v172504; GFX9-NEXT:    v_mul_f32_e32 v18, v13, v182505; GFX9-NEXT:    v_mad_f32 v19, -v17, v11, v32506; GFX9-NEXT:    v_cvt_u32_f32_e32 v17, v172507; GFX9-NEXT:    v_addc_co_u32_e32 v15, vcc, 0, v15, vcc2508; GFX9-NEXT:    v_trunc_f32_e32 v18, v182509; GFX9-NEXT:    v_cmp_ge_f32_e64 vcc, |v2|, v32510; GFX9-NEXT:    v_mad_f32 v13, -v18, v14, v132511; GFX9-NEXT:    v_cvt_u32_f32_e32 v18, v182512; GFX9-NEXT:    v_addc_co_u32_e32 v2, vcc, 0, v16, vcc2513; GFX9-NEXT:    v_cmp_ge_f32_e64 vcc, |v19|, v112514; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v17, vcc2515; GFX9-NEXT:    v_cmp_ge_f32_e64 vcc, |v13|, v142516; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v42517; GFX9-NEXT:    v_lshrrev_b32_e32 v10, 8, v42518; GFX9-NEXT:    v_lshrrev_b32_e32 v12, 24, v42519; GFX9-NEXT:    v_addc_co_u32_e32 v11, vcc, 0, v18, vcc2520; GFX9-NEXT:    v_perm_b32 v1, v4, v9, s42521; GFX9-NEXT:    v_mul_lo_u32 v4, v15, v42522; GFX9-NEXT:    v_mul_lo_u32 v2, v2, v102523; GFX9-NEXT:    v_mul_lo_u32 v0, v3, v02524; GFX9-NEXT:    v_mul_lo_u32 v3, v11, v122525; GFX9-NEXT:    v_sub_u32_e32 v4, v10, v42526; GFX9-NEXT:    v_sub_u32_sdwa v2, v10, v2 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2527; GFX9-NEXT:    v_sub_u32_e32 v0, v10, v02528; GFX9-NEXT:    v_sub_u32_sdwa v3, v9, v3 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2529; GFX9-NEXT:    v_or_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2530; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2531; GFX9-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2532; GFX9-NEXT:    global_store_dword v[5:6], v0, off2533; GFX9-NEXT:    global_store_dword v[7:8], v1, off2534; GFX9-NEXT:    s_waitcnt vmcnt(0)2535; GFX9-NEXT:    s_setpc_b64 s[30:31]2536  %tid = call i32 @llvm.amdgcn.workitem.id.x()2537  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid2538  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid2539  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 42540  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 42541  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 5, i32 5, i32 5, i32 2>2542  %vecins = urem <4 x i8> %shuffle0_0, %vec12543  store <4 x i8> %vecins, ptr addrspace(1) %out02544  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out12545  ret void2546}2547 2548 2549define hidden void @xor_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {2550; GFX10-LABEL: xor_store_div:2551; GFX10:       ; %bb.0:2552; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2553; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v312554; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v42555; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v42556; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo2557; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v42558; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo2559; GFX10-NEXT:    global_load_dword v4, v[0:1], off2560; GFX10-NEXT:    global_load_dword v9, v[2:3], off2561; GFX10-NEXT:    v_mov_b32_e32 v0, 0xffffff002562; GFX10-NEXT:    v_mov_b32_e32 v1, 12563; GFX10-NEXT:    v_mov_b32_e32 v2, 22564; GFX10-NEXT:    s_waitcnt vmcnt(1)2565; GFX10-NEXT:    v_and_b32_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2566; GFX10-NEXT:    s_waitcnt vmcnt(0)2567; GFX10-NEXT:    v_and_b32_e32 v3, 0xffffff00, v92568; GFX10-NEXT:    v_xor_b32_sdwa v1, v9, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:DWORD2569; GFX10-NEXT:    v_xor_b32_sdwa v2, v9, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2570; GFX10-NEXT:    v_xor_b32_e32 v0, 0x200, v02571; GFX10-NEXT:    v_xor_b32_e32 v3, 0x100, v32572; GFX10-NEXT:    v_or_b32_e32 v0, v1, v02573; GFX10-NEXT:    v_or_b32_sdwa v1, v2, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2574; GFX10-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2575; GFX10-NEXT:    v_perm_b32 v1, v9, v4, 0x50603072576; GFX10-NEXT:    global_store_dword v[5:6], v0, off2577; GFX10-NEXT:    global_store_dword v[7:8], v1, off2578; GFX10-NEXT:    s_setpc_b64 s[30:31]2579;2580; GFX9-LABEL: xor_store_div:2581; GFX9:       ; %bb.0:2582; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2583; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v312584; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v42585; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v42586; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc2587; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v42588; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc2589; GFX9-NEXT:    global_load_dword v4, v[0:1], off2590; GFX9-NEXT:    global_load_dword v9, v[2:3], off2591; GFX9-NEXT:    s_movk_i32 s4, 0xff002592; GFX9-NEXT:    v_mov_b32_e32 v0, 12593; GFX9-NEXT:    v_mov_b32_e32 v1, 22594; GFX9-NEXT:    s_mov_b32 s5, 0x50603072595; GFX9-NEXT:    s_waitcnt vmcnt(1)2596; GFX9-NEXT:    v_and_b32_sdwa v2, v4, s4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2597; GFX9-NEXT:    s_waitcnt vmcnt(0)2598; GFX9-NEXT:    v_and_b32_e32 v3, 0xffffff00, v92599; GFX9-NEXT:    v_xor_b32_sdwa v0, v9, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:DWORD2600; GFX9-NEXT:    v_xor_b32_sdwa v1, v9, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2601; GFX9-NEXT:    v_xor_b32_e32 v2, 0x200, v22602; GFX9-NEXT:    v_xor_b32_e32 v3, 0x100, v32603; GFX9-NEXT:    v_or_b32_e32 v0, v0, v22604; GFX9-NEXT:    v_or_b32_sdwa v1, v1, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD2605; GFX9-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2606; GFX9-NEXT:    v_perm_b32 v4, v9, v4, s52607; GFX9-NEXT:    global_store_dword v[5:6], v0, off2608; GFX9-NEXT:    global_store_dword v[7:8], v4, off2609; GFX9-NEXT:    s_waitcnt vmcnt(0)2610; GFX9-NEXT:    s_setpc_b64 s[30:31]2611  %tid = call i32 @llvm.amdgcn.workitem.id.x()2612  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid2613  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid2614  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 42615  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 42616  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 7, i32 3, i32 6, i32 5>2617  %vecins = xor <4 x i8> %shuffle0_0, <i8 1, i8 2, i8 2, i8 1>2618  store <4 x i8> %vecins, ptr addrspace(1) %out02619  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out12620  ret void2621}2622 2623 2624define hidden void @zext_store_div(ptr addrspace(1) %in0, ptr addrspace(1) %in1, i8 %elt, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {2625; GFX10-LABEL: zext_store_div:2626; GFX10:       ; %bb.0:2627; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2628; GFX10-NEXT:    v_and_b32_e32 v4, 0x3ff, v312629; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 2, v42630; GFX10-NEXT:    v_add_co_u32 v0, vcc_lo, v0, v42631; GFX10-NEXT:    v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo2632; GFX10-NEXT:    v_add_co_u32 v2, vcc_lo, v2, v42633; GFX10-NEXT:    v_add_co_ci_u32_e32 v3, vcc_lo, 0, v3, vcc_lo2634; GFX10-NEXT:    global_load_dword v4, v[0:1], off2635; GFX10-NEXT:    global_load_dword v9, v[2:3], off2636; GFX10-NEXT:    v_mov_b32_e32 v0, 0xff2637; GFX10-NEXT:    s_waitcnt vmcnt(1)2638; GFX10-NEXT:    v_lshrrev_b16 v1, 8, v42639; GFX10-NEXT:    v_and_b32_e32 v2, 0xff, v42640; GFX10-NEXT:    s_waitcnt vmcnt(0)2641; GFX10-NEXT:    v_and_b32_e32 v3, 0xff, v92642; GFX10-NEXT:    v_and_b32_sdwa v10, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2643; GFX10-NEXT:    v_perm_b32 v0, v1, v2, 0x50401002644; GFX10-NEXT:    v_perm_b32 v2, v4, v9, 0x605042645; GFX10-NEXT:    v_perm_b32 v1, v3, v10, 0x50401002646; GFX10-NEXT:    global_store_dwordx2 v[7:8], v[0:1], off2647; GFX10-NEXT:    global_store_dword v[5:6], v2, off2648; GFX10-NEXT:    s_setpc_b64 s[30:31]2649;2650; GFX9-LABEL: zext_store_div:2651; GFX9:       ; %bb.0:2652; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2653; GFX9-NEXT:    v_and_b32_e32 v4, 0x3ff, v312654; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 2, v42655; GFX9-NEXT:    v_add_co_u32_e32 v0, vcc, v0, v42656; GFX9-NEXT:    v_addc_co_u32_e32 v1, vcc, 0, v1, vcc2657; GFX9-NEXT:    v_add_co_u32_e32 v2, vcc, v2, v42658; GFX9-NEXT:    v_addc_co_u32_e32 v3, vcc, 0, v3, vcc2659; GFX9-NEXT:    global_load_dword v4, v[0:1], off2660; GFX9-NEXT:    global_load_dword v9, v[2:3], off2661; GFX9-NEXT:    s_mov_b32 s4, 0x605042662; GFX9-NEXT:    s_movk_i32 s5, 0xff2663; GFX9-NEXT:    s_mov_b32 s6, 0x50401002664; GFX9-NEXT:    s_waitcnt vmcnt(1)2665; GFX9-NEXT:    v_lshrrev_b16_e32 v0, 8, v42666; GFX9-NEXT:    s_waitcnt vmcnt(0)2667; GFX9-NEXT:    v_perm_b32 v2, v4, v9, s42668; GFX9-NEXT:    v_and_b32_e32 v1, 0xff, v42669; GFX9-NEXT:    v_and_b32_e32 v3, 0xff, v92670; GFX9-NEXT:    v_and_b32_sdwa v4, v4, s5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD2671; GFX9-NEXT:    v_perm_b32 v0, v0, v1, s62672; GFX9-NEXT:    v_perm_b32 v1, v3, v4, s62673; GFX9-NEXT:    global_store_dwordx2 v[7:8], v[0:1], off2674; GFX9-NEXT:    global_store_dword v[5:6], v2, off2675; GFX9-NEXT:    s_waitcnt vmcnt(0)2676; GFX9-NEXT:    s_setpc_b64 s[30:31]2677  %tid = call i32 @llvm.amdgcn.workitem.id.x()2678  %gep0 = getelementptr <4 x i8>, ptr addrspace(1) %in0, i32 %tid2679  %gep1 = getelementptr <4 x i8>, ptr addrspace(1) %in1, i32 %tid2680  %vec0 = load <4 x i8>, ptr addrspace(1) %gep0, align 42681  %vec1 = load <4 x i8>, ptr addrspace(1) %gep1, align 42682  %shuffle0_0 = shufflevector <4 x i8> %vec0, <4 x i8> %vec1, <4 x i32> <i32 0, i32 1, i32 2, i32 4>2683  %insvec = zext <4 x i8> %shuffle0_0 to <4 x i16>2684  store <4 x i16> %insvec, ptr addrspace(1) %out12685  store <4 x i8> %shuffle0_0, ptr addrspace(1) %out02686  ret void2687}2688 2689define void @Source16Bit(i16 %in, <2 x i16> %reg) {2690; GFX10-LABEL: Source16Bit:2691; GFX10:       ; %bb.0: ; %entry2692; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2693; GFX10-NEXT:    v_perm_b32 v0, v0, v1, 0x30502042694; GFX10-NEXT:    global_store_dword v[0:1], v0, off2695; GFX10-NEXT:    s_setpc_b64 s[30:31]2696;2697; GFX9-LABEL: Source16Bit:2698; GFX9:       ; %bb.0: ; %entry2699; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2700; GFX9-NEXT:    s_mov_b32 s4, 0x30502042701; GFX9-NEXT:    v_perm_b32 v0, v0, v1, s42702; GFX9-NEXT:    global_store_dword v[0:1], v0, off2703; GFX9-NEXT:    s_waitcnt vmcnt(0)2704; GFX9-NEXT:    s_setpc_b64 s[30:31]2705entry:2706  %elt0 = extractelement <2 x i16> %reg, i32 12707  %e0b0 = and i16 %elt0, 2552708  %e0b1 = and i16 %elt0, -2562709  %e1b0 = and i16 %in, 2552710  %e1b1 = and i16 %in, -2562711  %tmp0 = shl i16 %e0b0, 82712  %byte0 = or i16 %tmp0, %e1b02713  %tmp2 = lshr i16 %e1b1, 82714  %byte1 = or i16 %e0b1, %tmp22715  %ext0 = zext i16 %byte0 to i322716  %ext1 = zext i16 %byte1 to i322717  %shifted = shl i32 %ext1, 162718  %result = or i32 %shifted, %ext02719  store i32 %result, ptr addrspace(1) poison2720  ret void2721}2722 2723define hidden void @extract3744(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {2724; GFX10-LABEL: extract3744:2725; GFX10:       ; %bb.0:2726; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2727; GFX10-NEXT:    global_load_dword v6, v[0:1], off2728; GFX10-NEXT:    global_load_dword v7, v[2:3], off2729; GFX10-NEXT:    s_waitcnt vmcnt(0)2730; GFX10-NEXT:    v_perm_b32 v0, v6, v7, 0x30704042731; GFX10-NEXT:    global_store_dword v[4:5], v0, off2732; GFX10-NEXT:    s_setpc_b64 s[30:31]2733;2734; GFX9-LABEL: extract3744:2735; GFX9:       ; %bb.0:2736; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2737; GFX9-NEXT:    global_load_dword v6, v[0:1], off2738; GFX9-NEXT:    global_load_dword v7, v[2:3], off2739; GFX9-NEXT:    s_mov_b32 s4, 0x30704042740; GFX9-NEXT:    s_waitcnt vmcnt(0)2741; GFX9-NEXT:    v_perm_b32 v0, v6, v7, s42742; GFX9-NEXT:    global_store_dword v[4:5], v0, off2743; GFX9-NEXT:    s_waitcnt vmcnt(0)2744; GFX9-NEXT:    s_setpc_b64 s[30:31]2745  %vec1 = load <4 x i8>, ptr addrspace(1) %in0, align 42746  %vec2 = load <4 x i8>, ptr addrspace(1) %in1, align 42747  %v1e0 = extractelement <4 x i8> %vec1, i64 02748  %zv1e0 = zext i8 %v1e0 to i322749  %byte1 = shl i32 %zv1e0, 82750 2751  %v1e3 = extractelement <4 x i8> %vec1, i64 32752  %zv1e3 = zext i8 %v1e3 to i322753  %byte2 = shl i32 %zv1e3, 162754  %v2e3 = extractelement <4 x i8> %vec2, i64 32755  %zv2e3 = zext i8 %v2e3 to i322756  %byte3 = shl i32 %zv2e3, 242757 2758  %tmp0 = or i32 %zv1e0, %byte12759  %tmp1 = or i32 %tmp0, %byte22760  %res = or i32 %tmp1, %byte32761  store i32 %res, ptr addrspace(1) %out0, align 42762  ret void2763}2764 2765declare i32 @llvm.amdgcn.perm(i32, i32, i32)2766 2767define hidden void @extract_perm_3744(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {2768; GFX10-LABEL: extract_perm_3744:2769; GFX10:       ; %bb.0:2770; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2771; GFX10-NEXT:    global_load_dword v6, v[0:1], off2772; GFX10-NEXT:    global_load_dword v7, v[2:3], off2773; GFX10-NEXT:    s_waitcnt vmcnt(0)2774; GFX10-NEXT:    v_perm_b32 v0, v6, v7, 0x30704042775; GFX10-NEXT:    global_store_dword v[4:5], v0, off2776; GFX10-NEXT:    s_setpc_b64 s[30:31]2777;2778; GFX9-LABEL: extract_perm_3744:2779; GFX9:       ; %bb.0:2780; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2781; GFX9-NEXT:    global_load_dword v6, v[0:1], off2782; GFX9-NEXT:    global_load_dword v7, v[2:3], off2783; GFX9-NEXT:    s_mov_b32 s4, 0x30704042784; GFX9-NEXT:    s_waitcnt vmcnt(0)2785; GFX9-NEXT:    v_perm_b32 v0, v6, v7, s42786; GFX9-NEXT:    global_store_dword v[4:5], v0, off2787; GFX9-NEXT:    s_waitcnt vmcnt(0)2788; GFX9-NEXT:    s_setpc_b64 s[30:31]2789  %vec1 = load <4 x i8>, ptr addrspace(1) %in0, align 42790  %vec2 = load <4 x i8>, ptr addrspace(1) %in1, align 42791  %cast1 = bitcast <4 x i8> %vec1 to i322792  %cast2 = bitcast <4 x i8> %vec2 to i322793  %lo24 = call i32 @llvm.amdgcn.perm(i32 %cast1, i32 %cast1, i32 201523200)2794  %hi8 = call i32 @llvm.amdgcn.perm(i32 %cast2, i32 %cast2, i32 51121164)2795  %res = or i32 %hi8, %lo242796  store i32 %res, ptr addrspace(1) %out0, align 42797  ret void2798}2799 2800define hidden void @extract1347_v2i16(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {2801; GFX10-LABEL: extract1347_v2i16:2802; GFX10:       ; %bb.0:2803; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2804; GFX10-NEXT:    global_load_dword v6, v[0:1], off2805; GFX10-NEXT:    global_load_dword v7, v[2:3], off2806; GFX10-NEXT:    s_waitcnt vmcnt(0)2807; GFX10-NEXT:    v_perm_b32 v0, v7, v6, 0x10304072808; GFX10-NEXT:    global_store_dword v[4:5], v0, off2809; GFX10-NEXT:    s_setpc_b64 s[30:31]2810;2811; GFX9-LABEL: extract1347_v2i16:2812; GFX9:       ; %bb.0:2813; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2814; GFX9-NEXT:    global_load_dword v6, v[0:1], off2815; GFX9-NEXT:    global_load_dword v7, v[2:3], off2816; GFX9-NEXT:    s_mov_b32 s4, 0x10304072817; GFX9-NEXT:    s_waitcnt vmcnt(0)2818; GFX9-NEXT:    v_perm_b32 v0, v7, v6, s42819; GFX9-NEXT:    global_store_dword v[4:5], v0, off2820; GFX9-NEXT:    s_waitcnt vmcnt(0)2821; GFX9-NEXT:    s_setpc_b64 s[30:31]2822  %vec1 = load <2 x i16>, ptr addrspace(1) %in0, align 42823  %vec2 = load <2 x i16>, ptr addrspace(1) %in1, align 42824  %v1e0 = extractelement <2 x i16> %vec1, i64 02825  %v1e1 = extractelement <2 x i16> %vec1, i64 12826  %v2e0 = extractelement <2 x i16> %vec2, i64 02827  %v2e1 = extractelement <2 x i16> %vec2, i64 12828 2829  %b0t0 = and i16 -256, %v2e12830  %b0t1 = lshr i16 %b0t0, 82831  %byte0 = zext i16 %b0t1 to i322832 2833  %b1t0 = and i16 255, %v2e02834  %b1t1 = zext i16 %b1t0 to i322835  %byte1 = shl i32 %b1t1, 82836 2837  %b2t0 = and i16 -256, %v1e12838  %b2t1 = lshr i16 %b2t0, 82839  %b2t2 = zext i16 %b2t1 to i322840  %byte2 = shl i32 %b2t2, 162841 2842  %b3t0 = and i16 -256, %v1e02843  %b3t1 = lshr i16 %b3t0, 82844  %b3t2 = zext i16 %b3t1 to i322845  %byte3 = shl i32 %b3t2, 242846 2847  %tmp0 = or i32 %byte0, %byte12848  %tmp1 = or i32 %tmp0, %byte22849  %res = or i32 %tmp1, %byte32850  store i32 %res, ptr addrspace(1) %out0, align 42851  ret void2852}2853 2854 2855declare i16 @llvm.fshr.i16(i16, i16, i16)2856 2857define hidden void @fshri16_8(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {2858; GFX10-LABEL: fshri16_8:2859; GFX10:       ; %bb.0:2860; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2861; GFX10-NEXT:    global_load_dword v6, v[0:1], off2862; GFX10-NEXT:    global_load_dword v7, v[2:3], off2863; GFX10-NEXT:    s_waitcnt vmcnt(0)2864; GFX10-NEXT:    v_perm_b32 v0, v7, v6, 0x304072865; GFX10-NEXT:    global_store_dword v[4:5], v0, off2866; GFX10-NEXT:    s_setpc_b64 s[30:31]2867;2868; GFX9-LABEL: fshri16_8:2869; GFX9:       ; %bb.0:2870; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2871; GFX9-NEXT:    global_load_dword v6, v[0:1], off2872; GFX9-NEXT:    global_load_dword v7, v[2:3], off2873; GFX9-NEXT:    s_mov_b32 s4, 0x304072874; GFX9-NEXT:    s_waitcnt vmcnt(0)2875; GFX9-NEXT:    v_perm_b32 v0, v7, v6, s42876; GFX9-NEXT:    global_store_dword v[4:5], v0, off2877; GFX9-NEXT:    s_waitcnt vmcnt(0)2878; GFX9-NEXT:    s_setpc_b64 s[30:31]2879  %vec1 = load <2 x i16>, ptr addrspace(1) %in0, align 42880  %vec2 = load <2 x i16>, ptr addrspace(1) %in1, align 42881  %v1e0 = extractelement <2 x i16> %vec1, i64 02882  %v1e1 = extractelement <2 x i16> %vec1, i64 12883  %v2e0 = extractelement <2 x i16> %vec2, i64 02884  %v2e1 = extractelement <2 x i16> %vec2, i64 12885 2886  %tmp01.0 = call i16 @llvm.fshr.i16(i16 %v2e0, i16 %v2e1, i16 8)2887  %byte01 = zext i16 %tmp01.0 to i322888 2889  %tmp23.0 = call i16 @llvm.fshr.i16(i16 %v1e0, i16 %v1e1, i16 8)2890  %tmp23.1 = zext i16 %tmp23.0 to i322891  %byte23 = shl i32 %tmp23.1, 162892  %res = or i32 %byte01, %byte232893  store i32 %res, ptr addrspace(1) %out0, align 42894  ret void2895}2896 2897define hidden void @fshri16_16(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {2898; GFX10-LABEL: fshri16_16:2899; GFX10:       ; %bb.0:2900; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2901; GFX10-NEXT:    global_load_dword v6, v[0:1], off2902; GFX10-NEXT:    global_load_dword v7, v[2:3], off2903; GFX10-NEXT:    s_waitcnt vmcnt(0)2904; GFX10-NEXT:    v_perm_b32 v0, v7, v6, 0x30207062905; GFX10-NEXT:    global_store_dword v[4:5], v0, off2906; GFX10-NEXT:    s_setpc_b64 s[30:31]2907;2908; GFX9-LABEL: fshri16_16:2909; GFX9:       ; %bb.0:2910; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2911; GFX9-NEXT:    global_load_dword v6, v[0:1], off2912; GFX9-NEXT:    global_load_dword v7, v[2:3], off2913; GFX9-NEXT:    s_mov_b32 s4, 0x30207062914; GFX9-NEXT:    s_waitcnt vmcnt(0)2915; GFX9-NEXT:    v_perm_b32 v0, v7, v6, s42916; GFX9-NEXT:    global_store_dword v[4:5], v0, off2917; GFX9-NEXT:    s_waitcnt vmcnt(0)2918; GFX9-NEXT:    s_setpc_b64 s[30:31]2919  %vec1 = load <2 x i16>, ptr addrspace(1) %in0, align 42920  %vec2 = load <2 x i16>, ptr addrspace(1) %in1, align 42921  %v1e0 = extractelement <2 x i16> %vec1, i64 02922  %v1e1 = extractelement <2 x i16> %vec1, i64 12923  %v2e0 = extractelement <2 x i16> %vec2, i64 02924  %v2e1 = extractelement <2 x i16> %vec2, i64 12925 2926  %tmp01.0 = call i16 @llvm.fshr.i16(i16 %v2e0, i16 %v2e1, i16 16)2927  %byte01 = zext i16 %tmp01.0 to i322928 2929  %tmp23.0 = call i16 @llvm.fshr.i16(i16 %v1e0, i16 %v1e1, i16 16)2930  %tmp23.1 = zext i16 %tmp23.0 to i322931  %byte23 = shl i32 %tmp23.1, 162932  %res = or i32 %byte01, %byte232933  store i32 %res, ptr addrspace(1) %out0, align 42934  ret void2935}2936 2937define hidden void @fshri16_24(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {2938; GFX10-LABEL: fshri16_24:2939; GFX10:       ; %bb.0:2940; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2941; GFX10-NEXT:    global_load_dword v6, v[0:1], off2942; GFX10-NEXT:    global_load_dword v7, v[2:3], off2943; GFX10-NEXT:    s_waitcnt vmcnt(0)2944; GFX10-NEXT:    v_perm_b32 v0, v7, v6, 0x304072945; GFX10-NEXT:    global_store_dword v[4:5], v0, off2946; GFX10-NEXT:    s_setpc_b64 s[30:31]2947;2948; GFX9-LABEL: fshri16_24:2949; GFX9:       ; %bb.0:2950; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2951; GFX9-NEXT:    global_load_dword v6, v[0:1], off2952; GFX9-NEXT:    global_load_dword v7, v[2:3], off2953; GFX9-NEXT:    s_mov_b32 s4, 0x304072954; GFX9-NEXT:    s_waitcnt vmcnt(0)2955; GFX9-NEXT:    v_perm_b32 v0, v7, v6, s42956; GFX9-NEXT:    global_store_dword v[4:5], v0, off2957; GFX9-NEXT:    s_waitcnt vmcnt(0)2958; GFX9-NEXT:    s_setpc_b64 s[30:31]2959  %vec1 = load <2 x i16>, ptr addrspace(1) %in0, align 42960  %vec2 = load <2 x i16>, ptr addrspace(1) %in1, align 42961  %v1e0 = extractelement <2 x i16> %vec1, i64 02962  %v1e1 = extractelement <2 x i16> %vec1, i64 12963  %v2e0 = extractelement <2 x i16> %vec2, i64 02964  %v2e1 = extractelement <2 x i16> %vec2, i64 12965 2966  %tmp01.0 = call i16 @llvm.fshr.i16(i16 %v2e0, i16 %v2e1, i16 24)2967  %byte01 = zext i16 %tmp01.0 to i322968 2969  %tmp23.0 = call i16 @llvm.fshr.i16(i16 %v1e0, i16 %v1e1, i16 24)2970  %tmp23.1 = zext i16 %tmp23.0 to i322971  %byte23 = shl i32 %tmp23.1, 162972  %res = or i32 %byte01, %byte232973  store i32 %res, ptr addrspace(1) %out0, align 42974  ret void2975}2976 2977define hidden void @fshri16_32(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {2978; GFX10-LABEL: fshri16_32:2979; GFX10:       ; %bb.0:2980; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2981; GFX10-NEXT:    global_load_dword v6, v[0:1], off2982; GFX10-NEXT:    global_load_dword v7, v[2:3], off2983; GFX10-NEXT:    s_waitcnt vmcnt(0)2984; GFX10-NEXT:    v_perm_b32 v0, v7, v6, 0x30207062985; GFX10-NEXT:    global_store_dword v[4:5], v0, off2986; GFX10-NEXT:    s_setpc_b64 s[30:31]2987;2988; GFX9-LABEL: fshri16_32:2989; GFX9:       ; %bb.0:2990; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2991; GFX9-NEXT:    global_load_dword v6, v[0:1], off2992; GFX9-NEXT:    global_load_dword v7, v[2:3], off2993; GFX9-NEXT:    s_mov_b32 s4, 0x30207062994; GFX9-NEXT:    s_waitcnt vmcnt(0)2995; GFX9-NEXT:    v_perm_b32 v0, v7, v6, s42996; GFX9-NEXT:    global_store_dword v[4:5], v0, off2997; GFX9-NEXT:    s_waitcnt vmcnt(0)2998; GFX9-NEXT:    s_setpc_b64 s[30:31]2999  %vec1 = load <2 x i16>, ptr addrspace(1) %in0, align 43000  %vec2 = load <2 x i16>, ptr addrspace(1) %in1, align 43001  %v1e0 = extractelement <2 x i16> %vec1, i64 03002  %v1e1 = extractelement <2 x i16> %vec1, i64 13003  %v2e0 = extractelement <2 x i16> %vec2, i64 03004  %v2e1 = extractelement <2 x i16> %vec2, i64 13005 3006  %tmp01.0 = call i16 @llvm.fshr.i16(i16 %v2e0, i16 %v2e1, i16 32)3007  %byte01 = zext i16 %tmp01.0 to i323008 3009  %tmp23.0 = call i16 @llvm.fshr.i16(i16 %v1e0, i16 %v1e1, i16 32)3010  %tmp23.1 = zext i16 %tmp23.0 to i323011  %byte23 = shl i32 %tmp23.1, 163012  %res = or i32 %byte01, %byte233013  store i32 %res, ptr addrspace(1) %out0, align 43014  ret void3015}3016 3017define hidden void @fshri16_88(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {3018; GFX10-LABEL: fshri16_88:3019; GFX10:       ; %bb.0:3020; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3021; GFX10-NEXT:    global_load_dword v6, v[0:1], off3022; GFX10-NEXT:    global_load_dword v7, v[2:3], off3023; GFX10-NEXT:    s_waitcnt vmcnt(0)3024; GFX10-NEXT:    v_perm_b32 v0, v7, v6, 0x304073025; GFX10-NEXT:    global_store_dword v[4:5], v0, off3026; GFX10-NEXT:    s_setpc_b64 s[30:31]3027;3028; GFX9-LABEL: fshri16_88:3029; GFX9:       ; %bb.0:3030; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3031; GFX9-NEXT:    global_load_dword v6, v[0:1], off3032; GFX9-NEXT:    global_load_dword v7, v[2:3], off3033; GFX9-NEXT:    s_mov_b32 s4, 0x304073034; GFX9-NEXT:    s_waitcnt vmcnt(0)3035; GFX9-NEXT:    v_perm_b32 v0, v7, v6, s43036; GFX9-NEXT:    global_store_dword v[4:5], v0, off3037; GFX9-NEXT:    s_waitcnt vmcnt(0)3038; GFX9-NEXT:    s_setpc_b64 s[30:31]3039  %vec1 = load <2 x i16>, ptr addrspace(1) %in0, align 43040  %vec2 = load <2 x i16>, ptr addrspace(1) %in1, align 43041  %v1e0 = extractelement <2 x i16> %vec1, i64 03042  %v1e1 = extractelement <2 x i16> %vec1, i64 13043  %v2e0 = extractelement <2 x i16> %vec2, i64 03044  %v2e1 = extractelement <2 x i16> %vec2, i64 13045 3046  %tmp01.0 = call i16 @llvm.fshr.i16(i16 %v2e0, i16 %v2e1, i16 88)3047  %byte01 = zext i16 %tmp01.0 to i323048 3049  %tmp23.0 = call i16 @llvm.fshr.i16(i16 %v1e0, i16 %v1e1, i16 88)3050  %tmp23.1 = zext i16 %tmp23.0 to i323051  %byte23 = shl i32 %tmp23.1, 163052  %res = or i32 %byte01, %byte233053  store i32 %res, ptr addrspace(1) %out0, align 43054  ret void3055}3056 3057declare i16 @llvm.fshl.i16(i16, i16, i16)3058 3059define hidden void @fshli16_1347(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {3060; GFX10-LABEL: fshli16_1347:3061; GFX10:       ; %bb.0:3062; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3063; GFX10-NEXT:    global_load_dword v6, v[0:1], off3064; GFX10-NEXT:    global_load_dword v7, v[2:3], off3065; GFX10-NEXT:    s_waitcnt vmcnt(0)3066; GFX10-NEXT:    v_perm_b32 v0, v7, v6, 0x304073067; GFX10-NEXT:    global_store_dword v[4:5], v0, off3068; GFX10-NEXT:    s_setpc_b64 s[30:31]3069;3070; GFX9-LABEL: fshli16_1347:3071; GFX9:       ; %bb.0:3072; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3073; GFX9-NEXT:    global_load_dword v6, v[0:1], off3074; GFX9-NEXT:    global_load_dword v7, v[2:3], off3075; GFX9-NEXT:    s_mov_b32 s4, 0x304073076; GFX9-NEXT:    s_waitcnt vmcnt(0)3077; GFX9-NEXT:    v_perm_b32 v0, v7, v6, s43078; GFX9-NEXT:    global_store_dword v[4:5], v0, off3079; GFX9-NEXT:    s_waitcnt vmcnt(0)3080; GFX9-NEXT:    s_setpc_b64 s[30:31]3081  %vec1 = load <2 x i16>, ptr addrspace(1) %in0, align 43082  %vec2 = load <2 x i16>, ptr addrspace(1) %in1, align 43083  %v1e0 = extractelement <2 x i16> %vec1, i64 03084  %v1e1 = extractelement <2 x i16> %vec1, i64 13085  %v2e0 = extractelement <2 x i16> %vec2, i64 03086  %v2e1 = extractelement <2 x i16> %vec2, i64 13087 3088  %tmp01.0 = call i16 @llvm.fshl.i16(i16 %v2e0, i16 %v2e1, i16 8)3089  %byte01 = zext i16 %tmp01.0 to i323090 3091  %tmp23.0 = call i16 @llvm.fshl.i16(i16 %v1e0, i16 %v1e1, i16 8)3092  %tmp23.1 = zext i16 %tmp23.0 to i323093  %byte23 = shl i32 %tmp23.1, 163094  %res = or i32 %byte01, %byte233095  store i32 %res, ptr addrspace(1) %out0, align 43096  ret void3097}3098 3099define hidden void @fshli16_16(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {3100; GFX10-LABEL: fshli16_16:3101; GFX10:       ; %bb.0:3102; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3103; GFX10-NEXT:    global_load_dword v6, v[0:1], off3104; GFX10-NEXT:    global_load_dword v7, v[2:3], off3105; GFX10-NEXT:    s_waitcnt vmcnt(0)3106; GFX10-NEXT:    v_perm_b32 v0, v7, v6, 0x10005043107; GFX10-NEXT:    global_store_dword v[4:5], v0, off3108; GFX10-NEXT:    s_setpc_b64 s[30:31]3109;3110; GFX9-LABEL: fshli16_16:3111; GFX9:       ; %bb.0:3112; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3113; GFX9-NEXT:    global_load_dword v6, v[0:1], off3114; GFX9-NEXT:    global_load_dword v7, v[2:3], off3115; GFX9-NEXT:    s_mov_b32 s4, 0x10005043116; GFX9-NEXT:    s_waitcnt vmcnt(0)3117; GFX9-NEXT:    v_perm_b32 v0, v7, v6, s43118; GFX9-NEXT:    global_store_dword v[4:5], v0, off3119; GFX9-NEXT:    s_waitcnt vmcnt(0)3120; GFX9-NEXT:    s_setpc_b64 s[30:31]3121  %vec1 = load <2 x i16>, ptr addrspace(1) %in0, align 43122  %vec2 = load <2 x i16>, ptr addrspace(1) %in1, align 43123  %v1e0 = extractelement <2 x i16> %vec1, i64 03124  %v1e1 = extractelement <2 x i16> %vec1, i64 13125  %v2e0 = extractelement <2 x i16> %vec2, i64 03126  %v2e1 = extractelement <2 x i16> %vec2, i64 13127 3128  %tmp01.0 = call i16 @llvm.fshl.i16(i16 %v2e0, i16 %v2e1, i16 16)3129  %byte01 = zext i16 %tmp01.0 to i323130 3131  %tmp23.0 = call i16 @llvm.fshl.i16(i16 %v1e0, i16 %v1e1, i16 16)3132  %tmp23.1 = zext i16 %tmp23.0 to i323133  %byte23 = shl i32 %tmp23.1, 163134  %res = or i32 %byte01, %byte233135  store i32 %res, ptr addrspace(1) %out0, align 43136  ret void3137}3138 3139define hidden void @fshli16_24(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {3140; GFX10-LABEL: fshli16_24:3141; GFX10:       ; %bb.0:3142; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3143; GFX10-NEXT:    global_load_dword v6, v[0:1], off3144; GFX10-NEXT:    global_load_dword v7, v[2:3], off3145; GFX10-NEXT:    s_waitcnt vmcnt(0)3146; GFX10-NEXT:    v_perm_b32 v0, v7, v6, 0x304073147; GFX10-NEXT:    global_store_dword v[4:5], v0, off3148; GFX10-NEXT:    s_setpc_b64 s[30:31]3149;3150; GFX9-LABEL: fshli16_24:3151; GFX9:       ; %bb.0:3152; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3153; GFX9-NEXT:    global_load_dword v6, v[0:1], off3154; GFX9-NEXT:    global_load_dword v7, v[2:3], off3155; GFX9-NEXT:    s_mov_b32 s4, 0x304073156; GFX9-NEXT:    s_waitcnt vmcnt(0)3157; GFX9-NEXT:    v_perm_b32 v0, v7, v6, s43158; GFX9-NEXT:    global_store_dword v[4:5], v0, off3159; GFX9-NEXT:    s_waitcnt vmcnt(0)3160; GFX9-NEXT:    s_setpc_b64 s[30:31]3161  %vec1 = load <2 x i16>, ptr addrspace(1) %in0, align 43162  %vec2 = load <2 x i16>, ptr addrspace(1) %in1, align 43163  %v1e0 = extractelement <2 x i16> %vec1, i64 03164  %v1e1 = extractelement <2 x i16> %vec1, i64 13165  %v2e0 = extractelement <2 x i16> %vec2, i64 03166  %v2e1 = extractelement <2 x i16> %vec2, i64 13167 3168  %tmp01.0 = call i16 @llvm.fshl.i16(i16 %v2e0, i16 %v2e1, i16 24)3169  %byte01 = zext i16 %tmp01.0 to i323170 3171  %tmp23.0 = call i16 @llvm.fshl.i16(i16 %v1e0, i16 %v1e1, i16 24)3172  %tmp23.1 = zext i16 %tmp23.0 to i323173  %byte23 = shl i32 %tmp23.1, 163174  %res = or i32 %byte01, %byte233175  store i32 %res, ptr addrspace(1) %out0, align 43176  ret void3177}3178 3179define hidden void @fshli16_32(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {3180; GFX10-LABEL: fshli16_32:3181; GFX10:       ; %bb.0:3182; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3183; GFX10-NEXT:    global_load_dword v6, v[0:1], off3184; GFX10-NEXT:    global_load_dword v7, v[2:3], off3185; GFX10-NEXT:    s_waitcnt vmcnt(0)3186; GFX10-NEXT:    v_perm_b32 v0, v7, v6, 0x10005043187; GFX10-NEXT:    global_store_dword v[4:5], v0, off3188; GFX10-NEXT:    s_setpc_b64 s[30:31]3189;3190; GFX9-LABEL: fshli16_32:3191; GFX9:       ; %bb.0:3192; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3193; GFX9-NEXT:    global_load_dword v6, v[0:1], off3194; GFX9-NEXT:    global_load_dword v7, v[2:3], off3195; GFX9-NEXT:    s_mov_b32 s4, 0x10005043196; GFX9-NEXT:    s_waitcnt vmcnt(0)3197; GFX9-NEXT:    v_perm_b32 v0, v7, v6, s43198; GFX9-NEXT:    global_store_dword v[4:5], v0, off3199; GFX9-NEXT:    s_waitcnt vmcnt(0)3200; GFX9-NEXT:    s_setpc_b64 s[30:31]3201  %vec1 = load <2 x i16>, ptr addrspace(1) %in0, align 43202  %vec2 = load <2 x i16>, ptr addrspace(1) %in1, align 43203  %v1e0 = extractelement <2 x i16> %vec1, i64 03204  %v1e1 = extractelement <2 x i16> %vec1, i64 13205  %v2e0 = extractelement <2 x i16> %vec2, i64 03206  %v2e1 = extractelement <2 x i16> %vec2, i64 13207 3208  %tmp01.0 = call i16 @llvm.fshl.i16(i16 %v2e0, i16 %v2e1, i16 32)3209  %byte01 = zext i16 %tmp01.0 to i323210 3211  %tmp23.0 = call i16 @llvm.fshl.i16(i16 %v1e0, i16 %v1e1, i16 32)3212  %tmp23.1 = zext i16 %tmp23.0 to i323213  %byte23 = shl i32 %tmp23.1, 163214  %res = or i32 %byte01, %byte233215  store i32 %res, ptr addrspace(1) %out0, align 43216  ret void3217}3218 3219define hidden void @fshli16_88(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {3220; GFX10-LABEL: fshli16_88:3221; GFX10:       ; %bb.0:3222; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3223; GFX10-NEXT:    global_load_dword v6, v[0:1], off3224; GFX10-NEXT:    global_load_dword v7, v[2:3], off3225; GFX10-NEXT:    s_waitcnt vmcnt(0)3226; GFX10-NEXT:    v_perm_b32 v0, v7, v6, 0x304073227; GFX10-NEXT:    global_store_dword v[4:5], v0, off3228; GFX10-NEXT:    s_setpc_b64 s[30:31]3229;3230; GFX9-LABEL: fshli16_88:3231; GFX9:       ; %bb.0:3232; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3233; GFX9-NEXT:    global_load_dword v6, v[0:1], off3234; GFX9-NEXT:    global_load_dword v7, v[2:3], off3235; GFX9-NEXT:    s_mov_b32 s4, 0x304073236; GFX9-NEXT:    s_waitcnt vmcnt(0)3237; GFX9-NEXT:    v_perm_b32 v0, v7, v6, s43238; GFX9-NEXT:    global_store_dword v[4:5], v0, off3239; GFX9-NEXT:    s_waitcnt vmcnt(0)3240; GFX9-NEXT:    s_setpc_b64 s[30:31]3241  %vec1 = load <2 x i16>, ptr addrspace(1) %in0, align 43242  %vec2 = load <2 x i16>, ptr addrspace(1) %in1, align 43243  %v1e0 = extractelement <2 x i16> %vec1, i64 03244  %v1e1 = extractelement <2 x i16> %vec1, i64 13245  %v2e0 = extractelement <2 x i16> %vec2, i64 03246  %v2e1 = extractelement <2 x i16> %vec2, i64 13247 3248  %tmp01.0 = call i16 @llvm.fshl.i16(i16 %v2e0, i16 %v2e1, i16 88)3249  %byte01 = zext i16 %tmp01.0 to i323250 3251  %tmp23.0 = call i16 @llvm.fshl.i16(i16 %v1e0, i16 %v1e1, i16 88)3252  %tmp23.1 = zext i16 %tmp23.0 to i323253  %byte23 = shl i32 %tmp23.1, 163254  %res = or i32 %byte01, %byte233255  store i32 %res, ptr addrspace(1) %out0, align 43256  ret void3257}3258 3259define hidden void @shlbase(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0, i32 %base) {3260; GFX10-LABEL: shlbase:3261; GFX10:       ; %bb.0:3262; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3263; GFX10-NEXT:    global_load_dword v7, v[0:1], off3264; GFX10-NEXT:    global_load_dword v8, v[2:3], off3265; GFX10-NEXT:    v_add_nc_u32_e32 v0, 16, v63266; GFX10-NEXT:    v_add_nc_u32_e32 v1, 24, v63267; GFX10-NEXT:    v_add_nc_u32_e32 v3, 8, v63268; GFX10-NEXT:    s_waitcnt vmcnt(1)3269; GFX10-NEXT:    v_and_b32_e32 v2, 0xff, v73270; GFX10-NEXT:    v_lshlrev_b32_sdwa v0, v0, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_33271; GFX10-NEXT:    s_waitcnt vmcnt(0)3272; GFX10-NEXT:    v_lshlrev_b32_sdwa v1, v1, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_33273; GFX10-NEXT:    v_lshl_or_b32 v2, v2, v3, v23274; GFX10-NEXT:    v_or3_b32 v0, v2, v0, v13275; GFX10-NEXT:    global_store_dword v[4:5], v0, off3276; GFX10-NEXT:    s_setpc_b64 s[30:31]3277;3278; GFX9-LABEL: shlbase:3279; GFX9:       ; %bb.0:3280; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3281; GFX9-NEXT:    global_load_dword v7, v[0:1], off3282; GFX9-NEXT:    global_load_dword v8, v[2:3], off3283; GFX9-NEXT:    v_add_u32_e32 v0, 8, v63284; GFX9-NEXT:    v_add_u32_e32 v1, 16, v63285; GFX9-NEXT:    v_add_u32_e32 v2, 24, v63286; GFX9-NEXT:    s_waitcnt vmcnt(1)3287; GFX9-NEXT:    v_and_b32_e32 v3, 0xff, v73288; GFX9-NEXT:    v_lshlrev_b32_sdwa v1, v1, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_33289; GFX9-NEXT:    s_waitcnt vmcnt(0)3290; GFX9-NEXT:    v_lshlrev_b32_sdwa v2, v2, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_33291; GFX9-NEXT:    v_lshl_or_b32 v0, v3, v0, v33292; GFX9-NEXT:    v_or3_b32 v0, v0, v1, v23293; GFX9-NEXT:    global_store_dword v[4:5], v0, off3294; GFX9-NEXT:    s_waitcnt vmcnt(0)3295; GFX9-NEXT:    s_setpc_b64 s[30:31]3296  %vec1 = load <4 x i8>, ptr addrspace(1) %in0, align 43297  %vec2 = load <4 x i8>, ptr addrspace(1) %in1, align 43298  %v1e0 = extractelement <4 x i8> %vec1, i64 03299  %zv1e0 = zext i8 %v1e0 to i323300  %b8 = add i32 %base, 83301  %byte1 = shl i32 %zv1e0, %b83302 3303  %v1e3 = extractelement <4 x i8> %vec1, i64 33304  %zv1e3 = zext i8 %v1e3 to i323305  %b16 = add i32 %base, 163306  %byte2 = shl i32 %zv1e3, %b163307  %v2e3 = extractelement <4 x i8> %vec2, i64 33308  %zv2e3 = zext i8 %v2e3 to i323309  %b24 = add i32 %base, 243310  %byte3 = shl i32 %zv2e3, %b243311 3312  %tmp0 = or i32 %zv1e0, %byte13313  %tmp1 = or i32 %tmp0, %byte23314  %res = or i32 %tmp1, %byte33315  store i32 %res, ptr addrspace(1) %out0, align 43316  ret void3317}3318 3319; TODO -- lower into v_perm3320define hidden void @extractbase(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0, i64 %base) {3321; GFX10-LABEL: extractbase:3322; GFX10:       ; %bb.0:3323; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3324; GFX10-NEXT:    global_load_dword v7, v[0:1], off3325; GFX10-NEXT:    global_load_dword v8, v[2:3], off3326; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 3, v63327; GFX10-NEXT:    v_add_nc_u32_e32 v1, 24, v03328; GFX10-NEXT:    s_waitcnt vmcnt(1)3329; GFX10-NEXT:    v_bfe_u32 v2, v7, v1, 83330; GFX10-NEXT:    v_bfe_u32 v0, v7, v0, 83331; GFX10-NEXT:    s_waitcnt vmcnt(0)3332; GFX10-NEXT:    v_lshrrev_b32_sdwa v1, v1, v8 dst_sel:BYTE_3 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD3333; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v23334; GFX10-NEXT:    v_lshl_or_b32 v0, v0, 8, v03335; GFX10-NEXT:    v_or3_b32 v0, v0, v2, v13336; GFX10-NEXT:    global_store_dword v[4:5], v0, off3337; GFX10-NEXT:    s_setpc_b64 s[30:31]3338;3339; GFX9-LABEL: extractbase:3340; GFX9:       ; %bb.0:3341; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3342; GFX9-NEXT:    global_load_dword v7, v[0:1], off3343; GFX9-NEXT:    global_load_dword v8, v[2:3], off3344; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 3, v63345; GFX9-NEXT:    v_add_u32_e32 v1, 24, v03346; GFX9-NEXT:    s_waitcnt vmcnt(1)3347; GFX9-NEXT:    v_bfe_u32 v0, v7, v0, 83348; GFX9-NEXT:    v_bfe_u32 v2, v7, v1, 83349; GFX9-NEXT:    s_waitcnt vmcnt(0)3350; GFX9-NEXT:    v_lshrrev_b32_sdwa v1, v1, v8 dst_sel:BYTE_3 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD3351; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v23352; GFX9-NEXT:    v_lshl_or_b32 v0, v0, 8, v03353; GFX9-NEXT:    v_or3_b32 v0, v0, v2, v13354; GFX9-NEXT:    global_store_dword v[4:5], v0, off3355; GFX9-NEXT:    s_waitcnt vmcnt(0)3356; GFX9-NEXT:    s_setpc_b64 s[30:31]3357  %vec1 = load <4 x i8>, ptr addrspace(1) %in0, align 43358  %vec2 = load <4 x i8>, ptr addrspace(1) %in1, align 43359  %v1b = extractelement <4 x i8> %vec1, i64 %base3360  %zv1b = zext i8 %v1b to i323361  %byte1 = shl i32 %zv1b, 83362 3363  %b3 = add i64 %base, 33364  %v1b3 = extractelement <4 x i8> %vec1, i64 %b33365  %zv1b3 = zext i8 %v1b3 to i323366  %byte2 = shl i32 %zv1b3, 163367  %v2b3 = extractelement <4 x i8> %vec2, i64 %b33368  %zv2b3 = zext i8 %v2b3 to i323369  %byte3 = shl i32 %zv2b3, 243370 3371  %tmp0 = or i32 %zv1b, %byte13372  %tmp1 = or i32 %tmp0, %byte23373  %res = or i32 %tmp1, %byte33374  store i32 %res, ptr addrspace(1) %out0, align 43375  ret void3376}3377 3378define hidden void @extract_hilo(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {3379; GFX10-LABEL: extract_hilo:3380; GFX10:       ; %bb.0:3381; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3382; GFX10-NEXT:    global_load_dword v6, v[2:3], off3383; GFX10-NEXT:    global_load_dword v7, v[0:1], off offset:43384; GFX10-NEXT:    s_waitcnt vmcnt(0)3385; GFX10-NEXT:    v_perm_b32 v0, v7, v6, 0x30605053386; GFX10-NEXT:    global_store_dword v[4:5], v0, off3387; GFX10-NEXT:    s_setpc_b64 s[30:31]3388;3389; GFX9-LABEL: extract_hilo:3390; GFX9:       ; %bb.0:3391; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3392; GFX9-NEXT:    global_load_dword v6, v[2:3], off3393; GFX9-NEXT:    global_load_dword v7, v[0:1], off offset:43394; GFX9-NEXT:    s_mov_b32 s4, 0x30605053395; GFX9-NEXT:    s_waitcnt vmcnt(0)3396; GFX9-NEXT:    v_perm_b32 v0, v7, v6, s43397; GFX9-NEXT:    global_store_dword v[4:5], v0, off3398; GFX9-NEXT:    s_waitcnt vmcnt(0)3399; GFX9-NEXT:    s_setpc_b64 s[30:31]3400  %vec1 = load <8 x i8>, ptr addrspace(1) %in0, align 43401  %vec2 = load <8 x i8>, ptr addrspace(1) %in1, align 43402  %v1e5 = extractelement <8 x i8> %vec1, i64 53403  %zv1e5 = zext i8 %v1e5 to i323404  %byte1 = shl i32 %zv1e5, 83405 3406  %v1e6 = extractelement <8 x i8> %vec1, i64 63407  %zv1e6 = zext i8 %v1e6 to i323408  %byte2 = shl i32 %zv1e6, 163409  %v2e3 = extractelement <8 x i8> %vec2, i64 33410  %zv2e3 = zext i8 %v2e3 to i323411  %byte3 = shl i32 %zv2e3, 243412 3413  %tmp0 = or i32 %zv1e5, %byte13414  %tmp1 = or i32 %tmp0, %byte23415  %res = or i32 %tmp1, %byte33416  store i32 %res, ptr addrspace(1) %out0, align 43417  ret void3418}3419 3420define hidden void @extract_lohi(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {3421; GFX10-LABEL: extract_lohi:3422; GFX10:       ; %bb.0:3423; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3424; GFX10-NEXT:    global_load_dword v6, v[2:3], off offset:43425; GFX10-NEXT:    global_load_dword v7, v[0:1], off3426; GFX10-NEXT:    s_waitcnt vmcnt(0)3427; GFX10-NEXT:    v_perm_b32 v0, v7, v6, 0x704043428; GFX10-NEXT:    global_store_dword v[4:5], v0, off3429; GFX10-NEXT:    s_setpc_b64 s[30:31]3430;3431; GFX9-LABEL: extract_lohi:3432; GFX9:       ; %bb.0:3433; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3434; GFX9-NEXT:    global_load_dword v6, v[2:3], off offset:43435; GFX9-NEXT:    global_load_dword v7, v[0:1], off3436; GFX9-NEXT:    s_mov_b32 s4, 0x704043437; GFX9-NEXT:    s_waitcnt vmcnt(0)3438; GFX9-NEXT:    v_perm_b32 v0, v7, v6, s43439; GFX9-NEXT:    global_store_dword v[4:5], v0, off3440; GFX9-NEXT:    s_waitcnt vmcnt(0)3441; GFX9-NEXT:    s_setpc_b64 s[30:31]3442  %vec1 = load <8 x i8>, ptr addrspace(1) %in0, align 43443  %vec2 = load <8 x i8>, ptr addrspace(1) %in1, align 43444  %v1e0 = extractelement <8 x i8> %vec1, i64 03445  %zv1e0 = zext i8 %v1e0 to i323446  %byte1 = shl i32 %zv1e0, 83447 3448  %v1e3 = extractelement <8 x i8> %vec1, i64 33449  %zv1e3 = zext i8 %v1e3 to i323450  %byte2 = shl i32 %zv1e3, 163451  %v2e4 = extractelement <8 x i8> %vec2, i64 43452  %zv2e4 = zext i8 %v2e4 to i323453  %byte3 = shl i32 %zv2e4, 243454 3455  %tmp0 = or i32 %zv1e0, %byte13456  %tmp1 = or i32 %tmp0, %byte23457  %res = or i32 %tmp1, %byte33458  store i32 %res, ptr addrspace(1) %out0, align 43459  ret void3460}3461 3462define hidden void @extract_hihi(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {3463; GFX10-LABEL: extract_hihi:3464; GFX10:       ; %bb.0:3465; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3466; GFX10-NEXT:    global_load_dword v6, v[2:3], off offset:43467; GFX10-NEXT:    global_load_dword v7, v[0:1], off offset:43468; GFX10-NEXT:    s_waitcnt vmcnt(0)3469; GFX10-NEXT:    v_perm_b32 v0, v7, v6, 0x20705053470; GFX10-NEXT:    global_store_dword v[4:5], v0, off3471; GFX10-NEXT:    s_setpc_b64 s[30:31]3472;3473; GFX9-LABEL: extract_hihi:3474; GFX9:       ; %bb.0:3475; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3476; GFX9-NEXT:    global_load_dword v6, v[2:3], off offset:43477; GFX9-NEXT:    global_load_dword v7, v[0:1], off offset:43478; GFX9-NEXT:    s_mov_b32 s4, 0x20705053479; GFX9-NEXT:    s_waitcnt vmcnt(0)3480; GFX9-NEXT:    v_perm_b32 v0, v7, v6, s43481; GFX9-NEXT:    global_store_dword v[4:5], v0, off3482; GFX9-NEXT:    s_waitcnt vmcnt(0)3483; GFX9-NEXT:    s_setpc_b64 s[30:31]3484  %vec1 = load <8 x i8>, ptr addrspace(1) %in0, align 43485  %vec2 = load <8 x i8>, ptr addrspace(1) %in1, align 43486  %v1e5 = extractelement <8 x i8> %vec1, i64 53487  %zv1e5 = zext i8 %v1e5 to i323488  %byte1 = shl i32 %zv1e5, 83489 3490  %v1e7 = extractelement <8 x i8> %vec1, i64 73491  %zv1e7 = zext i8 %v1e7 to i323492  %byte2 = shl i32 %zv1e7, 163493  %v2e6 = extractelement <8 x i8> %vec2, i64 63494  %zv2e6 = zext i8 %v2e6 to i323495  %byte3 = shl i32 %zv2e6, 243496 3497  %tmp0 = or i32 %zv1e5, %byte13498  %tmp1 = or i32 %tmp0, %byte23499  %res = or i32 %tmp1, %byte33500  store i32 %res, ptr addrspace(1) %out0, align 43501  ret void3502}3503 3504define hidden void @extract_v8i8(ptr addrspace(1) %in0, ptr addrspace(1) %out0) {3505; GFX10-LABEL: extract_v8i8:3506; GFX10:       ; %bb.0:3507; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3508; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off3509; GFX10-NEXT:    s_waitcnt vmcnt(0)3510; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x10704043511; GFX10-NEXT:    global_store_dword v[2:3], v0, off3512; GFX10-NEXT:    s_setpc_b64 s[30:31]3513;3514; GFX9-LABEL: extract_v8i8:3515; GFX9:       ; %bb.0:3516; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3517; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off3518; GFX9-NEXT:    s_mov_b32 s4, 0x10704043519; GFX9-NEXT:    s_waitcnt vmcnt(0)3520; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s43521; GFX9-NEXT:    global_store_dword v[2:3], v0, off3522; GFX9-NEXT:    s_waitcnt vmcnt(0)3523; GFX9-NEXT:    s_setpc_b64 s[30:31]3524  %vec1 = load <8 x i8>, ptr addrspace(1) %in0, align 43525  %v1e4 = extractelement <8 x i8> %vec1, i64 43526  %zv1e4 = zext i8 %v1e4 to i323527  %byte1 = shl i32 %zv1e4, 83528 3529  %v1e7 = extractelement <8 x i8> %vec1, i64 73530  %zv1e7 = zext i8 %v1e7 to i323531  %byte2 = shl i32 %zv1e7, 163532  %v2e1 = extractelement <8 x i8> %vec1, i64 13533  %zv2e1 = zext i8 %v2e1 to i323534  %byte3 = shl i32 %zv2e1, 243535 3536  %tmp0 = or i32 %zv1e4, %byte13537  %tmp1 = or i32 %tmp0, %byte23538  %res = or i32 %tmp1, %byte33539  store i32 %res, ptr addrspace(1) %out0, align 43540  ret void3541}3542 3543define hidden void @extract_v256i8(ptr addrspace(1) %in0, ptr addrspace(1) %out0) {3544; GFX10-LABEL: extract_v256i8:3545; GFX10:       ; %bb.0:3546; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3547; GFX10-NEXT:    global_load_dword v0, v[0:1], off offset:2523548; GFX10-NEXT:    s_waitcnt vmcnt(0)3549; GFX10-NEXT:    v_perm_b32 v0, v0, v0, 0x60507073550; GFX10-NEXT:    global_store_dword v[2:3], v0, off3551; GFX10-NEXT:    s_setpc_b64 s[30:31]3552;3553; GFX9-LABEL: extract_v256i8:3554; GFX9:       ; %bb.0:3555; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3556; GFX9-NEXT:    global_load_dword v0, v[0:1], off offset:2523557; GFX9-NEXT:    s_mov_b32 s4, 0x60507073558; GFX9-NEXT:    s_waitcnt vmcnt(0)3559; GFX9-NEXT:    v_perm_b32 v0, v0, v0, s43560; GFX9-NEXT:    global_store_dword v[2:3], v0, off3561; GFX9-NEXT:    s_waitcnt vmcnt(0)3562; GFX9-NEXT:    s_setpc_b64 s[30:31]3563  %vec1 = load <256 x i8>, ptr addrspace(1) %in0, align 43564  %v1e4 = extractelement <256 x i8> %vec1, i64 2553565  %zv1e4 = zext i8 %v1e4 to i323566  %byte1 = shl i32 %zv1e4, 83567 3568  %v1e7 = extractelement <256 x i8> %vec1, i64 2533569  %zv1e7 = zext i8 %v1e7 to i323570  %byte2 = shl i32 %zv1e7, 163571  %v2e1 = extractelement <256 x i8> %vec1, i64 2543572  %zv2e1 = zext i8 %v2e1 to i323573  %byte3 = shl i32 %zv2e1, 243574 3575  %tmp0 = or i32 %zv1e4, %byte13576  %tmp1 = or i32 %tmp0, %byte23577  %res = or i32 %tmp1, %byte33578  store i32 %res, ptr addrspace(1) %out0, align 43579  ret void3580}3581 3582; TODO : support this pattern3583define hidden void @extract_3src(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {3584; GFX10-LABEL: extract_3src:3585; GFX10:       ; %bb.0:3586; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3587; GFX10-NEXT:    global_load_dwordx2 v[6:7], v[0:1], off3588; GFX10-NEXT:    global_load_dword v8, v[2:3], off offset:43589; GFX10-NEXT:    s_waitcnt vmcnt(1)3590; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 8, v73591; GFX10-NEXT:    s_waitcnt vmcnt(0)3592; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 8, v83593; GFX10-NEXT:    v_and_b32_e32 v2, 0xff, v63594; GFX10-NEXT:    v_and_b32_e32 v0, 0xff0000, v03595; GFX10-NEXT:    v_and_b32_e32 v1, 0xff000000, v13596; GFX10-NEXT:    v_lshl_or_b32 v2, v2, 8, v23597; GFX10-NEXT:    v_or3_b32 v0, v2, v0, v13598; GFX10-NEXT:    global_store_dword v[4:5], v0, off3599; GFX10-NEXT:    s_setpc_b64 s[30:31]3600;3601; GFX9-LABEL: extract_3src:3602; GFX9:       ; %bb.0:3603; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3604; GFX9-NEXT:    global_load_dwordx2 v[6:7], v[0:1], off3605; GFX9-NEXT:    global_load_dword v8, v[2:3], off offset:43606; GFX9-NEXT:    s_waitcnt vmcnt(1)3607; GFX9-NEXT:    v_and_b32_e32 v0, 0xff, v63608; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 8, v73609; GFX9-NEXT:    s_waitcnt vmcnt(0)3610; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 8, v83611; GFX9-NEXT:    v_and_b32_e32 v1, 0xff0000, v13612; GFX9-NEXT:    v_and_b32_e32 v2, 0xff000000, v23613; GFX9-NEXT:    v_lshl_or_b32 v0, v0, 8, v03614; GFX9-NEXT:    v_or3_b32 v0, v0, v1, v23615; GFX9-NEXT:    global_store_dword v[4:5], v0, off3616; GFX9-NEXT:    s_waitcnt vmcnt(0)3617; GFX9-NEXT:    s_setpc_b64 s[30:31]3618  %vec1 = load <8 x i8>, ptr addrspace(1) %in0, align 43619  %vec2 = load <8 x i8>, ptr addrspace(1) %in1, align 43620  %v1e0 = extractelement <8 x i8> %vec1, i64 03621  %zv1e0 = zext i8 %v1e0 to i323622  %byte1 = shl i32 %zv1e0, 83623 3624  %v1e5 = extractelement <8 x i8> %vec1, i64 53625  %zv1e5 = zext i8 %v1e5 to i323626  %byte2 = shl i32 %zv1e5, 163627  %v2e6 = extractelement <8 x i8> %vec2, i64 63628  %zv2e6 = zext i8 %v2e6 to i323629  %byte3 = shl i32 %zv2e6, 243630 3631  %tmp0 = or i32 %zv1e0, %byte13632  %tmp1 = or i32 %tmp0, %byte23633  %res = or i32 %tmp1, %byte33634  store i32 %res, ptr addrspace(1) %out0, align 43635  ret void3636}3637 3638; Should not result in crash3639define hidden void @extract_v6i16(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {3640; GFX10-LABEL: extract_v6i16:3641; GFX10:       ; %bb.0:3642; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3643; GFX10-NEXT:    s_clause 0x33644; GFX10-NEXT:    global_load_ushort v2, v[0:1], off offset:63645; GFX10-NEXT:    global_load_ushort v3, v[0:1], off3646; GFX10-NEXT:    global_load_ushort v8, v[0:1], off offset:23647; GFX10-NEXT:    global_load_ushort v9, v[0:1], off offset:43648; GFX10-NEXT:    s_waitcnt vmcnt(1)3649; GFX10-NEXT:    v_lshl_or_b32 v0, v8, 16, v33650; GFX10-NEXT:    s_waitcnt vmcnt(0)3651; GFX10-NEXT:    v_lshl_or_b32 v1, v2, 16, v93652; GFX10-NEXT:    global_store_dword v[4:5], v0, off3653; GFX10-NEXT:    global_store_dword v[6:7], v1, off3654; GFX10-NEXT:    s_setpc_b64 s[30:31]3655;3656; GFX9-LABEL: extract_v6i16:3657; GFX9:       ; %bb.0:3658; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3659; GFX9-NEXT:    global_load_ushort v2, v[0:1], off offset:43660; GFX9-NEXT:    global_load_ushort v3, v[0:1], off offset:63661; GFX9-NEXT:    global_load_ushort v8, v[0:1], off3662; GFX9-NEXT:    global_load_ushort v9, v[0:1], off offset:23663; GFX9-NEXT:    s_waitcnt vmcnt(2)3664; GFX9-NEXT:    v_lshl_or_b32 v0, v3, 16, v23665; GFX9-NEXT:    s_waitcnt vmcnt(0)3666; GFX9-NEXT:    v_lshl_or_b32 v1, v9, 16, v83667; GFX9-NEXT:    global_store_dword v[4:5], v1, off3668; GFX9-NEXT:    global_store_dword v[6:7], v0, off3669; GFX9-NEXT:    s_waitcnt vmcnt(0)3670; GFX9-NEXT:    s_setpc_b64 s[30:31]3671  %vec = load <6 x i16>, ptr addrspace(1) %in0, align 23672  %el0 = extractelement <6 x i16> %vec, i32 03673  %el1 = extractelement <6 x i16> %vec, i32 13674  %el2 = extractelement <6 x i16> %vec, i32 23675  %el3 = extractelement <6 x i16> %vec, i32 33676  %z0 = zext i16 %el0 to i323677  %z1 = zext i16 %el1 to i323678  %s1 = shl nuw i32 %z1, 163679  %o0 = or i32 %s1, %z03680  %z2 = zext i16 %el2 to i323681  %z3 = zext i16 %el3 to i323682  %s3 = shl nuw i32 %z3, 163683  %o1 = or i32 %z2, %s33684 3685  store i32 %o0, ptr addrspace(1) %out0, align 43686  store i32 %o1, ptr addrspace(1) %out1, align 43687  ret void3688}3689 3690 3691; Should not result in crash3692define hidden void @extract_v7i16(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {3693; GFX10-LABEL: extract_v7i16:3694; GFX10:       ; %bb.0:3695; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3696; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off3697; GFX10-NEXT:    s_waitcnt vmcnt(0)3698; GFX10-NEXT:    global_store_dword v[4:5], v0, off3699; GFX10-NEXT:    global_store_dword v[6:7], v1, off3700; GFX10-NEXT:    s_setpc_b64 s[30:31]3701;3702; GFX9-LABEL: extract_v7i16:3703; GFX9:       ; %bb.0:3704; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3705; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off3706; GFX9-NEXT:    s_waitcnt vmcnt(0)3707; GFX9-NEXT:    global_store_dword v[4:5], v0, off3708; GFX9-NEXT:    global_store_dword v[6:7], v1, off3709; GFX9-NEXT:    s_waitcnt vmcnt(0)3710; GFX9-NEXT:    s_setpc_b64 s[30:31]3711  %vec = load <7 x i16>, ptr addrspace(1) %in0, align 23712  %el0 = extractelement <7 x i16> %vec, i32 03713  %el1 = extractelement <7 x i16> %vec, i32 13714  %el2 = extractelement <7 x i16> %vec, i32 23715  %el3 = extractelement <7 x i16> %vec, i32 33716  %z0 = zext i16 %el0 to i323717  %z1 = zext i16 %el1 to i323718  %s1 = shl nuw i32 %z1, 163719  %o0 = or i32 %s1, %z03720  %z2 = zext i16 %el2 to i323721  %z3 = zext i16 %el3 to i323722  %s3 = shl nuw i32 %z3, 163723  %o1 = or i32 %z2, %s33724 3725  store i32 %o0, ptr addrspace(1) %out0, align 43726  store i32 %o1, ptr addrspace(1) %out1, align 43727  ret void3728}3729 3730; Should not result in crash3731define hidden void @extract_v13i8(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {3732; GFX10-LABEL: extract_v13i8:3733; GFX10:       ; %bb.0:3734; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3735; GFX10-NEXT:    s_clause 0x13736; GFX10-NEXT:    global_load_dwordx2 v[2:3], v[0:1], off3737; GFX10-NEXT:    global_load_ushort v8, v[0:1], off offset:83738; GFX10-NEXT:    s_waitcnt vmcnt(1)3739; GFX10-NEXT:    v_bfe_u32 v0, v2, 8, 83740; GFX10-NEXT:    s_waitcnt vmcnt(0)3741; GFX10-NEXT:    v_and_b32_e32 v1, 0xff, v83742; GFX10-NEXT:    v_perm_b32 v0, v0, v2, 0x5040c003743; GFX10-NEXT:    v_perm_b32 v1, v1, v3, 0x5040c033744; GFX10-NEXT:    global_store_dword v[4:5], v0, off3745; GFX10-NEXT:    global_store_dword v[6:7], v1, off3746; GFX10-NEXT:    s_setpc_b64 s[30:31]3747;3748; GFX9-LABEL: extract_v13i8:3749; GFX9:       ; %bb.0:3750; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3751; GFX9-NEXT:    global_load_dwordx2 v[2:3], v[0:1], off3752; GFX9-NEXT:    global_load_ushort v8, v[0:1], off offset:83753; GFX9-NEXT:    s_mov_b32 s4, 0x5040c003754; GFX9-NEXT:    s_mov_b32 s5, 0x5040c033755; GFX9-NEXT:    s_waitcnt vmcnt(1)3756; GFX9-NEXT:    v_bfe_u32 v0, v2, 8, 83757; GFX9-NEXT:    s_waitcnt vmcnt(0)3758; GFX9-NEXT:    v_and_b32_e32 v1, 0xff, v83759; GFX9-NEXT:    v_perm_b32 v0, v0, v2, s43760; GFX9-NEXT:    v_perm_b32 v1, v1, v3, s53761; GFX9-NEXT:    global_store_dword v[4:5], v0, off3762; GFX9-NEXT:    global_store_dword v[6:7], v1, off3763; GFX9-NEXT:    s_waitcnt vmcnt(0)3764; GFX9-NEXT:    s_setpc_b64 s[30:31]3765  %vec = load <13 x i8>, ptr addrspace(1) %in0, align 23766  %el0 = extractelement <13 x i8> %vec, i32 03767  %el1 = extractelement <13 x i8> %vec, i32 13768  %el2 = extractelement <13 x i8> %vec, i32 73769  %el3 = extractelement <13 x i8> %vec, i32 83770  %z0 = zext i8 %el0 to i323771  %z1 = zext i8 %el1 to i323772  %s1 = shl nuw i32 %z1, 163773  %o0 = or i32 %s1, %z03774  %z2 = zext i8 %el2 to i323775  %z3 = zext i8 %el3 to i323776  %s3 = shl nuw i32 %z3, 163777  %o1 = or i32 %z2, %s33778 3779  store i32 %o0, ptr addrspace(1) %out0, align 43780  store i32 %o1, ptr addrspace(1) %out1, align 43781  ret void3782}3783 3784; Should not result in crash3785define hidden void @extract_v13i64(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0, ptr addrspace(1) %out1) {3786; GFX10-LABEL: extract_v13i64:3787; GFX10:       ; %bb.0:3788; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3789; GFX10-NEXT:    s_clause 0x23790; GFX10-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:483791; GFX10-NEXT:    global_load_dwordx4 v[11:14], v[0:1], off3792; GFX10-NEXT:    global_load_dwordx4 v[14:17], v[0:1], off offset:643793; GFX10-NEXT:    ; kill: killed $vgpr0 killed $vgpr13794; GFX10-NEXT:    s_waitcnt vmcnt(1)3795; GFX10-NEXT:    v_perm_b32 v0, v12, v13, 0x10005043796; GFX10-NEXT:    s_waitcnt vmcnt(0)3797; GFX10-NEXT:    v_perm_b32 v1, v10, v14, 0x10005043798; GFX10-NEXT:    global_store_dword v[4:5], v0, off3799; GFX10-NEXT:    global_store_dword v[6:7], v1, off3800; GFX10-NEXT:    s_setpc_b64 s[30:31]3801;3802; GFX9-LABEL: extract_v13i64:3803; GFX9:       ; %bb.0:3804; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3805; GFX9-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:483806; GFX9-NEXT:    global_load_dwordx4 v[11:14], v[0:1], off3807; GFX9-NEXT:    global_load_dwordx4 v[14:17], v[0:1], off offset:643808; GFX9-NEXT:    s_mov_b32 s4, 0x10005043809; GFX9-NEXT:    ; kill: killed $vgpr0 killed $vgpr13810; GFX9-NEXT:    s_waitcnt vmcnt(1)3811; GFX9-NEXT:    v_perm_b32 v0, v12, v13, s43812; GFX9-NEXT:    s_waitcnt vmcnt(0)3813; GFX9-NEXT:    v_perm_b32 v1, v10, v14, s43814; GFX9-NEXT:    global_store_dword v[4:5], v0, off3815; GFX9-NEXT:    global_store_dword v[6:7], v1, off3816; GFX9-NEXT:    s_waitcnt vmcnt(0)3817; GFX9-NEXT:    s_setpc_b64 s[30:31]3818  %vec = load <13 x i64>, ptr addrspace(1) %in0, align 23819  %el0 = extractelement <13 x i64> %vec, i32 03820  %el1 = extractelement <13 x i64> %vec, i32 13821  %el2 = extractelement <13 x i64> %vec, i32 73822  %el3 = extractelement <13 x i64> %vec, i32 83823  %el00 = lshr i64 %el0, 323824  %t0 = trunc i64 %el00 to i163825  %z0 = zext i16 %t0 to i323826  %z1 = trunc i64 %el1 to i323827  %s1 = shl nuw i32 %z1, 163828  %o0 = or i32 %s1, %z03829  %t2 = trunc i64 %el2 to i163830  %z2 = zext i16 %t2 to i323831  %z3 = trunc i64 %el3 to i323832  %s3 = shl nuw i32 %z3, 163833  %o1 = or i32 %z2, %s33834 3835  store i32 %o0, ptr addrspace(1) %out0, align 43836  store i32 %o1, ptr addrspace(1) %out1, align 43837  ret void3838}3839 3840 3841; Should combine the lower 16 bits from each i32 in load3842define hidden void @trunc_vector(ptr addrspace(1) %in0, ptr addrspace(1) %in1, ptr addrspace(1) %out0) {3843; GFX10-LABEL: trunc_vector:3844; GFX10:       ; %bb.0:3845; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3846; GFX10-NEXT:    s_clause 0x13847; GFX10-NEXT:    global_load_ushort v2, v[0:1], off3848; GFX10-NEXT:    global_load_short_d16_hi v2, v[0:1], off offset:43849; GFX10-NEXT:    s_waitcnt vmcnt(0)3850; GFX10-NEXT:    global_store_dword v[4:5], v2, off3851; GFX10-NEXT:    s_setpc_b64 s[30:31]3852;3853; GFX9-LABEL: trunc_vector:3854; GFX9:       ; %bb.0:3855; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3856; GFX9-NEXT:    global_load_ushort v2, v[0:1], off3857; GFX9-NEXT:    global_load_ushort v3, v[0:1], off offset:43858; GFX9-NEXT:    s_mov_b32 s4, 0x50401003859; GFX9-NEXT:    s_waitcnt vmcnt(0)3860; GFX9-NEXT:    v_perm_b32 v0, v3, v2, s43861; GFX9-NEXT:    global_store_dword v[4:5], v0, off3862; GFX9-NEXT:    s_waitcnt vmcnt(0)3863; GFX9-NEXT:    s_setpc_b64 s[30:31]3864  %vec = load <2 x i32>, ptr addrspace(1) %in0, align 23865  %tvec = trunc <2 x i32> %vec to <2 x i16>3866  %el0 = extractelement <2 x i16> %tvec, i32 03867  %el1 = extractelement <2 x i16> %tvec, i32 13868  %z0 = zext i16 %el0 to i323869  %z1 = zext i16 %el1 to i323870  %s1 = shl nuw i32 %z1, 163871  %o0 = or i32 %s1, %z03872 3873  store i32 %o0, ptr addrspace(1) %out0, align 43874  ret void3875}3876