brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.2 KiB · b52913f Raw
220 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=gfx90a < %s | FileCheck -check-prefixes=GFX90A %s3; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=gfx942 < %s | FileCheck -check-prefixes=GFX942 %s4; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=gfx1030 < %s | FileCheck -check-prefixes=GFX1030 %s5; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GFX1100 %s6 7define amdgpu_kernel void @test_insert_extract(i32 %p, i32 %q) {8; GFX90A-LABEL: test_insert_extract:9; GFX90A:       ; %bb.0: ; %entry10; GFX90A-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x011; GFX90A-NEXT:    s_mov_b32 s2, 012; GFX90A-NEXT:    s_and_b64 vcc, exec, -113; GFX90A-NEXT:    s_mov_b32 s3, 014; GFX90A-NEXT:    s_mov_b32 s4, 015; GFX90A-NEXT:    s_mov_b32 s5, 016; GFX90A-NEXT:    s_mov_b32 s6, 017; GFX90A-NEXT:  .LBB0_1: ; %for.body18; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=119; GFX90A-NEXT:    s_waitcnt lgkmcnt(0)20; GFX90A-NEXT:    s_cmp_eq_u32 s1, 121; GFX90A-NEXT:    s_cselect_b64 s[8:9], -1, 022; GFX90A-NEXT:    s_and_b64 s[8:9], s[8:9], exec23; GFX90A-NEXT:    s_cselect_b32 s7, s3, s224; GFX90A-NEXT:    s_cmp_eq_u32 s1, 225; GFX90A-NEXT:    s_cselect_b64 s[8:9], -1, 026; GFX90A-NEXT:    s_and_b64 s[8:9], s[8:9], exec27; GFX90A-NEXT:    s_cselect_b32 s7, s4, s728; GFX90A-NEXT:    s_cmp_eq_u32 s1, 329; GFX90A-NEXT:    s_cselect_b64 s[8:9], -1, 030; GFX90A-NEXT:    s_and_b64 s[8:9], s[8:9], exec31; GFX90A-NEXT:    s_cselect_b32 s7, s5, s732; GFX90A-NEXT:    s_or_b32 s7, s7, s033; GFX90A-NEXT:    s_cmp_eq_u32 s1, 134; GFX90A-NEXT:    s_cselect_b64 s[8:9], -1, 035; GFX90A-NEXT:    s_and_b64 s[10:11], s[8:9], exec36; GFX90A-NEXT:    s_cselect_b32 s3, s7, s337; GFX90A-NEXT:    s_cmp_eq_u32 s1, 338; GFX90A-NEXT:    s_cselect_b64 s[10:11], -1, 039; GFX90A-NEXT:    s_and_b64 s[12:13], s[10:11], exec40; GFX90A-NEXT:    s_cselect_b32 s5, s7, s541; GFX90A-NEXT:    s_cmp_eq_u32 s1, 242; GFX90A-NEXT:    s_cselect_b64 s[12:13], -1, 043; GFX90A-NEXT:    s_and_b64 s[14:15], s[12:13], exec44; GFX90A-NEXT:    s_cselect_b32 s4, s7, s445; GFX90A-NEXT:    s_cmp_eq_u32 s1, 046; GFX90A-NEXT:    s_cselect_b32 s2, s7, s247; GFX90A-NEXT:    s_or_b64 s[8:9], s[12:13], s[8:9]48; GFX90A-NEXT:    s_or_b64 s[8:9], s[10:11], s[8:9]49; GFX90A-NEXT:    s_and_b64 s[8:9], s[8:9], exec50; GFX90A-NEXT:    s_cselect_b32 s6, 0, s651; GFX90A-NEXT:    s_mov_b64 vcc, vcc52; GFX90A-NEXT:    s_cbranch_vccnz .LBB0_153; GFX90A-NEXT:  ; %bb.2: ; %DummyReturnBlock54; GFX90A-NEXT:    s_endpgm55;56; GFX942-LABEL: test_insert_extract:57; GFX942:       ; %bb.0: ; %entry58; GFX942-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x059; GFX942-NEXT:    s_mov_b32 s2, 060; GFX942-NEXT:    s_and_b64 vcc, exec, -161; GFX942-NEXT:    s_mov_b32 s3, 062; GFX942-NEXT:    s_mov_b32 s4, 063; GFX942-NEXT:    s_mov_b32 s5, 064; GFX942-NEXT:    s_mov_b32 s6, 065; GFX942-NEXT:  .LBB0_1: ; %for.body66; GFX942-NEXT:    ; =>This Inner Loop Header: Depth=167; GFX942-NEXT:    s_waitcnt lgkmcnt(0)68; GFX942-NEXT:    s_cmp_eq_u32 s1, 169; GFX942-NEXT:    s_cselect_b64 s[8:9], -1, 070; GFX942-NEXT:    s_and_b64 s[8:9], s[8:9], exec71; GFX942-NEXT:    s_cselect_b32 s7, s3, s272; GFX942-NEXT:    s_cmp_eq_u32 s1, 273; GFX942-NEXT:    s_cselect_b64 s[8:9], -1, 074; GFX942-NEXT:    s_and_b64 s[8:9], s[8:9], exec75; GFX942-NEXT:    s_cselect_b32 s7, s4, s776; GFX942-NEXT:    s_cmp_eq_u32 s1, 377; GFX942-NEXT:    s_cselect_b64 s[8:9], -1, 078; GFX942-NEXT:    s_and_b64 s[8:9], s[8:9], exec79; GFX942-NEXT:    s_cselect_b32 s7, s5, s780; GFX942-NEXT:    s_or_b32 s7, s7, s081; GFX942-NEXT:    s_cmp_eq_u32 s1, 182; GFX942-NEXT:    s_cselect_b64 s[8:9], -1, 083; GFX942-NEXT:    s_and_b64 s[10:11], s[8:9], exec84; GFX942-NEXT:    s_cselect_b32 s3, s7, s385; GFX942-NEXT:    s_cmp_eq_u32 s1, 386; GFX942-NEXT:    s_cselect_b64 s[10:11], -1, 087; GFX942-NEXT:    s_and_b64 s[12:13], s[10:11], exec88; GFX942-NEXT:    s_cselect_b32 s5, s7, s589; GFX942-NEXT:    s_cmp_eq_u32 s1, 290; GFX942-NEXT:    s_cselect_b64 s[12:13], -1, 091; GFX942-NEXT:    s_and_b64 s[14:15], s[12:13], exec92; GFX942-NEXT:    s_cselect_b32 s4, s7, s493; GFX942-NEXT:    s_cmp_eq_u32 s1, 094; GFX942-NEXT:    s_cselect_b32 s2, s7, s295; GFX942-NEXT:    s_or_b64 s[8:9], s[12:13], s[8:9]96; GFX942-NEXT:    s_or_b64 s[8:9], s[10:11], s[8:9]97; GFX942-NEXT:    s_and_b64 s[8:9], s[8:9], exec98; GFX942-NEXT:    s_cselect_b32 s6, 0, s699; GFX942-NEXT:    s_mov_b64 vcc, vcc100; GFX942-NEXT:    s_cbranch_vccnz .LBB0_1101; GFX942-NEXT:  ; %bb.2: ; %DummyReturnBlock102; GFX942-NEXT:    s_endpgm103;104; GFX1030-LABEL: test_insert_extract:105; GFX1030:       ; %bb.0: ; %entry106; GFX1030-NEXT:    s_load_dwordx2 s[0:1], s[8:9], 0x0107; GFX1030-NEXT:    s_mov_b32 s2, 0108; GFX1030-NEXT:    s_mov_b32 s3, 0109; GFX1030-NEXT:    s_mov_b32 s4, 0110; GFX1030-NEXT:    s_mov_b32 s5, 0111; GFX1030-NEXT:    s_mov_b32 s6, 0112; GFX1030-NEXT:    s_mov_b32 vcc_lo, exec_lo113; GFX1030-NEXT:    .p2align 6114; GFX1030-NEXT:  .LBB0_1: ; %for.body115; GFX1030-NEXT:    ; =>This Inner Loop Header: Depth=1116; GFX1030-NEXT:    s_waitcnt lgkmcnt(0)117; GFX1030-NEXT:    s_cmp_eq_u32 s1, 1118; GFX1030-NEXT:    s_cselect_b32 s7, -1, 0119; GFX1030-NEXT:    s_and_b32 s7, s7, exec_lo120; GFX1030-NEXT:    s_cselect_b32 s7, s3, s2121; GFX1030-NEXT:    s_cmp_eq_u32 s1, 2122; GFX1030-NEXT:    s_cselect_b32 s8, -1, 0123; GFX1030-NEXT:    s_and_b32 s8, s8, exec_lo124; GFX1030-NEXT:    s_cselect_b32 s7, s4, s7125; GFX1030-NEXT:    s_cmp_eq_u32 s1, 3126; GFX1030-NEXT:    s_cselect_b32 s8, -1, 0127; GFX1030-NEXT:    s_and_b32 s8, s8, exec_lo128; GFX1030-NEXT:    s_cselect_b32 s7, s5, s7129; GFX1030-NEXT:    s_or_b32 s7, s7, s0130; GFX1030-NEXT:    s_cmp_eq_u32 s1, 1131; GFX1030-NEXT:    s_cselect_b32 s8, -1, 0132; GFX1030-NEXT:    s_and_b32 s9, s8, exec_lo133; GFX1030-NEXT:    s_cselect_b32 s3, s7, s3134; GFX1030-NEXT:    s_cmp_eq_u32 s1, 3135; GFX1030-NEXT:    s_cselect_b32 s9, -1, 0136; GFX1030-NEXT:    s_and_b32 s10, s9, exec_lo137; GFX1030-NEXT:    s_cselect_b32 s5, s7, s5138; GFX1030-NEXT:    s_cmp_eq_u32 s1, 2139; GFX1030-NEXT:    s_cselect_b32 s10, -1, 0140; GFX1030-NEXT:    s_and_b32 s11, s10, exec_lo141; GFX1030-NEXT:    s_cselect_b32 s4, s7, s4142; GFX1030-NEXT:    s_cmp_eq_u32 s1, 0143; GFX1030-NEXT:    s_cselect_b32 s2, s7, s2144; GFX1030-NEXT:    s_or_b32 s7, s10, s8145; GFX1030-NEXT:    s_or_b32 s7, s9, s7146; GFX1030-NEXT:    s_and_b32 s7, s7, exec_lo147; GFX1030-NEXT:    s_cselect_b32 s6, 0, s6148; GFX1030-NEXT:    s_cbranch_vccnz .LBB0_1149; GFX1030-NEXT:  ; %bb.2: ; %DummyReturnBlock150; GFX1030-NEXT:    s_endpgm151;152; GFX1100-LABEL: test_insert_extract:153; GFX1100:       ; %bb.0: ; %entry154; GFX1100-NEXT:    s_load_b64 s[0:1], s[4:5], 0x0155; GFX1100-NEXT:    s_mov_b32 s2, 0156; GFX1100-NEXT:    s_mov_b32 s3, 0157; GFX1100-NEXT:    s_mov_b32 s4, 0158; GFX1100-NEXT:    s_mov_b32 s5, 0159; GFX1100-NEXT:    s_mov_b32 s6, 0160; GFX1100-NEXT:    s_mov_b32 vcc_lo, exec_lo161; GFX1100-NEXT:    .p2align 6162; GFX1100-NEXT:  .LBB0_1: ; %for.body163; GFX1100-NEXT:    ; =>This Inner Loop Header: Depth=1164; GFX1100-NEXT:    s_waitcnt lgkmcnt(0)165; GFX1100-NEXT:    s_cmp_eq_u32 s1, 1166; GFX1100-NEXT:    s_cselect_b32 s7, -1, 0167; GFX1100-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(SALU_CYCLE_1)168; GFX1100-NEXT:    s_and_b32 s7, s7, exec_lo169; GFX1100-NEXT:    s_cselect_b32 s7, s3, s2170; GFX1100-NEXT:    s_cmp_eq_u32 s1, 2171; GFX1100-NEXT:    s_cselect_b32 s8, -1, 0172; GFX1100-NEXT:    s_and_b32 s8, s8, exec_lo173; GFX1100-NEXT:    s_cselect_b32 s7, s4, s7174; GFX1100-NEXT:    s_cmp_eq_u32 s1, 3175; GFX1100-NEXT:    s_cselect_b32 s8, -1, 0176; GFX1100-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)177; GFX1100-NEXT:    s_and_b32 s8, s8, exec_lo178; GFX1100-NEXT:    s_cselect_b32 s7, s5, s7179; GFX1100-NEXT:    s_or_b32 s7, s7, s0180; GFX1100-NEXT:    s_cmp_eq_u32 s1, 1181; GFX1100-NEXT:    s_cselect_b32 s8, -1, 0182; GFX1100-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(SALU_CYCLE_1)183; GFX1100-NEXT:    s_and_b32 s9, s8, exec_lo184; GFX1100-NEXT:    s_cselect_b32 s3, s7, s3185; GFX1100-NEXT:    s_cmp_eq_u32 s1, 3186; GFX1100-NEXT:    s_cselect_b32 s9, -1, 0187; GFX1100-NEXT:    s_and_b32 s10, s9, exec_lo188; GFX1100-NEXT:    s_cselect_b32 s5, s7, s5189; GFX1100-NEXT:    s_cmp_eq_u32 s1, 2190; GFX1100-NEXT:    s_cselect_b32 s10, -1, 0191; GFX1100-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(SALU_CYCLE_1)192; GFX1100-NEXT:    s_and_b32 s11, s10, exec_lo193; GFX1100-NEXT:    s_cselect_b32 s4, s7, s4194; GFX1100-NEXT:    s_cmp_eq_u32 s1, 0195; GFX1100-NEXT:    s_cselect_b32 s2, s7, s2196; GFX1100-NEXT:    s_or_b32 s7, s10, s8197; GFX1100-NEXT:    s_or_b32 s7, s9, s7198; GFX1100-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)199; GFX1100-NEXT:    s_and_b32 s7, s7, exec_lo200; GFX1100-NEXT:    s_cselect_b32 s6, 0, s6201; GFX1100-NEXT:    s_cbranch_vccnz .LBB0_1202; GFX1100-NEXT:  ; %bb.2: ; %DummyReturnBlock203; GFX1100-NEXT:    s_endpgm204entry:205  %init = insertelement <4 x i32> zeroinitializer, i32 0, i64 0206  br label %for.body207 208for.body:                                     ; preds = %for.body, %entry209  %x1 = phi <4 x i32> [ %init, %entry ], [ %i4, %for.body ]210  %x2 = phi <4 x i32> [ zeroinitializer, %entry ], [ %i2, %for.body ]211  %idxprom = zext i32 %q to i64212  %e1 = extractelement <4 x i32> %x2, i64 %idxprom213  %add = or i32 %e1, %p214  %i2 = insertelement <4 x i32> %x2, i32 %add, i64 %idxprom215  %e3 = extractelement <4 x i32> %x1, i64 %idxprom216  %i4 = insertelement <4 x i32> %x1, i32 %e3, i64 0217  br label %for.body218}219 220