brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.8 KiB · bfef88c Raw
347 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -enable-var-scope -check-prefixes=SI %s3; RUN: llc -mtriple=amdgcn -mcpu=fiji -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefixes=VI %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefixes=GFX11-TRUE16 %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -mattr=-flat-for-global < %s | FileCheck -enable-var-scope -check-prefixes=GFX11-FAKE16 %s6 7define amdgpu_kernel void @br_cc_f16(8; SI-LABEL: br_cc_f16:9; SI:       ; %bb.0: ; %entry10; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x911; SI-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0xd12; SI-NEXT:    s_mov_b32 s7, 0xf00013; SI-NEXT:    s_mov_b32 s6, -114; SI-NEXT:    s_mov_b32 s10, s615; SI-NEXT:    s_waitcnt lgkmcnt(0)16; SI-NEXT:    s_mov_b32 s4, s217; SI-NEXT:    s_mov_b32 s5, s318; SI-NEXT:    s_mov_b32 s11, s719; SI-NEXT:    buffer_load_ushort v0, off, s[4:7], 0 glc20; SI-NEXT:    s_waitcnt vmcnt(0)21; SI-NEXT:    buffer_load_ushort v1, off, s[8:11], 0 glc22; SI-NEXT:    s_waitcnt vmcnt(0)23; SI-NEXT:    v_cvt_f32_f16_e32 v0, v024; SI-NEXT:    v_cvt_f32_f16_e32 v1, v125; SI-NEXT:    v_cmp_nlt_f32_e32 vcc, v0, v126; SI-NEXT:    s_cbranch_vccnz .LBB0_227; SI-NEXT:  ; %bb.1: ; %one28; SI-NEXT:    v_cvt_f16_f32_e32 v0, v029; SI-NEXT:    s_branch .LBB0_330; SI-NEXT:  .LBB0_2: ; %two31; SI-NEXT:    v_cvt_f16_f32_e32 v0, v132; SI-NEXT:  .LBB0_3: ; %one33; SI-NEXT:    s_mov_b32 s2, s634; SI-NEXT:    s_mov_b32 s3, s735; SI-NEXT:    buffer_store_short v0, off, s[0:3], 036; SI-NEXT:    s_endpgm37;38; VI-LABEL: br_cc_f16:39; VI:       ; %bb.0: ; %entry40; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2441; VI-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x3442; VI-NEXT:    s_mov_b32 s7, 0xf00043; VI-NEXT:    s_mov_b32 s6, -144; VI-NEXT:    s_mov_b32 s10, s645; VI-NEXT:    s_waitcnt lgkmcnt(0)46; VI-NEXT:    s_mov_b32 s4, s247; VI-NEXT:    s_mov_b32 s5, s348; VI-NEXT:    s_mov_b32 s11, s749; VI-NEXT:    buffer_load_ushort v0, off, s[4:7], 0 glc50; VI-NEXT:    s_waitcnt vmcnt(0)51; VI-NEXT:    buffer_load_ushort v1, off, s[8:11], 0 glc52; VI-NEXT:    s_waitcnt vmcnt(0)53; VI-NEXT:    s_mov_b32 s2, s654; VI-NEXT:    s_mov_b32 s3, s755; VI-NEXT:    v_cmp_nlt_f16_e32 vcc, v0, v156; VI-NEXT:    s_cbranch_vccnz .LBB0_257; VI-NEXT:  ; %bb.1: ; %one58; VI-NEXT:    buffer_store_short v0, off, s[0:3], 059; VI-NEXT:    s_endpgm60; VI-NEXT:  .LBB0_2: ; %two61; VI-NEXT:    buffer_store_short v1, off, s[0:3], 062; VI-NEXT:    s_endpgm63;64; GFX11-TRUE16-LABEL: br_cc_f16:65; GFX11-TRUE16:       ; %bb.0: ; %entry66; GFX11-TRUE16-NEXT:    s_clause 0x167; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2468; GFX11-TRUE16-NEXT:    s_load_b64 s[8:9], s[4:5], 0x3469; GFX11-TRUE16-NEXT:    s_mov_b32 s6, -170; GFX11-TRUE16-NEXT:    s_mov_b32 s7, 0x3101600071; GFX11-TRUE16-NEXT:    s_mov_b32 s10, s672; GFX11-TRUE16-NEXT:    s_mov_b32 s11, s773; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)74; GFX11-TRUE16-NEXT:    s_mov_b32 s4, s275; GFX11-TRUE16-NEXT:    s_mov_b32 s5, s376; GFX11-TRUE16-NEXT:    buffer_load_u16 v0, off, s[4:7], 0 glc dlc77; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)78; GFX11-TRUE16-NEXT:    buffer_load_u16 v1, off, s[8:11], 0 glc dlc79; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)80; GFX11-TRUE16-NEXT:    s_mov_b32 s2, s681; GFX11-TRUE16-NEXT:    s_mov_b32 s3, s782; GFX11-TRUE16-NEXT:    v_mov_b16_e32 v2.l, v0.l83; GFX11-TRUE16-NEXT:    v_mov_b16_e32 v2.h, v1.l84; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)85; GFX11-TRUE16-NEXT:    v_cmp_nlt_f16_e32 vcc_lo, v2.l, v2.h86; GFX11-TRUE16-NEXT:    s_cbranch_vccnz .LBB0_287; GFX11-TRUE16-NEXT:  ; %bb.1: ; %one88; GFX11-TRUE16-NEXT:    buffer_store_b16 v0, off, s[0:3], 089; GFX11-TRUE16-NEXT:    s_endpgm90; GFX11-TRUE16-NEXT:  .LBB0_2: ; %two91; GFX11-TRUE16-NEXT:    buffer_store_b16 v1, off, s[0:3], 092; GFX11-TRUE16-NEXT:    s_endpgm93;94; GFX11-FAKE16-LABEL: br_cc_f16:95; GFX11-FAKE16:       ; %bb.0: ; %entry96; GFX11-FAKE16-NEXT:    s_clause 0x197; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2498; GFX11-FAKE16-NEXT:    s_load_b64 s[8:9], s[4:5], 0x3499; GFX11-FAKE16-NEXT:    s_mov_b32 s6, -1100; GFX11-FAKE16-NEXT:    s_mov_b32 s7, 0x31016000101; GFX11-FAKE16-NEXT:    s_mov_b32 s10, s6102; GFX11-FAKE16-NEXT:    s_mov_b32 s11, s7103; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)104; GFX11-FAKE16-NEXT:    s_mov_b32 s4, s2105; GFX11-FAKE16-NEXT:    s_mov_b32 s5, s3106; GFX11-FAKE16-NEXT:    buffer_load_u16 v0, off, s[4:7], 0 glc dlc107; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)108; GFX11-FAKE16-NEXT:    buffer_load_u16 v1, off, s[8:11], 0 glc dlc109; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)110; GFX11-FAKE16-NEXT:    s_mov_b32 s2, s6111; GFX11-FAKE16-NEXT:    s_mov_b32 s3, s7112; GFX11-FAKE16-NEXT:    v_cmp_nlt_f16_e32 vcc_lo, v0, v1113; GFX11-FAKE16-NEXT:    s_cbranch_vccnz .LBB0_2114; GFX11-FAKE16-NEXT:  ; %bb.1: ; %one115; GFX11-FAKE16-NEXT:    buffer_store_b16 v0, off, s[0:3], 0116; GFX11-FAKE16-NEXT:    s_endpgm117; GFX11-FAKE16-NEXT:  .LBB0_2: ; %two118; GFX11-FAKE16-NEXT:    buffer_store_b16 v1, off, s[0:3], 0119; GFX11-FAKE16-NEXT:    s_endpgm120    ptr addrspace(1) %r,121    ptr addrspace(1) %a,122    ptr addrspace(1) %b) {123entry:124  %a.val = load volatile half, ptr addrspace(1) %a125  %b.val = load volatile half, ptr addrspace(1) %b126  %fcmp = fcmp olt half %a.val, %b.val127  br i1 %fcmp, label %one, label %two128 129one:130  store half %a.val, ptr addrspace(1) %r131  ret void132 133two:134  store half %b.val, ptr addrspace(1) %r135  ret void136}137 138define amdgpu_kernel void @br_cc_f16_imm_a(139; SI-LABEL: br_cc_f16_imm_a:140; SI:       ; %bb.0: ; %entry141; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9142; SI-NEXT:    s_mov_b32 s7, 0xf000143; SI-NEXT:    s_mov_b32 s6, -1144; SI-NEXT:    s_waitcnt lgkmcnt(0)145; SI-NEXT:    s_mov_b32 s4, s2146; SI-NEXT:    s_mov_b32 s5, s3147; SI-NEXT:    buffer_load_ushort v0, off, s[4:7], 0148; SI-NEXT:    s_waitcnt vmcnt(0)149; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0150; SI-NEXT:    v_cmp_nlt_f32_e32 vcc, 0.5, v0151; SI-NEXT:    s_cbranch_vccnz .LBB1_2152; SI-NEXT:  ; %bb.1: ; %one153; SI-NEXT:    s_mov_b32 s2, s6154; SI-NEXT:    s_mov_b32 s3, s7155; SI-NEXT:    v_mov_b32_e32 v0, 0x3800156; SI-NEXT:    buffer_store_short v0, off, s[0:3], 0157; SI-NEXT:    s_endpgm158; SI-NEXT:  .LBB1_2: ; %two159; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0160; SI-NEXT:    s_mov_b32 s2, s6161; SI-NEXT:    s_mov_b32 s3, s7162; SI-NEXT:    buffer_store_short v0, off, s[0:3], 0163; SI-NEXT:    s_endpgm164;165; VI-LABEL: br_cc_f16_imm_a:166; VI:       ; %bb.0: ; %entry167; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24168; VI-NEXT:    s_mov_b32 s7, 0xf000169; VI-NEXT:    s_mov_b32 s6, -1170; VI-NEXT:    s_waitcnt lgkmcnt(0)171; VI-NEXT:    s_mov_b32 s4, s2172; VI-NEXT:    s_mov_b32 s5, s3173; VI-NEXT:    buffer_load_ushort v0, off, s[4:7], 0174; VI-NEXT:    s_mov_b32 s2, s6175; VI-NEXT:    s_mov_b32 s3, s7176; VI-NEXT:    s_waitcnt vmcnt(0)177; VI-NEXT:    v_cmp_nlt_f16_e32 vcc, 0.5, v0178; VI-NEXT:    s_cbranch_vccnz .LBB1_2179; VI-NEXT:  ; %bb.1: ; %one180; VI-NEXT:    v_mov_b32_e32 v0, 0x3800181; VI-NEXT:  .LBB1_2: ; %two182; VI-NEXT:    buffer_store_short v0, off, s[0:3], 0183; VI-NEXT:    s_endpgm184;185; GFX11-TRUE16-LABEL: br_cc_f16_imm_a:186; GFX11-TRUE16:       ; %bb.0: ; %entry187; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24188; GFX11-TRUE16-NEXT:    s_mov_b32 s7, 0x31016000189; GFX11-TRUE16-NEXT:    s_mov_b32 s6, -1190; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)191; GFX11-TRUE16-NEXT:    s_mov_b32 s4, s2192; GFX11-TRUE16-NEXT:    s_mov_b32 s5, s3193; GFX11-TRUE16-NEXT:    buffer_load_u16 v0, off, s[4:7], 0194; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)195; GFX11-TRUE16-NEXT:    v_mov_b16_e32 v1.l, v0.l196; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)197; GFX11-TRUE16-NEXT:    v_cmp_nlt_f16_e32 vcc_lo, 0.5, v1.l198; GFX11-TRUE16-NEXT:    s_cbranch_vccnz .LBB1_2199; GFX11-TRUE16-NEXT:  ; %bb.1: ; %one200; GFX11-TRUE16-NEXT:    v_mov_b16_e32 v0.l, 0x3800201; GFX11-TRUE16-NEXT:  .LBB1_2: ; %two202; GFX11-TRUE16-NEXT:    s_mov_b32 s2, s6203; GFX11-TRUE16-NEXT:    s_mov_b32 s3, s7204; GFX11-TRUE16-NEXT:    buffer_store_b16 v0, off, s[0:3], 0205; GFX11-TRUE16-NEXT:    s_endpgm206;207; GFX11-FAKE16-LABEL: br_cc_f16_imm_a:208; GFX11-FAKE16:       ; %bb.0: ; %entry209; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24210; GFX11-FAKE16-NEXT:    s_mov_b32 s7, 0x31016000211; GFX11-FAKE16-NEXT:    s_mov_b32 s6, -1212; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)213; GFX11-FAKE16-NEXT:    s_mov_b32 s4, s2214; GFX11-FAKE16-NEXT:    s_mov_b32 s5, s3215; GFX11-FAKE16-NEXT:    buffer_load_u16 v0, off, s[4:7], 0216; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)217; GFX11-FAKE16-NEXT:    v_cmp_nlt_f16_e32 vcc_lo, 0.5, v0218; GFX11-FAKE16-NEXT:    s_cbranch_vccnz .LBB1_2219; GFX11-FAKE16-NEXT:  ; %bb.1: ; %one220; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v0, 0x3800221; GFX11-FAKE16-NEXT:  .LBB1_2: ; %two222; GFX11-FAKE16-NEXT:    s_mov_b32 s2, s6223; GFX11-FAKE16-NEXT:    s_mov_b32 s3, s7224; GFX11-FAKE16-NEXT:    buffer_store_b16 v0, off, s[0:3], 0225; GFX11-FAKE16-NEXT:    s_endpgm226    ptr addrspace(1) %r,227    ptr addrspace(1) %b) {228entry:229  %b.val = load half, ptr addrspace(1) %b230  %fcmp = fcmp olt half 0xH3800, %b.val231  br i1 %fcmp, label %one, label %two232 233one:234  store half 0xH3800, ptr addrspace(1) %r235  ret void236 237two:238  store half %b.val, ptr addrspace(1) %r239  ret void240}241 242define amdgpu_kernel void @br_cc_f16_imm_b(243; SI-LABEL: br_cc_f16_imm_b:244; SI:       ; %bb.0: ; %entry245; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9246; SI-NEXT:    s_mov_b32 s7, 0xf000247; SI-NEXT:    s_mov_b32 s6, -1248; SI-NEXT:    s_waitcnt lgkmcnt(0)249; SI-NEXT:    s_mov_b32 s4, s2250; SI-NEXT:    s_mov_b32 s5, s3251; SI-NEXT:    buffer_load_ushort v0, off, s[4:7], 0252; SI-NEXT:    s_waitcnt vmcnt(0)253; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0254; SI-NEXT:    v_cmp_ngt_f32_e32 vcc, 0.5, v0255; SI-NEXT:    s_cbranch_vccnz .LBB2_2256; SI-NEXT:  ; %bb.1: ; %one257; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0258; SI-NEXT:    s_mov_b32 s2, s6259; SI-NEXT:    s_mov_b32 s3, s7260; SI-NEXT:    buffer_store_short v0, off, s[0:3], 0261; SI-NEXT:    s_endpgm262; SI-NEXT:  .LBB2_2: ; %two263; SI-NEXT:    s_mov_b32 s2, s6264; SI-NEXT:    s_mov_b32 s3, s7265; SI-NEXT:    v_mov_b32_e32 v0, 0x3800266; SI-NEXT:    buffer_store_short v0, off, s[0:3], 0267; SI-NEXT:    s_endpgm268;269; VI-LABEL: br_cc_f16_imm_b:270; VI:       ; %bb.0: ; %entry271; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24272; VI-NEXT:    s_mov_b32 s7, 0xf000273; VI-NEXT:    s_mov_b32 s6, -1274; VI-NEXT:    s_waitcnt lgkmcnt(0)275; VI-NEXT:    s_mov_b32 s4, s2276; VI-NEXT:    s_mov_b32 s5, s3277; VI-NEXT:    buffer_load_ushort v0, off, s[4:7], 0278; VI-NEXT:    s_mov_b32 s2, s6279; VI-NEXT:    s_mov_b32 s3, s7280; VI-NEXT:    s_waitcnt vmcnt(0)281; VI-NEXT:    v_cmp_ngt_f16_e32 vcc, 0.5, v0282; VI-NEXT:    s_cbranch_vccnz .LBB2_2283; VI-NEXT:  ; %bb.1: ; %one284; VI-NEXT:    buffer_store_short v0, off, s[0:3], 0285; VI-NEXT:    s_endpgm286; VI-NEXT:  .LBB2_2: ; %two287; VI-NEXT:    v_mov_b32_e32 v0, 0x3800288; VI-NEXT:    buffer_store_short v0, off, s[0:3], 0289; VI-NEXT:    s_endpgm290;291; GFX11-TRUE16-LABEL: br_cc_f16_imm_b:292; GFX11-TRUE16:       ; %bb.0: ; %entry293; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24294; GFX11-TRUE16-NEXT:    s_mov_b32 s7, 0x31016000295; GFX11-TRUE16-NEXT:    s_mov_b32 s6, -1296; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)297; GFX11-TRUE16-NEXT:    s_mov_b32 s4, s2298; GFX11-TRUE16-NEXT:    s_mov_b32 s5, s3299; GFX11-TRUE16-NEXT:    buffer_load_u16 v0, off, s[4:7], 0300; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)301; GFX11-TRUE16-NEXT:    v_mov_b16_e32 v1.l, v0.l302; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)303; GFX11-TRUE16-NEXT:    v_cmp_ngt_f16_e32 vcc_lo, 0.5, v1.l304; GFX11-TRUE16-NEXT:    s_cbranch_vccz .LBB2_2305; GFX11-TRUE16-NEXT:  ; %bb.1: ; %two306; GFX11-TRUE16-NEXT:    v_mov_b16_e32 v0.l, 0x3800307; GFX11-TRUE16-NEXT:  .LBB2_2: ; %one308; GFX11-TRUE16-NEXT:    s_mov_b32 s2, s6309; GFX11-TRUE16-NEXT:    s_mov_b32 s3, s7310; GFX11-TRUE16-NEXT:    buffer_store_b16 v0, off, s[0:3], 0311; GFX11-TRUE16-NEXT:    s_endpgm312;313; GFX11-FAKE16-LABEL: br_cc_f16_imm_b:314; GFX11-FAKE16:       ; %bb.0: ; %entry315; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24316; GFX11-FAKE16-NEXT:    s_mov_b32 s7, 0x31016000317; GFX11-FAKE16-NEXT:    s_mov_b32 s6, -1318; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)319; GFX11-FAKE16-NEXT:    s_mov_b32 s4, s2320; GFX11-FAKE16-NEXT:    s_mov_b32 s5, s3321; GFX11-FAKE16-NEXT:    buffer_load_u16 v0, off, s[4:7], 0322; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)323; GFX11-FAKE16-NEXT:    v_cmp_ngt_f16_e32 vcc_lo, 0.5, v0324; GFX11-FAKE16-NEXT:    s_cbranch_vccz .LBB2_2325; GFX11-FAKE16-NEXT:  ; %bb.1: ; %two326; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v0, 0x3800327; GFX11-FAKE16-NEXT:  .LBB2_2: ; %one328; GFX11-FAKE16-NEXT:    s_mov_b32 s2, s6329; GFX11-FAKE16-NEXT:    s_mov_b32 s3, s7330; GFX11-FAKE16-NEXT:    buffer_store_b16 v0, off, s[0:3], 0331; GFX11-FAKE16-NEXT:    s_endpgm332    ptr addrspace(1) %r,333    ptr addrspace(1) %a) {334entry:335  %a.val = load half, ptr addrspace(1) %a336  %fcmp = fcmp olt half %a.val, 0xH3800337  br i1 %fcmp, label %one, label %two338 339one:340  store half %a.val, ptr addrspace(1) %r341  ret void342 343two:344  store half 0xH3800, ptr addrspace(1) %r345  ret void346}347