3571 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -amdgpu-scalarize-global-loads=false -enable-misched=0 -mtriple=amdgcn -mcpu=bonaire < %s | FileCheck --check-prefix=CI %s3; RUN: llc -global-isel -amdgpu-scalarize-global-loads=false -enable-misched=0 -mtriple=amdgcn -mcpu=tonga < %s | FileCheck --check-prefix=VI %s4 5define amdgpu_kernel void @frem_f16(ptr addrspace(1) %out, ptr addrspace(1) %in1, ptr addrspace(1) %in2) #0 {6; CI-LABEL: frem_f16:7; CI: ; %bb.0:8; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x99; CI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0xd10; CI-NEXT: ; implicit-def: $vgpr111; CI-NEXT: s_waitcnt lgkmcnt(0)12; CI-NEXT: s_load_dword s2, s[2:3], 0x013; CI-NEXT: s_load_dword s3, s[4:5], 0x214; CI-NEXT: s_mov_b32 s4, 115; CI-NEXT: s_waitcnt lgkmcnt(0)16; CI-NEXT: v_cvt_f32_f16_e64 v2, |s2|17; CI-NEXT: v_cvt_f32_f16_e64 v0, |s3|18; CI-NEXT: v_cmp_ngt_f32_e32 vcc, v2, v019; CI-NEXT: s_cbranch_vccz .LBB0_220; CI-NEXT: ; %bb.1: ; %frem.else21; CI-NEXT: s_and_b32 s4, s2, 0x800022; CI-NEXT: v_cmp_eq_f32_e32 vcc, v2, v023; CI-NEXT: v_mov_b32_e32 v1, s424; CI-NEXT: v_mov_b32_e32 v3, s225; CI-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc26; CI-NEXT: s_mov_b32 s4, 027; CI-NEXT: .LBB0_2: ; %Flow1828; CI-NEXT: s_xor_b32 s4, s4, 129; CI-NEXT: s_cmp_lg_u32 s4, 030; CI-NEXT: s_cbranch_scc1 .LBB0_831; CI-NEXT: ; %bb.3: ; %frem.compute32; CI-NEXT: v_frexp_mant_f32_e32 v1, v233; CI-NEXT: v_ldexp_f32_e64 v4, v1, 1134; CI-NEXT: v_frexp_mant_f32_e32 v1, v035; CI-NEXT: v_ldexp_f32_e64 v1, v1, 136; CI-NEXT: v_div_scale_f32 v3, s[4:5], v1, v1, 1.037; CI-NEXT: v_frexp_exp_i32_f32_e32 v5, v238; CI-NEXT: v_frexp_exp_i32_f32_e32 v6, v039; CI-NEXT: v_add_i32_e32 v2, vcc, -1, v540; CI-NEXT: v_add_i32_e32 v0, vcc, -1, v641; CI-NEXT: v_sub_i32_e32 v2, vcc, v2, v042; CI-NEXT: v_div_scale_f32 v7, vcc, 1.0, v1, 1.043; CI-NEXT: v_rcp_f32_e32 v8, v344; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 345; CI-NEXT: v_fma_f32 v9, -v3, v8, 1.046; CI-NEXT: v_fma_f32 v8, v9, v8, v847; CI-NEXT: v_mul_f32_e32 v9, v7, v848; CI-NEXT: v_fma_f32 v10, -v3, v9, v749; CI-NEXT: v_fma_f32 v9, v10, v8, v950; CI-NEXT: v_fma_f32 v3, -v3, v9, v751; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 052; CI-NEXT: v_div_fmas_f32 v3, v3, v8, v953; CI-NEXT: v_cmp_ge_i32_e32 vcc, 11, v254; CI-NEXT: v_div_fixup_f32 v3, v3, v1, 1.055; CI-NEXT: s_cbranch_vccnz .LBB0_656; CI-NEXT: ; %bb.4: ; %frem.loop_body.preheader57; CI-NEXT: v_add_i32_e32 v2, vcc, 11, v558; CI-NEXT: v_sub_i32_e32 v2, vcc, v2, v659; CI-NEXT: .LBB0_5: ; %frem.loop_body60; CI-NEXT: ; =>This Inner Loop Header: Depth=161; CI-NEXT: v_mov_b32_e32 v5, v462; CI-NEXT: v_mul_f32_e32 v4, v5, v363; CI-NEXT: v_rndne_f32_e32 v4, v464; CI-NEXT: v_fma_f32 v4, -v4, v1, v565; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v466; CI-NEXT: v_add_f32_e32 v6, v4, v167; CI-NEXT: v_cndmask_b32_e32 v4, v4, v6, vcc68; CI-NEXT: v_add_i32_e32 v2, vcc, -11, v269; CI-NEXT: v_ldexp_f32_e64 v4, v4, 1170; CI-NEXT: v_cmp_lt_i32_e32 vcc, 11, v271; CI-NEXT: s_cbranch_vccnz .LBB0_572; CI-NEXT: s_branch .LBB0_773; CI-NEXT: .LBB0_6:74; CI-NEXT: v_mov_b32_e32 v5, v475; CI-NEXT: .LBB0_7: ; %frem.loop_exit76; CI-NEXT: v_add_i32_e32 v2, vcc, -10, v277; CI-NEXT: v_ldexp_f32_e32 v2, v5, v278; CI-NEXT: v_mul_f32_e32 v3, v2, v379; CI-NEXT: v_rndne_f32_e32 v3, v380; CI-NEXT: v_fma_f32 v2, -v3, v1, v281; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v282; CI-NEXT: v_add_f32_e32 v1, v2, v183; CI-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc84; CI-NEXT: v_ldexp_f32_e32 v0, v1, v085; CI-NEXT: v_cvt_f16_f32_e32 v0, v086; CI-NEXT: s_and_b32 s4, s2, 0x800087; CI-NEXT: v_and_b32_e32 v0, 0x7fff, v088; CI-NEXT: v_or_b32_e32 v1, s4, v089; CI-NEXT: .LBB0_8: ; %Flow1990; CI-NEXT: v_cvt_f32_f16_e32 v0, s391; CI-NEXT: s_and_b32 s2, s2, 0x7fff92; CI-NEXT: s_cmpk_lg_i32 s2, 0x7c0093; CI-NEXT: s_cselect_b32 s2, 1, 094; CI-NEXT: v_cmp_nlg_f32_e32 vcc, 0, v095; CI-NEXT: v_mov_b32_e32 v0, 0x7e0096; CI-NEXT: s_and_b32 s2, 1, s297; CI-NEXT: v_cndmask_b32_e32 v1, v1, v0, vcc98; CI-NEXT: v_cmp_ne_u32_e64 vcc, 0, s299; CI-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc100; CI-NEXT: s_mov_b32 s2, -1101; CI-NEXT: s_mov_b32 s3, 0xf000102; CI-NEXT: buffer_store_short v0, off, s[0:3], 0103; CI-NEXT: s_endpgm104;105; VI-LABEL: frem_f16:106; VI: ; %bb.0:107; VI-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x24108; VI-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x34109; VI-NEXT: ; implicit-def: $vgpr2110; VI-NEXT: s_waitcnt lgkmcnt(0)111; VI-NEXT: s_load_dword s0, s[10:11], 0x0112; VI-NEXT: s_load_dword s1, s[2:3], 0x8113; VI-NEXT: s_mov_b32 s2, 1114; VI-NEXT: s_waitcnt lgkmcnt(0)115; VI-NEXT: v_cvt_f32_f16_e64 v1, |s0|116; VI-NEXT: v_cvt_f32_f16_e64 v0, |s1|117; VI-NEXT: v_cmp_ngt_f32_e32 vcc, v1, v0118; VI-NEXT: s_cbranch_vccz .LBB0_2119; VI-NEXT: ; %bb.1: ; %frem.else120; VI-NEXT: s_and_b32 s2, s0, 0x8000121; VI-NEXT: v_cmp_eq_f32_e32 vcc, v1, v0122; VI-NEXT: v_mov_b32_e32 v2, s2123; VI-NEXT: v_mov_b32_e32 v3, s0124; VI-NEXT: v_cndmask_b32_e32 v2, v3, v2, vcc125; VI-NEXT: s_mov_b32 s2, 0126; VI-NEXT: .LBB0_2: ; %Flow18127; VI-NEXT: s_xor_b32 s2, s2, 1128; VI-NEXT: s_cmp_lg_u32 s2, 0129; VI-NEXT: s_cbranch_scc1 .LBB0_8130; VI-NEXT: ; %bb.3: ; %frem.compute131; VI-NEXT: v_frexp_mant_f32_e32 v2, v1132; VI-NEXT: v_frexp_exp_i32_f32_e32 v5, v1133; VI-NEXT: v_frexp_mant_f32_e32 v1, v0134; VI-NEXT: v_frexp_exp_i32_f32_e32 v6, v0135; VI-NEXT: v_add_u32_e32 v3, vcc, -1, v5136; VI-NEXT: v_add_u32_e32 v0, vcc, -1, v6137; VI-NEXT: v_ldexp_f32 v1, v1, 1138; VI-NEXT: v_ldexp_f32 v4, v2, 11139; VI-NEXT: v_sub_u32_e32 v2, vcc, v3, v0140; VI-NEXT: v_div_scale_f32 v3, s[2:3], v1, v1, 1.0141; VI-NEXT: v_div_scale_f32 v7, vcc, 1.0, v1, 1.0142; VI-NEXT: v_rcp_f32_e32 v8, v3143; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3144; VI-NEXT: v_fma_f32 v9, -v3, v8, 1.0145; VI-NEXT: v_fma_f32 v8, v9, v8, v8146; VI-NEXT: v_mul_f32_e32 v9, v7, v8147; VI-NEXT: v_fma_f32 v10, -v3, v9, v7148; VI-NEXT: v_fma_f32 v9, v10, v8, v9149; VI-NEXT: v_fma_f32 v3, -v3, v9, v7150; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0151; VI-NEXT: v_div_fmas_f32 v3, v3, v8, v9152; VI-NEXT: v_cmp_ge_i32_e32 vcc, 11, v2153; VI-NEXT: v_div_fixup_f32 v3, v3, v1, 1.0154; VI-NEXT: s_cbranch_vccnz .LBB0_6155; VI-NEXT: ; %bb.4: ; %frem.loop_body.preheader156; VI-NEXT: v_add_u32_e32 v2, vcc, 11, v5157; VI-NEXT: v_sub_u32_e32 v2, vcc, v2, v6158; VI-NEXT: .LBB0_5: ; %frem.loop_body159; VI-NEXT: ; =>This Inner Loop Header: Depth=1160; VI-NEXT: v_mov_b32_e32 v5, v4161; VI-NEXT: v_mul_f32_e32 v4, v5, v3162; VI-NEXT: v_rndne_f32_e32 v4, v4163; VI-NEXT: v_fma_f32 v4, -v4, v1, v5164; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v4165; VI-NEXT: v_add_f32_e32 v6, v4, v1166; VI-NEXT: v_cndmask_b32_e32 v4, v4, v6, vcc167; VI-NEXT: v_add_u32_e32 v2, vcc, -11, v2168; VI-NEXT: v_ldexp_f32 v4, v4, 11169; VI-NEXT: v_cmp_lt_i32_e32 vcc, 11, v2170; VI-NEXT: s_cbranch_vccnz .LBB0_5171; VI-NEXT: s_branch .LBB0_7172; VI-NEXT: .LBB0_6:173; VI-NEXT: v_mov_b32_e32 v5, v4174; VI-NEXT: .LBB0_7: ; %frem.loop_exit175; VI-NEXT: v_add_u32_e32 v2, vcc, -10, v2176; VI-NEXT: v_ldexp_f32 v2, v5, v2177; VI-NEXT: v_mul_f32_e32 v3, v2, v3178; VI-NEXT: v_rndne_f32_e32 v3, v3179; VI-NEXT: v_fma_f32 v2, -v3, v1, v2180; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v2181; VI-NEXT: v_add_f32_e32 v1, v2, v1182; VI-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc183; VI-NEXT: v_ldexp_f32 v0, v1, v0184; VI-NEXT: v_cvt_f16_f32_e32 v0, v0185; VI-NEXT: s_and_b32 s2, s0, 0x8000186; VI-NEXT: v_and_b32_e32 v0, 0x7fff, v0187; VI-NEXT: v_or_b32_e32 v2, s2, v0188; VI-NEXT: .LBB0_8: ; %Flow19189; VI-NEXT: v_mov_b32_e32 v0, 0x7c00190; VI-NEXT: v_cmp_nlg_f16_e64 vcc, s1, 0191; VI-NEXT: v_cmp_nge_f16_e64 s[0:1], |s0|, v0192; VI-NEXT: v_mov_b32_e32 v0, 0x7e00193; VI-NEXT: v_cndmask_b32_e32 v1, v2, v0, vcc194; VI-NEXT: v_cndmask_b32_e64 v2, v0, v1, s[0:1]195; VI-NEXT: v_mov_b32_e32 v0, s8196; VI-NEXT: v_mov_b32_e32 v1, s9197; VI-NEXT: flat_store_short v[0:1], v2198; VI-NEXT: s_endpgm199 %gep2 = getelementptr half, ptr addrspace(1) %in2, i32 4200 %r0 = load half, ptr addrspace(1) %in1, align 4201 %r1 = load half, ptr addrspace(1) %gep2, align 4202 %r2 = frem half %r0, %r1203 store half %r2, ptr addrspace(1) %out, align 4204 ret void205}206 207define amdgpu_kernel void @fast_frem_f16(ptr addrspace(1) %out, ptr addrspace(1) %in1, ptr addrspace(1) %in2) #0 {208; CI-LABEL: fast_frem_f16:209; CI: ; %bb.0:210; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9211; CI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0xd212; CI-NEXT: s_waitcnt lgkmcnt(0)213; CI-NEXT: s_load_dword s6, s[2:3], 0x0214; CI-NEXT: s_load_dword s4, s[4:5], 0x2215; CI-NEXT: s_waitcnt lgkmcnt(0)216; CI-NEXT: v_cvt_f32_f16_e32 v0, s6217; CI-NEXT: v_cvt_f32_f16_e32 v1, s4218; CI-NEXT: v_div_scale_f32 v2, s[2:3], v1, v1, v0219; CI-NEXT: v_div_scale_f32 v3, vcc, v0, v1, v0220; CI-NEXT: v_rcp_f32_e32 v4, v2221; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3222; CI-NEXT: v_fma_f32 v5, -v2, v4, 1.0223; CI-NEXT: v_fma_f32 v4, v5, v4, v4224; CI-NEXT: v_mul_f32_e32 v5, v3, v4225; CI-NEXT: v_fma_f32 v6, -v2, v5, v3226; CI-NEXT: v_fma_f32 v5, v6, v4, v5227; CI-NEXT: v_fma_f32 v2, -v2, v5, v3228; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0229; CI-NEXT: v_div_fmas_f32 v2, v2, v4, v5230; CI-NEXT: s_mov_b32 s2, -1231; CI-NEXT: s_mov_b32 s3, 0xf000232; CI-NEXT: v_div_fixup_f32 v0, v2, v1, v0233; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 2, 2), 0234; CI-NEXT: v_cvt_f16_f32_e64 v0, -v0235; CI-NEXT: v_cvt_f32_f16_e32 v1, s4236; CI-NEXT: v_cvt_f32_f16_e32 v2, s6237; CI-NEXT: v_cvt_f32_f16_e32 v0, v0238; CI-NEXT: v_trunc_f32_e32 v0, v0239; CI-NEXT: v_cvt_f16_f32_e32 v0, v0240; CI-NEXT: v_cvt_f32_f16_e32 v0, v0241; CI-NEXT: v_fma_f32 v0, v0, v1, v2242; CI-NEXT: v_cvt_f16_f32_e32 v0, v0243; CI-NEXT: buffer_store_short v0, off, s[0:3], 0244; CI-NEXT: s_endpgm245;246; VI-LABEL: fast_frem_f16:247; VI: ; %bb.0:248; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24249; VI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x34250; VI-NEXT: s_waitcnt lgkmcnt(0)251; VI-NEXT: s_load_dword s2, s[2:3], 0x0252; VI-NEXT: s_load_dword s3, s[4:5], 0x8253; VI-NEXT: s_waitcnt lgkmcnt(0)254; VI-NEXT: v_cvt_f32_f16_e32 v0, s2255; VI-NEXT: v_cvt_f32_f16_e32 v2, s3256; VI-NEXT: v_mov_b32_e32 v1, s3257; VI-NEXT: v_rcp_f32_e32 v3, v2258; VI-NEXT: v_mul_f32_e32 v4, v0, v3259; VI-NEXT: v_mad_f32 v5, -v2, v4, v0260; VI-NEXT: v_mac_f32_e32 v4, v5, v3261; VI-NEXT: v_mad_f32 v0, -v2, v4, v0262; VI-NEXT: v_mul_f32_e32 v0, v0, v3263; VI-NEXT: v_and_b32_e32 v0, 0xff800000, v0264; VI-NEXT: v_add_f32_e32 v0, v0, v4265; VI-NEXT: v_cvt_f16_f32_e32 v0, v0266; VI-NEXT: v_div_fixup_f16 v0, v0, v1, s2267; VI-NEXT: v_trunc_f16_e32 v0, v0268; VI-NEXT: v_fma_f16 v2, -v0, v1, s2269; VI-NEXT: v_mov_b32_e32 v0, s0270; VI-NEXT: v_mov_b32_e32 v1, s1271; VI-NEXT: flat_store_short v[0:1], v2272; VI-NEXT: s_endpgm273 %gep2 = getelementptr half, ptr addrspace(1) %in2, i32 4274 %r0 = load half, ptr addrspace(1) %in1, align 4275 %r1 = load half, ptr addrspace(1) %gep2, align 4276 %r2 = frem fast half %r0, %r1277 store half %r2, ptr addrspace(1) %out, align 4278 ret void279}280 281define amdgpu_kernel void @unsafe_frem_f16(ptr addrspace(1) %out, ptr addrspace(1) %in1, ptr addrspace(1) %in2) #1 {282; CI-LABEL: unsafe_frem_f16:283; CI: ; %bb.0:284; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9285; CI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0xd286; CI-NEXT: s_waitcnt lgkmcnt(0)287; CI-NEXT: s_load_dword s6, s[2:3], 0x0288; CI-NEXT: s_load_dword s4, s[4:5], 0x2289; CI-NEXT: s_waitcnt lgkmcnt(0)290; CI-NEXT: v_cvt_f32_f16_e32 v0, s6291; CI-NEXT: v_cvt_f32_f16_e32 v1, s4292; CI-NEXT: v_div_scale_f32 v2, s[2:3], v1, v1, v0293; CI-NEXT: v_div_scale_f32 v3, vcc, v0, v1, v0294; CI-NEXT: v_rcp_f32_e32 v4, v2295; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3296; CI-NEXT: v_fma_f32 v5, -v2, v4, 1.0297; CI-NEXT: v_fma_f32 v4, v5, v4, v4298; CI-NEXT: v_mul_f32_e32 v5, v3, v4299; CI-NEXT: v_fma_f32 v6, -v2, v5, v3300; CI-NEXT: v_fma_f32 v5, v6, v4, v5301; CI-NEXT: v_fma_f32 v2, -v2, v5, v3302; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0303; CI-NEXT: v_div_fmas_f32 v2, v2, v4, v5304; CI-NEXT: s_mov_b32 s2, -1305; CI-NEXT: s_mov_b32 s3, 0xf000306; CI-NEXT: v_div_fixup_f32 v0, v2, v1, v0307; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 2, 2), 0308; CI-NEXT: v_cvt_f16_f32_e64 v0, -v0309; CI-NEXT: v_cvt_f32_f16_e32 v1, s4310; CI-NEXT: v_cvt_f32_f16_e32 v2, s6311; CI-NEXT: v_cvt_f32_f16_e32 v0, v0312; CI-NEXT: v_trunc_f32_e32 v0, v0313; CI-NEXT: v_cvt_f16_f32_e32 v0, v0314; CI-NEXT: v_cvt_f32_f16_e32 v0, v0315; CI-NEXT: v_fma_f32 v0, v0, v1, v2316; CI-NEXT: v_cvt_f16_f32_e32 v0, v0317; CI-NEXT: buffer_store_short v0, off, s[0:3], 0318; CI-NEXT: s_endpgm319;320; VI-LABEL: unsafe_frem_f16:321; VI: ; %bb.0:322; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24323; VI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x34324; VI-NEXT: s_waitcnt lgkmcnt(0)325; VI-NEXT: s_load_dword s2, s[2:3], 0x0326; VI-NEXT: s_load_dword s3, s[4:5], 0x8327; VI-NEXT: s_waitcnt lgkmcnt(0)328; VI-NEXT: v_cvt_f32_f16_e32 v0, s2329; VI-NEXT: v_cvt_f32_f16_e32 v2, s3330; VI-NEXT: v_mov_b32_e32 v1, s3331; VI-NEXT: v_rcp_f32_e32 v3, v2332; VI-NEXT: v_mul_f32_e32 v4, v0, v3333; VI-NEXT: v_mad_f32 v5, -v2, v4, v0334; VI-NEXT: v_mac_f32_e32 v4, v5, v3335; VI-NEXT: v_mad_f32 v0, -v2, v4, v0336; VI-NEXT: v_mul_f32_e32 v0, v0, v3337; VI-NEXT: v_and_b32_e32 v0, 0xff800000, v0338; VI-NEXT: v_add_f32_e32 v0, v0, v4339; VI-NEXT: v_cvt_f16_f32_e32 v0, v0340; VI-NEXT: v_div_fixup_f16 v0, v0, v1, s2341; VI-NEXT: v_trunc_f16_e32 v0, v0342; VI-NEXT: v_fma_f16 v2, -v0, v1, s2343; VI-NEXT: v_mov_b32_e32 v0, s0344; VI-NEXT: v_mov_b32_e32 v1, s1345; VI-NEXT: flat_store_short v[0:1], v2346; VI-NEXT: s_endpgm347 %gep2 = getelementptr half, ptr addrspace(1) %in2, i32 4348 %r0 = load half, ptr addrspace(1) %in1, align 4349 %r1 = load half, ptr addrspace(1) %gep2, align 4350 %r2 = frem afn half %r0, %r1351 store half %r2, ptr addrspace(1) %out, align 4352 ret void353}354 355define amdgpu_kernel void @frem_f32(ptr addrspace(1) %out, ptr addrspace(1) %in1, ptr addrspace(1) %in2) #0 {356; CI-LABEL: frem_f32:357; CI: ; %bb.0:358; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9359; CI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0xd360; CI-NEXT: s_waitcnt lgkmcnt(0)361; CI-NEXT: s_load_dword s2, s[2:3], 0x0362; CI-NEXT: s_load_dword s3, s[4:5], 0x4363; CI-NEXT: s_mov_b32 s4, 1364; CI-NEXT: s_waitcnt lgkmcnt(0)365; CI-NEXT: v_mov_b32_e32 v0, s3366; CI-NEXT: v_cmp_ngt_f32_e64 vcc, |s2|, |v0|367; CI-NEXT: ; implicit-def: $vgpr0368; CI-NEXT: s_cbranch_vccz .LBB3_2369; CI-NEXT: ; %bb.1: ; %frem.else370; CI-NEXT: s_and_b32 s4, s2, 0x80000000371; CI-NEXT: v_mov_b32_e32 v1, s3372; CI-NEXT: v_mov_b32_e32 v0, s2373; CI-NEXT: v_cmp_eq_f32_e64 vcc, |s2|, |v1|374; CI-NEXT: v_mov_b32_e32 v1, s4375; CI-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc376; CI-NEXT: s_mov_b32 s4, 0377; CI-NEXT: .LBB3_2: ; %Flow16378; CI-NEXT: s_xor_b32 s4, s4, 1379; CI-NEXT: s_cmp_lg_u32 s4, 0380; CI-NEXT: s_cbranch_scc1 .LBB3_8381; CI-NEXT: ; %bb.3: ; %frem.compute382; CI-NEXT: v_frexp_mant_f32_e64 v1, |s3|383; CI-NEXT: v_ldexp_f32_e64 v1, v1, 1384; CI-NEXT: v_div_scale_f32 v3, s[4:5], v1, v1, 1.0385; CI-NEXT: v_frexp_mant_f32_e64 v0, |s2|386; CI-NEXT: v_frexp_exp_i32_f32_e64 v5, |s2|387; CI-NEXT: v_frexp_exp_i32_f32_e64 v6, |s3|388; CI-NEXT: v_add_i32_e32 v2, vcc, -1, v5389; CI-NEXT: v_ldexp_f32_e64 v4, v0, 12390; CI-NEXT: v_add_i32_e32 v0, vcc, -1, v6391; CI-NEXT: v_sub_i32_e32 v2, vcc, v2, v0392; CI-NEXT: v_div_scale_f32 v7, vcc, 1.0, v1, 1.0393; CI-NEXT: v_rcp_f32_e32 v8, v3394; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3395; CI-NEXT: v_fma_f32 v9, -v3, v8, 1.0396; CI-NEXT: v_fma_f32 v8, v9, v8, v8397; CI-NEXT: v_mul_f32_e32 v9, v7, v8398; CI-NEXT: v_fma_f32 v10, -v3, v9, v7399; CI-NEXT: v_fma_f32 v9, v10, v8, v9400; CI-NEXT: v_fma_f32 v3, -v3, v9, v7401; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0402; CI-NEXT: v_div_fmas_f32 v3, v3, v8, v9403; CI-NEXT: v_cmp_ge_i32_e32 vcc, 12, v2404; CI-NEXT: v_div_fixup_f32 v3, v3, v1, 1.0405; CI-NEXT: s_cbranch_vccnz .LBB3_6406; CI-NEXT: ; %bb.4: ; %frem.loop_body.preheader407; CI-NEXT: v_add_i32_e32 v2, vcc, 12, v5408; CI-NEXT: v_sub_i32_e32 v2, vcc, v2, v6409; CI-NEXT: .LBB3_5: ; %frem.loop_body410; CI-NEXT: ; =>This Inner Loop Header: Depth=1411; CI-NEXT: v_mov_b32_e32 v5, v4412; CI-NEXT: v_mul_f32_e32 v4, v5, v3413; CI-NEXT: v_rndne_f32_e32 v4, v4414; CI-NEXT: v_fma_f32 v4, -v4, v1, v5415; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v4416; CI-NEXT: v_add_f32_e32 v6, v4, v1417; CI-NEXT: v_cndmask_b32_e32 v4, v4, v6, vcc418; CI-NEXT: v_add_i32_e32 v2, vcc, -12, v2419; CI-NEXT: v_ldexp_f32_e64 v4, v4, 12420; CI-NEXT: v_cmp_lt_i32_e32 vcc, 12, v2421; CI-NEXT: s_cbranch_vccnz .LBB3_5422; CI-NEXT: s_branch .LBB3_7423; CI-NEXT: .LBB3_6:424; CI-NEXT: v_mov_b32_e32 v5, v4425; CI-NEXT: .LBB3_7: ; %frem.loop_exit426; CI-NEXT: v_add_i32_e32 v2, vcc, -11, v2427; CI-NEXT: v_ldexp_f32_e32 v2, v5, v2428; CI-NEXT: v_mul_f32_e32 v3, v2, v3429; CI-NEXT: v_rndne_f32_e32 v3, v3430; CI-NEXT: v_fma_f32 v2, -v3, v1, v2431; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v2432; CI-NEXT: v_add_f32_e32 v1, v2, v1433; CI-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc434; CI-NEXT: v_ldexp_f32_e32 v0, v1, v0435; CI-NEXT: v_and_b32_e32 v0, 0x7fffffff, v0436; CI-NEXT: s_and_b32 s4, s2, 0x80000000437; CI-NEXT: v_or_b32_e32 v0, s4, v0438; CI-NEXT: .LBB3_8: ; %Flow17439; CI-NEXT: v_cmp_nlg_f32_e64 vcc, s3, 0440; CI-NEXT: v_mov_b32_e32 v1, 0x7fc00000441; CI-NEXT: v_mov_b32_e32 v2, 0x7f800000442; CI-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc443; CI-NEXT: v_cmp_nge_f32_e64 vcc, |s2|, v2444; CI-NEXT: v_cndmask_b32_e32 v0, v1, v0, vcc445; CI-NEXT: s_mov_b32 s2, -1446; CI-NEXT: s_mov_b32 s3, 0xf000447; CI-NEXT: buffer_store_dword v0, off, s[0:3], 0448; CI-NEXT: s_endpgm449;450; VI-LABEL: frem_f32:451; VI: ; %bb.0:452; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24453; VI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x34454; VI-NEXT: s_waitcnt lgkmcnt(0)455; VI-NEXT: s_load_dword s2, s[2:3], 0x0456; VI-NEXT: s_load_dword s3, s[4:5], 0x10457; VI-NEXT: s_mov_b32 s4, 1458; VI-NEXT: s_waitcnt lgkmcnt(0)459; VI-NEXT: v_mov_b32_e32 v0, s3460; VI-NEXT: v_cmp_ngt_f32_e64 vcc, |s2|, |v0|461; VI-NEXT: ; implicit-def: $vgpr0462; VI-NEXT: s_cbranch_vccz .LBB3_2463; VI-NEXT: ; %bb.1: ; %frem.else464; VI-NEXT: s_and_b32 s4, s2, 0x80000000465; VI-NEXT: v_mov_b32_e32 v1, s3466; VI-NEXT: v_mov_b32_e32 v0, s2467; VI-NEXT: v_cmp_eq_f32_e64 vcc, |s2|, |v1|468; VI-NEXT: v_mov_b32_e32 v1, s4469; VI-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc470; VI-NEXT: s_mov_b32 s4, 0471; VI-NEXT: .LBB3_2: ; %Flow16472; VI-NEXT: s_xor_b32 s4, s4, 1473; VI-NEXT: s_cmp_lg_u32 s4, 0474; VI-NEXT: s_cbranch_scc1 .LBB3_8475; VI-NEXT: ; %bb.3: ; %frem.compute476; VI-NEXT: v_frexp_mant_f32_e64 v1, |s3|477; VI-NEXT: v_ldexp_f32 v1, v1, 1478; VI-NEXT: v_div_scale_f32 v3, s[4:5], v1, v1, 1.0479; VI-NEXT: v_frexp_mant_f32_e64 v0, |s2|480; VI-NEXT: v_frexp_exp_i32_f32_e64 v5, |s2|481; VI-NEXT: v_frexp_exp_i32_f32_e64 v6, |s3|482; VI-NEXT: v_add_u32_e32 v2, vcc, -1, v5483; VI-NEXT: v_ldexp_f32 v4, v0, 12484; VI-NEXT: v_add_u32_e32 v0, vcc, -1, v6485; VI-NEXT: v_sub_u32_e32 v2, vcc, v2, v0486; VI-NEXT: v_div_scale_f32 v7, vcc, 1.0, v1, 1.0487; VI-NEXT: v_rcp_f32_e32 v8, v3488; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3489; VI-NEXT: v_fma_f32 v9, -v3, v8, 1.0490; VI-NEXT: v_fma_f32 v8, v9, v8, v8491; VI-NEXT: v_mul_f32_e32 v9, v7, v8492; VI-NEXT: v_fma_f32 v10, -v3, v9, v7493; VI-NEXT: v_fma_f32 v9, v10, v8, v9494; VI-NEXT: v_fma_f32 v3, -v3, v9, v7495; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0496; VI-NEXT: v_div_fmas_f32 v3, v3, v8, v9497; VI-NEXT: v_cmp_ge_i32_e32 vcc, 12, v2498; VI-NEXT: v_div_fixup_f32 v3, v3, v1, 1.0499; VI-NEXT: s_cbranch_vccnz .LBB3_6500; VI-NEXT: ; %bb.4: ; %frem.loop_body.preheader501; VI-NEXT: v_add_u32_e32 v2, vcc, 12, v5502; VI-NEXT: v_sub_u32_e32 v2, vcc, v2, v6503; VI-NEXT: .LBB3_5: ; %frem.loop_body504; VI-NEXT: ; =>This Inner Loop Header: Depth=1505; VI-NEXT: v_mov_b32_e32 v5, v4506; VI-NEXT: v_mul_f32_e32 v4, v5, v3507; VI-NEXT: v_rndne_f32_e32 v4, v4508; VI-NEXT: v_fma_f32 v4, -v4, v1, v5509; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v4510; VI-NEXT: v_add_f32_e32 v6, v4, v1511; VI-NEXT: v_cndmask_b32_e32 v4, v4, v6, vcc512; VI-NEXT: v_add_u32_e32 v2, vcc, -12, v2513; VI-NEXT: v_ldexp_f32 v4, v4, 12514; VI-NEXT: v_cmp_lt_i32_e32 vcc, 12, v2515; VI-NEXT: s_cbranch_vccnz .LBB3_5516; VI-NEXT: s_branch .LBB3_7517; VI-NEXT: .LBB3_6:518; VI-NEXT: v_mov_b32_e32 v5, v4519; VI-NEXT: .LBB3_7: ; %frem.loop_exit520; VI-NEXT: v_add_u32_e32 v2, vcc, -11, v2521; VI-NEXT: v_ldexp_f32 v2, v5, v2522; VI-NEXT: v_mul_f32_e32 v3, v2, v3523; VI-NEXT: v_rndne_f32_e32 v3, v3524; VI-NEXT: v_fma_f32 v2, -v3, v1, v2525; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v2526; VI-NEXT: v_add_f32_e32 v1, v2, v1527; VI-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc528; VI-NEXT: v_ldexp_f32 v0, v1, v0529; VI-NEXT: v_and_b32_e32 v0, 0x7fffffff, v0530; VI-NEXT: s_and_b32 s4, s2, 0x80000000531; VI-NEXT: v_or_b32_e32 v0, s4, v0532; VI-NEXT: .LBB3_8: ; %Flow17533; VI-NEXT: v_cmp_nlg_f32_e64 vcc, s3, 0534; VI-NEXT: v_mov_b32_e32 v1, 0x7fc00000535; VI-NEXT: v_mov_b32_e32 v2, 0x7f800000536; VI-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc537; VI-NEXT: v_cmp_nge_f32_e64 vcc, |s2|, v2538; VI-NEXT: v_cndmask_b32_e32 v2, v1, v0, vcc539; VI-NEXT: v_mov_b32_e32 v0, s0540; VI-NEXT: v_mov_b32_e32 v1, s1541; VI-NEXT: flat_store_dword v[0:1], v2542; VI-NEXT: s_endpgm543 %gep2 = getelementptr float, ptr addrspace(1) %in2, i32 4544 %r0 = load float, ptr addrspace(1) %in1, align 4545 %r1 = load float, ptr addrspace(1) %gep2, align 4546 %r2 = frem float %r0, %r1547 store float %r2, ptr addrspace(1) %out, align 4548 ret void549}550 551define amdgpu_kernel void @fast_frem_f32(ptr addrspace(1) %out, ptr addrspace(1) %in1, ptr addrspace(1) %in2) #0 {552; CI-LABEL: fast_frem_f32:553; CI: ; %bb.0:554; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9555; CI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0xd556; CI-NEXT: s_waitcnt lgkmcnt(0)557; CI-NEXT: s_load_dword s6, s[2:3], 0x0558; CI-NEXT: s_load_dword s2, s[4:5], 0x4559; CI-NEXT: s_waitcnt lgkmcnt(0)560; CI-NEXT: v_mov_b32_e32 v0, s2561; CI-NEXT: v_div_scale_f32 v1, s[2:3], v0, v0, s6562; CI-NEXT: v_div_scale_f32 v2, vcc, s6, v0, s6563; CI-NEXT: v_rcp_f32_e32 v3, v1564; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3565; CI-NEXT: v_fma_f32 v4, -v1, v3, 1.0566; CI-NEXT: v_fma_f32 v3, v4, v3, v3567; CI-NEXT: v_mul_f32_e32 v4, v2, v3568; CI-NEXT: v_fma_f32 v5, -v1, v4, v2569; CI-NEXT: v_fma_f32 v4, v5, v3, v4570; CI-NEXT: v_fma_f32 v1, -v1, v4, v2571; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0572; CI-NEXT: v_div_fmas_f32 v1, v1, v3, v4573; CI-NEXT: s_mov_b32 s2, -1574; CI-NEXT: s_mov_b32 s3, 0xf000575; CI-NEXT: v_div_fixup_f32 v1, v1, v0, s6576; CI-NEXT: v_trunc_f32_e32 v1, v1577; CI-NEXT: v_fma_f32 v0, -v1, v0, s6578; CI-NEXT: buffer_store_dword v0, off, s[0:3], 0579; CI-NEXT: s_endpgm580;581; VI-LABEL: fast_frem_f32:582; VI: ; %bb.0:583; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24584; VI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x34585; VI-NEXT: s_waitcnt lgkmcnt(0)586; VI-NEXT: s_load_dword s6, s[2:3], 0x0587; VI-NEXT: s_load_dword s2, s[4:5], 0x10588; VI-NEXT: s_waitcnt lgkmcnt(0)589; VI-NEXT: v_mov_b32_e32 v0, s2590; VI-NEXT: v_div_scale_f32 v1, s[2:3], v0, v0, s6591; VI-NEXT: v_div_scale_f32 v2, vcc, s6, v0, s6592; VI-NEXT: v_rcp_f32_e32 v3, v1593; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3594; VI-NEXT: v_fma_f32 v4, -v1, v3, 1.0595; VI-NEXT: v_fma_f32 v3, v4, v3, v3596; VI-NEXT: v_mul_f32_e32 v4, v2, v3597; VI-NEXT: v_fma_f32 v5, -v1, v4, v2598; VI-NEXT: v_fma_f32 v4, v5, v3, v4599; VI-NEXT: v_fma_f32 v1, -v1, v4, v2600; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0601; VI-NEXT: v_div_fmas_f32 v1, v1, v3, v4602; VI-NEXT: v_div_fixup_f32 v1, v1, v0, s6603; VI-NEXT: v_trunc_f32_e32 v1, v1604; VI-NEXT: v_fma_f32 v2, -v1, v0, s6605; VI-NEXT: v_mov_b32_e32 v0, s0606; VI-NEXT: v_mov_b32_e32 v1, s1607; VI-NEXT: flat_store_dword v[0:1], v2608; VI-NEXT: s_endpgm609 %gep2 = getelementptr float, ptr addrspace(1) %in2, i32 4610 %r0 = load float, ptr addrspace(1) %in1, align 4611 %r1 = load float, ptr addrspace(1) %gep2, align 4612 %r2 = frem fast float %r0, %r1613 store float %r2, ptr addrspace(1) %out, align 4614 ret void615}616 617define amdgpu_kernel void @unsafe_frem_f32(ptr addrspace(1) %out, ptr addrspace(1) %in1, ptr addrspace(1) %in2) #1 {618; CI-LABEL: unsafe_frem_f32:619; CI: ; %bb.0:620; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9621; CI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0xd622; CI-NEXT: s_waitcnt lgkmcnt(0)623; CI-NEXT: s_load_dword s6, s[2:3], 0x0624; CI-NEXT: s_load_dword s2, s[4:5], 0x4625; CI-NEXT: s_waitcnt lgkmcnt(0)626; CI-NEXT: v_mov_b32_e32 v0, s2627; CI-NEXT: v_div_scale_f32 v1, s[2:3], v0, v0, s6628; CI-NEXT: v_div_scale_f32 v2, vcc, s6, v0, s6629; CI-NEXT: v_rcp_f32_e32 v3, v1630; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3631; CI-NEXT: v_fma_f32 v4, -v1, v3, 1.0632; CI-NEXT: v_fma_f32 v3, v4, v3, v3633; CI-NEXT: v_mul_f32_e32 v4, v2, v3634; CI-NEXT: v_fma_f32 v5, -v1, v4, v2635; CI-NEXT: v_fma_f32 v4, v5, v3, v4636; CI-NEXT: v_fma_f32 v1, -v1, v4, v2637; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0638; CI-NEXT: v_div_fmas_f32 v1, v1, v3, v4639; CI-NEXT: s_mov_b32 s2, -1640; CI-NEXT: s_mov_b32 s3, 0xf000641; CI-NEXT: v_div_fixup_f32 v1, v1, v0, s6642; CI-NEXT: v_trunc_f32_e32 v1, v1643; CI-NEXT: v_fma_f32 v0, -v1, v0, s6644; CI-NEXT: buffer_store_dword v0, off, s[0:3], 0645; CI-NEXT: s_endpgm646;647; VI-LABEL: unsafe_frem_f32:648; VI: ; %bb.0:649; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24650; VI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x34651; VI-NEXT: s_waitcnt lgkmcnt(0)652; VI-NEXT: s_load_dword s6, s[2:3], 0x0653; VI-NEXT: s_load_dword s2, s[4:5], 0x10654; VI-NEXT: s_waitcnt lgkmcnt(0)655; VI-NEXT: v_mov_b32_e32 v0, s2656; VI-NEXT: v_div_scale_f32 v1, s[2:3], v0, v0, s6657; VI-NEXT: v_div_scale_f32 v2, vcc, s6, v0, s6658; VI-NEXT: v_rcp_f32_e32 v3, v1659; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 3660; VI-NEXT: v_fma_f32 v4, -v1, v3, 1.0661; VI-NEXT: v_fma_f32 v3, v4, v3, v3662; VI-NEXT: v_mul_f32_e32 v4, v2, v3663; VI-NEXT: v_fma_f32 v5, -v1, v4, v2664; VI-NEXT: v_fma_f32 v4, v5, v3, v4665; VI-NEXT: v_fma_f32 v1, -v1, v4, v2666; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 0667; VI-NEXT: v_div_fmas_f32 v1, v1, v3, v4668; VI-NEXT: v_div_fixup_f32 v1, v1, v0, s6669; VI-NEXT: v_trunc_f32_e32 v1, v1670; VI-NEXT: v_fma_f32 v2, -v1, v0, s6671; VI-NEXT: v_mov_b32_e32 v0, s0672; VI-NEXT: v_mov_b32_e32 v1, s1673; VI-NEXT: flat_store_dword v[0:1], v2674; VI-NEXT: s_endpgm675 %gep2 = getelementptr float, ptr addrspace(1) %in2, i32 4676 %r0 = load float, ptr addrspace(1) %in1, align 4677 %r1 = load float, ptr addrspace(1) %gep2, align 4678 %r2 = frem afn float %r0, %r1679 store float %r2, ptr addrspace(1) %out, align 4680 ret void681}682 683define amdgpu_kernel void @frem_f64(ptr addrspace(1) %out, ptr addrspace(1) %in1, ptr addrspace(1) %in2) #0 {684; CI-LABEL: frem_f64:685; CI: ; %bb.0:686; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9687; CI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0xd688; CI-NEXT: s_mov_b32 s6, 1689; CI-NEXT: s_waitcnt lgkmcnt(0)690; CI-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x0691; CI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0692; CI-NEXT: s_waitcnt lgkmcnt(0)693; CI-NEXT: v_mov_b32_e32 v0, s4694; CI-NEXT: v_mov_b32_e32 v1, s5695; CI-NEXT: v_cmp_ngt_f64_e64 vcc, |s[2:3]|, |v[0:1]|696; CI-NEXT: ; implicit-def: $vgpr0_vgpr1697; CI-NEXT: s_cbranch_vccz .LBB6_2698; CI-NEXT: ; %bb.1: ; %frem.else699; CI-NEXT: v_mov_b32_e32 v0, s4700; CI-NEXT: v_mov_b32_e32 v1, s5701; CI-NEXT: v_cmp_eq_f64_e64 vcc, |s[2:3]|, |v[0:1]|702; CI-NEXT: s_mov_b32 s6, 0703; CI-NEXT: s_brev_b32 s7, 1704; CI-NEXT: s_and_b64 s[6:7], s[2:3], s[6:7]705; CI-NEXT: v_mov_b32_e32 v0, s6706; CI-NEXT: v_mov_b32_e32 v1, s7707; CI-NEXT: v_mov_b32_e32 v2, s2708; CI-NEXT: v_mov_b32_e32 v3, s3709; CI-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc710; CI-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc711; CI-NEXT: s_mov_b32 s6, 0712; CI-NEXT: .LBB6_2: ; %Flow16713; CI-NEXT: s_xor_b32 s6, s6, 1714; CI-NEXT: s_cmp_lg_u32 s6, 0715; CI-NEXT: s_cbranch_scc1 .LBB6_8716; CI-NEXT: ; %bb.3: ; %frem.compute717; CI-NEXT: v_frexp_mant_f64_e64 v[0:1], |s[2:3]|718; CI-NEXT: v_frexp_exp_i32_f64_e64 v6, |s[2:3]|719; CI-NEXT: v_frexp_exp_i32_f64_e64 v7, |s[4:5]|720; CI-NEXT: v_ldexp_f64 v[4:5], v[0:1], 26721; CI-NEXT: v_frexp_mant_f64_e64 v[0:1], |s[4:5]|722; CI-NEXT: v_add_i32_e32 v2, vcc, -1, v6723; CI-NEXT: v_add_i32_e32 v8, vcc, -1, v7724; CI-NEXT: v_sub_i32_e32 v9, vcc, v2, v8725; CI-NEXT: v_ldexp_f64 v[0:1], v[0:1], 1726; CI-NEXT: v_div_scale_f64 v[2:3], s[6:7], v[0:1], v[0:1], 1.0727; CI-NEXT: v_div_scale_f64 v[14:15], vcc, 1.0, v[0:1], 1.0728; CI-NEXT: v_rcp_f64_e32 v[10:11], v[2:3]729; CI-NEXT: v_fma_f64 v[12:13], -v[2:3], v[10:11], 1.0730; CI-NEXT: v_fma_f64 v[10:11], v[10:11], v[12:13], v[10:11]731; CI-NEXT: v_fma_f64 v[12:13], -v[2:3], v[10:11], 1.0732; CI-NEXT: v_fma_f64 v[10:11], v[10:11], v[12:13], v[10:11]733; CI-NEXT: v_mul_f64 v[12:13], v[14:15], v[10:11]734; CI-NEXT: v_fma_f64 v[2:3], -v[2:3], v[12:13], v[14:15]735; CI-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[10:11], v[12:13]736; CI-NEXT: v_cmp_ge_i32_e32 vcc, 26, v9737; CI-NEXT: v_div_fixup_f64 v[2:3], v[2:3], v[0:1], 1.0738; CI-NEXT: s_cbranch_vccnz .LBB6_6739; CI-NEXT: ; %bb.4: ; %frem.loop_body.preheader740; CI-NEXT: v_add_i32_e32 v6, vcc, 26, v6741; CI-NEXT: v_sub_i32_e32 v9, vcc, v6, v7742; CI-NEXT: .LBB6_5: ; %frem.loop_body743; CI-NEXT: ; =>This Inner Loop Header: Depth=1744; CI-NEXT: v_mov_b32_e32 v7, v5745; CI-NEXT: v_mov_b32_e32 v6, v4746; CI-NEXT: v_mul_f64 v[4:5], v[6:7], v[2:3]747; CI-NEXT: v_rndne_f64_e32 v[4:5], v[4:5]748; CI-NEXT: v_fma_f64 v[4:5], -v[4:5], v[0:1], v[6:7]749; CI-NEXT: v_cmp_gt_f64_e32 vcc, 0, v[4:5]750; CI-NEXT: v_add_f64 v[10:11], v[4:5], v[0:1]751; CI-NEXT: v_cndmask_b32_e32 v4, v4, v10, vcc752; CI-NEXT: v_cndmask_b32_e32 v5, v5, v11, vcc753; CI-NEXT: v_ldexp_f64 v[4:5], v[4:5], 26754; CI-NEXT: v_add_i32_e32 v9, vcc, 0xffffffe6, v9755; CI-NEXT: v_cmp_lt_i32_e32 vcc, 26, v9756; CI-NEXT: s_cbranch_vccnz .LBB6_5757; CI-NEXT: s_branch .LBB6_7758; CI-NEXT: .LBB6_6:759; CI-NEXT: v_mov_b32_e32 v7, v5760; CI-NEXT: v_mov_b32_e32 v6, v4761; CI-NEXT: .LBB6_7: ; %frem.loop_exit762; CI-NEXT: v_add_i32_e32 v4, vcc, 0xffffffe7, v9763; CI-NEXT: v_ldexp_f64 v[4:5], v[6:7], v4764; CI-NEXT: s_mov_b32 s6, 0765; CI-NEXT: s_brev_b32 s7, 1766; CI-NEXT: s_and_b64 s[6:7], s[2:3], s[6:7]767; CI-NEXT: v_mul_f64 v[2:3], v[4:5], v[2:3]768; CI-NEXT: v_rndne_f64_e32 v[2:3], v[2:3]769; CI-NEXT: v_fma_f64 v[2:3], -v[2:3], v[0:1], v[4:5]770; CI-NEXT: v_cmp_gt_f64_e32 vcc, 0, v[2:3]771; CI-NEXT: v_add_f64 v[0:1], v[2:3], v[0:1]772; CI-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc773; CI-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc774; CI-NEXT: v_ldexp_f64 v[0:1], v[0:1], v8775; CI-NEXT: v_and_b32_e32 v1, 0x7fffffff, v1776; CI-NEXT: v_or_b32_e32 v0, s6, v0777; CI-NEXT: v_or_b32_e32 v1, s7, v1778; CI-NEXT: .LBB6_8: ; %Flow17779; CI-NEXT: v_cmp_nlg_f64_e64 vcc, s[4:5], 0780; CI-NEXT: v_mov_b32_e32 v2, 0x7ff80000781; CI-NEXT: v_cndmask_b32_e64 v3, v0, 0, vcc782; CI-NEXT: v_cndmask_b32_e32 v4, v1, v2, vcc783; CI-NEXT: v_mov_b32_e32 v0, 0784; CI-NEXT: v_mov_b32_e32 v1, 0x7ff00000785; CI-NEXT: v_cmp_nge_f64_e64 vcc, |s[2:3]|, v[0:1]786; CI-NEXT: s_mov_b32 s2, -1787; CI-NEXT: s_mov_b32 s3, 0xf000788; CI-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc789; CI-NEXT: v_cndmask_b32_e32 v1, v2, v4, vcc790; CI-NEXT: buffer_store_dwordx2 v[0:1], off, s[0:3], 0791; CI-NEXT: s_endpgm792;793; VI-LABEL: frem_f64:794; VI: ; %bb.0:795; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24796; VI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x34797; VI-NEXT: s_mov_b32 s6, 1798; VI-NEXT: s_waitcnt lgkmcnt(0)799; VI-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x0800; VI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0801; VI-NEXT: s_waitcnt lgkmcnt(0)802; VI-NEXT: v_mov_b32_e32 v0, s4803; VI-NEXT: v_mov_b32_e32 v1, s5804; VI-NEXT: v_cmp_ngt_f64_e64 vcc, |s[2:3]|, |v[0:1]|805; VI-NEXT: ; implicit-def: $vgpr0_vgpr1806; VI-NEXT: s_cbranch_vccz .LBB6_2807; VI-NEXT: ; %bb.1: ; %frem.else808; VI-NEXT: v_mov_b32_e32 v0, s4809; VI-NEXT: v_mov_b32_e32 v1, s5810; VI-NEXT: v_cmp_eq_f64_e64 vcc, |s[2:3]|, |v[0:1]|811; VI-NEXT: s_mov_b32 s6, 0812; VI-NEXT: s_brev_b32 s7, 1813; VI-NEXT: s_and_b64 s[6:7], s[2:3], s[6:7]814; VI-NEXT: v_mov_b32_e32 v0, s6815; VI-NEXT: v_mov_b32_e32 v1, s7816; VI-NEXT: v_mov_b32_e32 v2, s2817; VI-NEXT: v_mov_b32_e32 v3, s3818; VI-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc819; VI-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc820; VI-NEXT: s_mov_b32 s6, 0821; VI-NEXT: .LBB6_2: ; %Flow16822; VI-NEXT: s_xor_b32 s6, s6, 1823; VI-NEXT: s_cmp_lg_u32 s6, 0824; VI-NEXT: s_cbranch_scc1 .LBB6_8825; VI-NEXT: ; %bb.3: ; %frem.compute826; VI-NEXT: v_frexp_mant_f64_e64 v[0:1], |s[2:3]|827; VI-NEXT: v_frexp_exp_i32_f64_e64 v6, |s[2:3]|828; VI-NEXT: v_frexp_exp_i32_f64_e64 v7, |s[4:5]|829; VI-NEXT: v_ldexp_f64 v[4:5], v[0:1], 26830; VI-NEXT: v_frexp_mant_f64_e64 v[0:1], |s[4:5]|831; VI-NEXT: v_add_u32_e32 v2, vcc, -1, v6832; VI-NEXT: v_add_u32_e32 v8, vcc, -1, v7833; VI-NEXT: v_sub_u32_e32 v9, vcc, v2, v8834; VI-NEXT: v_ldexp_f64 v[0:1], v[0:1], 1835; VI-NEXT: v_div_scale_f64 v[2:3], s[6:7], v[0:1], v[0:1], 1.0836; VI-NEXT: v_div_scale_f64 v[14:15], vcc, 1.0, v[0:1], 1.0837; VI-NEXT: v_rcp_f64_e32 v[10:11], v[2:3]838; VI-NEXT: v_fma_f64 v[12:13], -v[2:3], v[10:11], 1.0839; VI-NEXT: v_fma_f64 v[10:11], v[10:11], v[12:13], v[10:11]840; VI-NEXT: v_fma_f64 v[12:13], -v[2:3], v[10:11], 1.0841; VI-NEXT: v_fma_f64 v[10:11], v[10:11], v[12:13], v[10:11]842; VI-NEXT: v_mul_f64 v[12:13], v[14:15], v[10:11]843; VI-NEXT: v_fma_f64 v[2:3], -v[2:3], v[12:13], v[14:15]844; VI-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[10:11], v[12:13]845; VI-NEXT: v_cmp_ge_i32_e32 vcc, 26, v9846; VI-NEXT: v_div_fixup_f64 v[2:3], v[2:3], v[0:1], 1.0847; VI-NEXT: s_cbranch_vccnz .LBB6_6848; VI-NEXT: ; %bb.4: ; %frem.loop_body.preheader849; VI-NEXT: v_add_u32_e32 v6, vcc, 26, v6850; VI-NEXT: v_sub_u32_e32 v9, vcc, v6, v7851; VI-NEXT: .LBB6_5: ; %frem.loop_body852; VI-NEXT: ; =>This Inner Loop Header: Depth=1853; VI-NEXT: v_mov_b32_e32 v7, v5854; VI-NEXT: v_mov_b32_e32 v6, v4855; VI-NEXT: v_mul_f64 v[4:5], v[6:7], v[2:3]856; VI-NEXT: v_rndne_f64_e32 v[4:5], v[4:5]857; VI-NEXT: v_fma_f64 v[4:5], -v[4:5], v[0:1], v[6:7]858; VI-NEXT: v_cmp_gt_f64_e32 vcc, 0, v[4:5]859; VI-NEXT: v_add_f64 v[10:11], v[4:5], v[0:1]860; VI-NEXT: v_cndmask_b32_e32 v4, v4, v10, vcc861; VI-NEXT: v_cndmask_b32_e32 v5, v5, v11, vcc862; VI-NEXT: v_ldexp_f64 v[4:5], v[4:5], 26863; VI-NEXT: v_add_u32_e32 v9, vcc, 0xffffffe6, v9864; VI-NEXT: v_cmp_lt_i32_e32 vcc, 26, v9865; VI-NEXT: s_cbranch_vccnz .LBB6_5866; VI-NEXT: s_branch .LBB6_7867; VI-NEXT: .LBB6_6:868; VI-NEXT: v_mov_b32_e32 v7, v5869; VI-NEXT: v_mov_b32_e32 v6, v4870; VI-NEXT: .LBB6_7: ; %frem.loop_exit871; VI-NEXT: v_add_u32_e32 v4, vcc, 0xffffffe7, v9872; VI-NEXT: v_ldexp_f64 v[4:5], v[6:7], v4873; VI-NEXT: s_mov_b32 s6, 0874; VI-NEXT: s_brev_b32 s7, 1875; VI-NEXT: s_and_b64 s[6:7], s[2:3], s[6:7]876; VI-NEXT: v_mul_f64 v[2:3], v[4:5], v[2:3]877; VI-NEXT: v_rndne_f64_e32 v[2:3], v[2:3]878; VI-NEXT: v_fma_f64 v[2:3], -v[2:3], v[0:1], v[4:5]879; VI-NEXT: v_cmp_gt_f64_e32 vcc, 0, v[2:3]880; VI-NEXT: v_add_f64 v[0:1], v[2:3], v[0:1]881; VI-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc882; VI-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc883; VI-NEXT: v_ldexp_f64 v[0:1], v[0:1], v8884; VI-NEXT: v_and_b32_e32 v1, 0x7fffffff, v1885; VI-NEXT: v_or_b32_e32 v0, s6, v0886; VI-NEXT: v_or_b32_e32 v1, s7, v1887; VI-NEXT: .LBB6_8: ; %Flow17888; VI-NEXT: v_cmp_nlg_f64_e64 vcc, s[4:5], 0889; VI-NEXT: v_mov_b32_e32 v2, 0x7ff80000890; VI-NEXT: v_cndmask_b32_e64 v3, v0, 0, vcc891; VI-NEXT: v_cndmask_b32_e32 v4, v1, v2, vcc892; VI-NEXT: v_mov_b32_e32 v0, 0893; VI-NEXT: v_mov_b32_e32 v1, 0x7ff00000894; VI-NEXT: v_cmp_nge_f64_e64 vcc, |s[2:3]|, v[0:1]895; VI-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc896; VI-NEXT: v_cndmask_b32_e32 v1, v2, v4, vcc897; VI-NEXT: v_mov_b32_e32 v3, s1898; VI-NEXT: v_mov_b32_e32 v2, s0899; VI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]900; VI-NEXT: s_endpgm901 %r0 = load double, ptr addrspace(1) %in1, align 8902 %r1 = load double, ptr addrspace(1) %in2, align 8903 %r2 = frem double %r0, %r1904 store double %r2, ptr addrspace(1) %out, align 8905 ret void906}907 908define amdgpu_kernel void @fast_frem_f64(ptr addrspace(1) %out, ptr addrspace(1) %in1, ptr addrspace(1) %in2) #0 {909; CI-LABEL: fast_frem_f64:910; CI: ; %bb.0:911; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9912; CI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0xd913; CI-NEXT: s_waitcnt lgkmcnt(0)914; CI-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x0915; CI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0916; CI-NEXT: s_waitcnt lgkmcnt(0)917; CI-NEXT: v_mov_b32_e32 v0, s4918; CI-NEXT: v_mov_b32_e32 v1, s5919; CI-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], s[2:3]920; CI-NEXT: v_div_scale_f64 v[8:9], vcc, s[2:3], v[0:1], s[2:3]921; CI-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]922; CI-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0923; CI-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]924; CI-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0925; CI-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]926; CI-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]927; CI-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]928; CI-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]929; CI-NEXT: v_div_fixup_f64 v[2:3], v[2:3], v[0:1], s[2:3]930; CI-NEXT: v_trunc_f64_e32 v[2:3], v[2:3]931; CI-NEXT: v_fma_f64 v[0:1], -v[2:3], v[0:1], s[2:3]932; CI-NEXT: s_mov_b32 s2, -1933; CI-NEXT: s_mov_b32 s3, 0xf000934; CI-NEXT: buffer_store_dwordx2 v[0:1], off, s[0:3], 0935; CI-NEXT: s_endpgm936;937; VI-LABEL: fast_frem_f64:938; VI: ; %bb.0:939; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24940; VI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x34941; VI-NEXT: s_waitcnt lgkmcnt(0)942; VI-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x0943; VI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0944; VI-NEXT: s_waitcnt lgkmcnt(0)945; VI-NEXT: v_mov_b32_e32 v0, s4946; VI-NEXT: v_mov_b32_e32 v1, s5947; VI-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], s[2:3]948; VI-NEXT: v_div_scale_f64 v[8:9], vcc, s[2:3], v[0:1], s[2:3]949; VI-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]950; VI-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0951; VI-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]952; VI-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0953; VI-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]954; VI-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]955; VI-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]956; VI-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]957; VI-NEXT: v_div_fixup_f64 v[2:3], v[2:3], v[0:1], s[2:3]958; VI-NEXT: v_trunc_f64_e32 v[2:3], v[2:3]959; VI-NEXT: v_fma_f64 v[0:1], -v[2:3], v[0:1], s[2:3]960; VI-NEXT: v_mov_b32_e32 v3, s1961; VI-NEXT: v_mov_b32_e32 v2, s0962; VI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]963; VI-NEXT: s_endpgm964 %r0 = load double, ptr addrspace(1) %in1, align 8965 %r1 = load double, ptr addrspace(1) %in2, align 8966 %r2 = frem fast double %r0, %r1967 store double %r2, ptr addrspace(1) %out, align 8968 ret void969}970 971define amdgpu_kernel void @unsafe_frem_f64(ptr addrspace(1) %out, ptr addrspace(1) %in1,972; CI-LABEL: unsafe_frem_f64:973; CI: ; %bb.0:974; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9975; CI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0xd976; CI-NEXT: s_waitcnt lgkmcnt(0)977; CI-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x0978; CI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0979; CI-NEXT: s_waitcnt lgkmcnt(0)980; CI-NEXT: v_mov_b32_e32 v0, s4981; CI-NEXT: v_mov_b32_e32 v1, s5982; CI-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], s[2:3]983; CI-NEXT: v_div_scale_f64 v[8:9], vcc, s[2:3], v[0:1], s[2:3]984; CI-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]985; CI-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0986; CI-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]987; CI-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.0988; CI-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]989; CI-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]990; CI-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]991; CI-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]992; CI-NEXT: v_div_fixup_f64 v[2:3], v[2:3], v[0:1], s[2:3]993; CI-NEXT: v_trunc_f64_e32 v[2:3], v[2:3]994; CI-NEXT: v_fma_f64 v[0:1], -v[2:3], v[0:1], s[2:3]995; CI-NEXT: s_mov_b32 s2, -1996; CI-NEXT: s_mov_b32 s3, 0xf000997; CI-NEXT: buffer_store_dwordx2 v[0:1], off, s[0:3], 0998; CI-NEXT: s_endpgm999;1000; VI-LABEL: unsafe_frem_f64:1001; VI: ; %bb.0:1002; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241003; VI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x341004; VI-NEXT: s_waitcnt lgkmcnt(0)1005; VI-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x01006; VI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x01007; VI-NEXT: s_waitcnt lgkmcnt(0)1008; VI-NEXT: v_mov_b32_e32 v0, s41009; VI-NEXT: v_mov_b32_e32 v1, s51010; VI-NEXT: v_div_scale_f64 v[2:3], s[4:5], v[0:1], v[0:1], s[2:3]1011; VI-NEXT: v_div_scale_f64 v[8:9], vcc, s[2:3], v[0:1], s[2:3]1012; VI-NEXT: v_rcp_f64_e32 v[4:5], v[2:3]1013; VI-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.01014; VI-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1015; VI-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 1.01016; VI-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1017; VI-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]1018; VI-NEXT: v_fma_f64 v[2:3], -v[2:3], v[6:7], v[8:9]1019; VI-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[4:5], v[6:7]1020; VI-NEXT: v_div_fixup_f64 v[2:3], v[2:3], v[0:1], s[2:3]1021; VI-NEXT: v_trunc_f64_e32 v[2:3], v[2:3]1022; VI-NEXT: v_fma_f64 v[0:1], -v[2:3], v[0:1], s[2:3]1023; VI-NEXT: v_mov_b32_e32 v3, s11024; VI-NEXT: v_mov_b32_e32 v2, s01025; VI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]1026; VI-NEXT: s_endpgm1027 ptr addrspace(1) %in2) #1 {1028 %r0 = load double, ptr addrspace(1) %in1, align 81029 %r1 = load double, ptr addrspace(1) %in2, align 81030 %r2 = frem afn double %r0, %r11031 store double %r2, ptr addrspace(1) %out, align 81032 ret void1033}1034 1035define amdgpu_kernel void @frem_v2f16(ptr addrspace(1) %out, ptr addrspace(1) %in1, ptr addrspace(1) %in2) #0 {1036; CI-LABEL: frem_v2f16:1037; CI: ; %bb.0:1038; CI-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x91039; CI-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0xd1040; CI-NEXT: ; implicit-def: $vgpr01041; CI-NEXT: s_waitcnt lgkmcnt(0)1042; CI-NEXT: s_load_dword s0, s[10:11], 0x01043; CI-NEXT: s_load_dword s1, s[2:3], 0x41044; CI-NEXT: s_mov_b32 s2, 11045; CI-NEXT: s_waitcnt lgkmcnt(0)1046; CI-NEXT: v_cvt_f32_f16_e64 v2, |s0|1047; CI-NEXT: v_cvt_f32_f16_e64 v1, |s1|1048; CI-NEXT: v_cmp_ngt_f32_e32 vcc, v2, v11049; CI-NEXT: s_cbranch_vccz .LBB9_21050; CI-NEXT: ; %bb.1: ; %frem.else201051; CI-NEXT: s_and_b32 s2, s0, 0x80001052; CI-NEXT: v_cmp_eq_f32_e32 vcc, v2, v11053; CI-NEXT: v_mov_b32_e32 v0, s21054; CI-NEXT: v_mov_b32_e32 v3, s01055; CI-NEXT: v_cndmask_b32_e32 v0, v3, v0, vcc1056; CI-NEXT: s_mov_b32 s2, 01057; CI-NEXT: .LBB9_2: ; %Flow571058; CI-NEXT: s_xor_b32 s2, s2, 11059; CI-NEXT: s_cmp_lg_u32 s2, 01060; CI-NEXT: s_cbranch_scc1 .LBB9_81061; CI-NEXT: ; %bb.3: ; %frem.compute191062; CI-NEXT: v_frexp_mant_f32_e32 v3, v11063; CI-NEXT: v_frexp_exp_i32_f32_e32 v6, v11064; CI-NEXT: v_ldexp_f32_e64 v1, v3, 11065; CI-NEXT: v_div_scale_f32 v3, s[2:3], v1, v1, 1.01066; CI-NEXT: v_frexp_mant_f32_e32 v0, v21067; CI-NEXT: v_frexp_exp_i32_f32_e32 v5, v21068; CI-NEXT: v_add_i32_e32 v2, vcc, -1, v51069; CI-NEXT: v_ldexp_f32_e64 v4, v0, 111070; CI-NEXT: v_add_i32_e32 v0, vcc, -1, v61071; CI-NEXT: v_sub_i32_e32 v2, vcc, v2, v01072; CI-NEXT: v_div_scale_f32 v7, vcc, 1.0, v1, 1.01073; CI-NEXT: v_rcp_f32_e32 v8, v31074; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 31075; CI-NEXT: v_fma_f32 v9, -v3, v8, 1.01076; CI-NEXT: v_fma_f32 v8, v9, v8, v81077; CI-NEXT: v_mul_f32_e32 v9, v7, v81078; CI-NEXT: v_fma_f32 v10, -v3, v9, v71079; CI-NEXT: v_fma_f32 v9, v10, v8, v91080; CI-NEXT: v_fma_f32 v3, -v3, v9, v71081; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 01082; CI-NEXT: v_div_fmas_f32 v3, v3, v8, v91083; CI-NEXT: v_cmp_ge_i32_e32 vcc, 11, v21084; CI-NEXT: v_div_fixup_f32 v3, v3, v1, 1.01085; CI-NEXT: s_cbranch_vccnz .LBB9_61086; CI-NEXT: ; %bb.4: ; %frem.loop_body27.preheader1087; CI-NEXT: v_add_i32_e32 v2, vcc, 11, v51088; CI-NEXT: v_sub_i32_e32 v2, vcc, v2, v61089; CI-NEXT: .LBB9_5: ; %frem.loop_body271090; CI-NEXT: ; =>This Inner Loop Header: Depth=11091; CI-NEXT: v_mov_b32_e32 v5, v41092; CI-NEXT: v_mul_f32_e32 v4, v5, v31093; CI-NEXT: v_rndne_f32_e32 v4, v41094; CI-NEXT: v_fma_f32 v4, -v4, v1, v51095; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v41096; CI-NEXT: v_add_f32_e32 v6, v4, v11097; CI-NEXT: v_cndmask_b32_e32 v4, v4, v6, vcc1098; CI-NEXT: v_add_i32_e32 v2, vcc, -11, v21099; CI-NEXT: v_ldexp_f32_e64 v4, v4, 111100; CI-NEXT: v_cmp_lt_i32_e32 vcc, 11, v21101; CI-NEXT: s_cbranch_vccnz .LBB9_51102; CI-NEXT: s_branch .LBB9_71103; CI-NEXT: .LBB9_6:1104; CI-NEXT: v_mov_b32_e32 v5, v41105; CI-NEXT: .LBB9_7: ; %frem.loop_exit281106; CI-NEXT: v_add_i32_e32 v2, vcc, -10, v21107; CI-NEXT: v_ldexp_f32_e32 v2, v5, v21108; CI-NEXT: v_mul_f32_e32 v3, v2, v31109; CI-NEXT: v_rndne_f32_e32 v3, v31110; CI-NEXT: v_fma_f32 v2, -v3, v1, v21111; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v21112; CI-NEXT: v_add_f32_e32 v1, v2, v11113; CI-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc1114; CI-NEXT: v_ldexp_f32_e32 v0, v1, v01115; CI-NEXT: v_cvt_f16_f32_e32 v0, v01116; CI-NEXT: s_and_b32 s2, s0, 0x80001117; CI-NEXT: v_and_b32_e32 v0, 0x7fff, v01118; CI-NEXT: v_or_b32_e32 v0, s2, v01119; CI-NEXT: .LBB9_8: ; %Flow581120; CI-NEXT: s_lshr_b32 s2, s0, 161121; CI-NEXT: s_lshr_b32 s3, s1, 161122; CI-NEXT: v_cvt_f32_f16_e64 v3, |s2|1123; CI-NEXT: v_cvt_f32_f16_e64 v2, |s3|1124; CI-NEXT: s_mov_b32 s4, 11125; CI-NEXT: ; implicit-def: $vgpr11126; CI-NEXT: v_cmp_ngt_f32_e32 vcc, v3, v21127; CI-NEXT: s_cbranch_vccz .LBB9_101128; CI-NEXT: ; %bb.9: ; %frem.else1129; CI-NEXT: s_and_b32 s4, s2, 0x80001130; CI-NEXT: v_cmp_eq_f32_e32 vcc, v3, v21131; CI-NEXT: v_mov_b32_e32 v1, s41132; CI-NEXT: v_mov_b32_e32 v4, s21133; CI-NEXT: v_cndmask_b32_e32 v1, v4, v1, vcc1134; CI-NEXT: s_mov_b32 s4, 01135; CI-NEXT: .LBB9_10: ; %Flow531136; CI-NEXT: s_xor_b32 s4, s4, 11137; CI-NEXT: s_cmp_lg_u32 s4, 01138; CI-NEXT: s_cbranch_scc1 .LBB9_161139; CI-NEXT: ; %bb.11: ; %frem.compute1140; CI-NEXT: v_frexp_mant_f32_e32 v4, v21141; CI-NEXT: v_frexp_exp_i32_f32_e32 v7, v21142; CI-NEXT: v_ldexp_f32_e64 v2, v4, 11143; CI-NEXT: v_div_scale_f32 v4, s[4:5], v2, v2, 1.01144; CI-NEXT: v_frexp_mant_f32_e32 v1, v31145; CI-NEXT: v_frexp_exp_i32_f32_e32 v6, v31146; CI-NEXT: v_add_i32_e32 v3, vcc, -1, v61147; CI-NEXT: v_ldexp_f32_e64 v5, v1, 111148; CI-NEXT: v_add_i32_e32 v1, vcc, -1, v71149; CI-NEXT: v_sub_i32_e32 v3, vcc, v3, v11150; CI-NEXT: v_div_scale_f32 v8, vcc, 1.0, v2, 1.01151; CI-NEXT: v_rcp_f32_e32 v9, v41152; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 31153; CI-NEXT: v_fma_f32 v10, -v4, v9, 1.01154; CI-NEXT: v_fma_f32 v9, v10, v9, v91155; CI-NEXT: v_mul_f32_e32 v10, v8, v91156; CI-NEXT: v_fma_f32 v11, -v4, v10, v81157; CI-NEXT: v_fma_f32 v10, v11, v9, v101158; CI-NEXT: v_fma_f32 v4, -v4, v10, v81159; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 01160; CI-NEXT: v_div_fmas_f32 v4, v4, v9, v101161; CI-NEXT: v_cmp_ge_i32_e32 vcc, 11, v31162; CI-NEXT: v_div_fixup_f32 v4, v4, v2, 1.01163; CI-NEXT: s_cbranch_vccnz .LBB9_141164; CI-NEXT: ; %bb.12: ; %frem.loop_body.preheader1165; CI-NEXT: v_add_i32_e32 v3, vcc, 11, v61166; CI-NEXT: v_sub_i32_e32 v3, vcc, v3, v71167; CI-NEXT: .LBB9_13: ; %frem.loop_body1168; CI-NEXT: ; =>This Inner Loop Header: Depth=11169; CI-NEXT: v_mov_b32_e32 v6, v51170; CI-NEXT: v_mul_f32_e32 v5, v6, v41171; CI-NEXT: v_rndne_f32_e32 v5, v51172; CI-NEXT: v_fma_f32 v5, -v5, v2, v61173; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v51174; CI-NEXT: v_add_f32_e32 v7, v5, v21175; CI-NEXT: v_cndmask_b32_e32 v5, v5, v7, vcc1176; CI-NEXT: v_add_i32_e32 v3, vcc, -11, v31177; CI-NEXT: v_ldexp_f32_e64 v5, v5, 111178; CI-NEXT: v_cmp_lt_i32_e32 vcc, 11, v31179; CI-NEXT: s_cbranch_vccnz .LBB9_131180; CI-NEXT: s_branch .LBB9_151181; CI-NEXT: .LBB9_14:1182; CI-NEXT: v_mov_b32_e32 v6, v51183; CI-NEXT: .LBB9_15: ; %frem.loop_exit1184; CI-NEXT: v_add_i32_e32 v3, vcc, -10, v31185; CI-NEXT: v_ldexp_f32_e32 v3, v6, v31186; CI-NEXT: v_mul_f32_e32 v4, v3, v41187; CI-NEXT: v_rndne_f32_e32 v4, v41188; CI-NEXT: v_fma_f32 v3, -v4, v2, v31189; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v31190; CI-NEXT: v_add_f32_e32 v2, v3, v21191; CI-NEXT: v_cndmask_b32_e32 v2, v3, v2, vcc1192; CI-NEXT: v_ldexp_f32_e32 v1, v2, v11193; CI-NEXT: v_cvt_f16_f32_e32 v1, v11194; CI-NEXT: s_and_b32 s4, s2, 0x80001195; CI-NEXT: v_and_b32_e32 v1, 0x7fff, v11196; CI-NEXT: v_or_b32_e32 v1, s4, v11197; CI-NEXT: .LBB9_16: ; %Flow541198; CI-NEXT: v_cvt_f32_f16_e32 v2, s11199; CI-NEXT: s_and_b32 s0, s0, 0x7fff1200; CI-NEXT: s_cmpk_lg_i32 s0, 0x7c001201; CI-NEXT: s_cselect_b32 s4, 1, 01202; CI-NEXT: v_cmp_nlg_f32_e32 vcc, 0, v21203; CI-NEXT: v_cvt_f32_f16_e32 v2, s31204; CI-NEXT: s_and_b32 s2, s2, 0x7fff1205; CI-NEXT: s_cmpk_lg_i32 s2, 0x7c001206; CI-NEXT: s_cselect_b32 s2, 1, 01207; CI-NEXT: v_cmp_nlg_f32_e64 s[0:1], 0, v21208; CI-NEXT: v_and_b32_e32 v0, 0xffff, v01209; CI-NEXT: v_mov_b32_e32 v2, 0x7e001210; CI-NEXT: s_and_b32 s3, 1, s41211; CI-NEXT: v_and_b32_e32 v1, 0xffff, v11212; CI-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc1213; CI-NEXT: v_cmp_ne_u32_e64 vcc, 0, s31214; CI-NEXT: v_cndmask_b32_e64 v1, v1, v2, s[0:1]1215; CI-NEXT: s_and_b32 s0, 1, s21216; CI-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1217; CI-NEXT: v_cmp_ne_u32_e64 vcc, 0, s01218; CI-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc1219; CI-NEXT: v_lshlrev_b32_e32 v1, 16, v11220; CI-NEXT: v_or_b32_e32 v0, v0, v11221; CI-NEXT: s_mov_b32 s10, -11222; CI-NEXT: s_mov_b32 s11, 0xf0001223; CI-NEXT: buffer_store_dword v0, off, s[8:11], 01224; CI-NEXT: s_endpgm1225;1226; VI-LABEL: frem_v2f16:1227; VI: ; %bb.0:1228; VI-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x241229; VI-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x341230; VI-NEXT: ; implicit-def: $vgpr01231; VI-NEXT: s_waitcnt lgkmcnt(0)1232; VI-NEXT: s_load_dword s0, s[10:11], 0x01233; VI-NEXT: s_load_dword s1, s[2:3], 0x101234; VI-NEXT: s_mov_b32 s2, 11235; VI-NEXT: s_waitcnt lgkmcnt(0)1236; VI-NEXT: v_cvt_f32_f16_e64 v2, |s0|1237; VI-NEXT: v_cvt_f32_f16_e64 v1, |s1|1238; VI-NEXT: v_cmp_ngt_f32_e32 vcc, v2, v11239; VI-NEXT: s_cbranch_vccz .LBB9_21240; VI-NEXT: ; %bb.1: ; %frem.else201241; VI-NEXT: s_and_b32 s2, s0, 0x80001242; VI-NEXT: v_cmp_eq_f32_e32 vcc, v2, v11243; VI-NEXT: v_mov_b32_e32 v0, s21244; VI-NEXT: v_mov_b32_e32 v3, s01245; VI-NEXT: v_cndmask_b32_e32 v0, v3, v0, vcc1246; VI-NEXT: s_mov_b32 s2, 01247; VI-NEXT: .LBB9_2: ; %Flow571248; VI-NEXT: s_xor_b32 s2, s2, 11249; VI-NEXT: s_cmp_lg_u32 s2, 01250; VI-NEXT: s_cbranch_scc1 .LBB9_81251; VI-NEXT: ; %bb.3: ; %frem.compute191252; VI-NEXT: v_frexp_mant_f32_e32 v3, v11253; VI-NEXT: v_frexp_exp_i32_f32_e32 v6, v11254; VI-NEXT: v_ldexp_f32 v1, v3, 11255; VI-NEXT: v_div_scale_f32 v3, s[2:3], v1, v1, 1.01256; VI-NEXT: v_frexp_mant_f32_e32 v0, v21257; VI-NEXT: v_frexp_exp_i32_f32_e32 v5, v21258; VI-NEXT: v_add_u32_e32 v2, vcc, -1, v51259; VI-NEXT: v_ldexp_f32 v4, v0, 111260; VI-NEXT: v_add_u32_e32 v0, vcc, -1, v61261; VI-NEXT: v_sub_u32_e32 v2, vcc, v2, v01262; VI-NEXT: v_div_scale_f32 v7, vcc, 1.0, v1, 1.01263; VI-NEXT: v_rcp_f32_e32 v8, v31264; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 31265; VI-NEXT: v_fma_f32 v9, -v3, v8, 1.01266; VI-NEXT: v_fma_f32 v8, v9, v8, v81267; VI-NEXT: v_mul_f32_e32 v9, v7, v81268; VI-NEXT: v_fma_f32 v10, -v3, v9, v71269; VI-NEXT: v_fma_f32 v9, v10, v8, v91270; VI-NEXT: v_fma_f32 v3, -v3, v9, v71271; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 01272; VI-NEXT: v_div_fmas_f32 v3, v3, v8, v91273; VI-NEXT: v_cmp_ge_i32_e32 vcc, 11, v21274; VI-NEXT: v_div_fixup_f32 v3, v3, v1, 1.01275; VI-NEXT: s_cbranch_vccnz .LBB9_61276; VI-NEXT: ; %bb.4: ; %frem.loop_body27.preheader1277; VI-NEXT: v_add_u32_e32 v2, vcc, 11, v51278; VI-NEXT: v_sub_u32_e32 v2, vcc, v2, v61279; VI-NEXT: .LBB9_5: ; %frem.loop_body271280; VI-NEXT: ; =>This Inner Loop Header: Depth=11281; VI-NEXT: v_mov_b32_e32 v5, v41282; VI-NEXT: v_mul_f32_e32 v4, v5, v31283; VI-NEXT: v_rndne_f32_e32 v4, v41284; VI-NEXT: v_fma_f32 v4, -v4, v1, v51285; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v41286; VI-NEXT: v_add_f32_e32 v6, v4, v11287; VI-NEXT: v_cndmask_b32_e32 v4, v4, v6, vcc1288; VI-NEXT: v_add_u32_e32 v2, vcc, -11, v21289; VI-NEXT: v_ldexp_f32 v4, v4, 111290; VI-NEXT: v_cmp_lt_i32_e32 vcc, 11, v21291; VI-NEXT: s_cbranch_vccnz .LBB9_51292; VI-NEXT: s_branch .LBB9_71293; VI-NEXT: .LBB9_6:1294; VI-NEXT: v_mov_b32_e32 v5, v41295; VI-NEXT: .LBB9_7: ; %frem.loop_exit281296; VI-NEXT: v_add_u32_e32 v2, vcc, -10, v21297; VI-NEXT: v_ldexp_f32 v2, v5, v21298; VI-NEXT: v_mul_f32_e32 v3, v2, v31299; VI-NEXT: v_rndne_f32_e32 v3, v31300; VI-NEXT: v_fma_f32 v2, -v3, v1, v21301; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v21302; VI-NEXT: v_add_f32_e32 v1, v2, v11303; VI-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc1304; VI-NEXT: v_ldexp_f32 v0, v1, v01305; VI-NEXT: v_cvt_f16_f32_e32 v0, v01306; VI-NEXT: s_and_b32 s2, s0, 0x80001307; VI-NEXT: v_and_b32_e32 v0, 0x7fff, v01308; VI-NEXT: v_or_b32_e32 v0, s2, v01309; VI-NEXT: .LBB9_8: ; %Flow581310; VI-NEXT: s_lshr_b32 s4, s0, 161311; VI-NEXT: s_lshr_b32 s2, s1, 161312; VI-NEXT: v_cvt_f32_f16_e64 v3, |s4|1313; VI-NEXT: v_cvt_f32_f16_e64 v2, |s2|1314; VI-NEXT: s_mov_b32 s3, 11315; VI-NEXT: ; implicit-def: $vgpr11316; VI-NEXT: v_cmp_ngt_f32_e32 vcc, v3, v21317; VI-NEXT: s_cbranch_vccz .LBB9_101318; VI-NEXT: ; %bb.9: ; %frem.else1319; VI-NEXT: s_and_b32 s3, s4, 0x80001320; VI-NEXT: v_cmp_eq_f32_e32 vcc, v3, v21321; VI-NEXT: v_mov_b32_e32 v1, s31322; VI-NEXT: v_mov_b32_e32 v4, s41323; VI-NEXT: v_cndmask_b32_e32 v1, v4, v1, vcc1324; VI-NEXT: s_mov_b32 s3, 01325; VI-NEXT: .LBB9_10: ; %Flow531326; VI-NEXT: s_xor_b32 s3, s3, 11327; VI-NEXT: s_cmp_lg_u32 s3, 01328; VI-NEXT: s_cbranch_scc1 .LBB9_161329; VI-NEXT: ; %bb.11: ; %frem.compute1330; VI-NEXT: v_frexp_mant_f32_e32 v4, v21331; VI-NEXT: v_frexp_exp_i32_f32_e32 v7, v21332; VI-NEXT: v_ldexp_f32 v2, v4, 11333; VI-NEXT: v_div_scale_f32 v4, s[6:7], v2, v2, 1.01334; VI-NEXT: v_frexp_mant_f32_e32 v1, v31335; VI-NEXT: v_frexp_exp_i32_f32_e32 v6, v31336; VI-NEXT: v_add_u32_e32 v3, vcc, -1, v61337; VI-NEXT: v_ldexp_f32 v5, v1, 111338; VI-NEXT: v_add_u32_e32 v1, vcc, -1, v71339; VI-NEXT: v_sub_u32_e32 v3, vcc, v3, v11340; VI-NEXT: v_div_scale_f32 v8, vcc, 1.0, v2, 1.01341; VI-NEXT: v_rcp_f32_e32 v9, v41342; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 31343; VI-NEXT: v_fma_f32 v10, -v4, v9, 1.01344; VI-NEXT: v_fma_f32 v9, v10, v9, v91345; VI-NEXT: v_mul_f32_e32 v10, v8, v91346; VI-NEXT: v_fma_f32 v11, -v4, v10, v81347; VI-NEXT: v_fma_f32 v10, v11, v9, v101348; VI-NEXT: v_fma_f32 v4, -v4, v10, v81349; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 01350; VI-NEXT: v_div_fmas_f32 v4, v4, v9, v101351; VI-NEXT: v_cmp_ge_i32_e32 vcc, 11, v31352; VI-NEXT: v_div_fixup_f32 v4, v4, v2, 1.01353; VI-NEXT: s_cbranch_vccnz .LBB9_141354; VI-NEXT: ; %bb.12: ; %frem.loop_body.preheader1355; VI-NEXT: v_add_u32_e32 v3, vcc, 11, v61356; VI-NEXT: v_sub_u32_e32 v3, vcc, v3, v71357; VI-NEXT: .LBB9_13: ; %frem.loop_body1358; VI-NEXT: ; =>This Inner Loop Header: Depth=11359; VI-NEXT: v_mov_b32_e32 v6, v51360; VI-NEXT: v_mul_f32_e32 v5, v6, v41361; VI-NEXT: v_rndne_f32_e32 v5, v51362; VI-NEXT: v_fma_f32 v5, -v5, v2, v61363; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v51364; VI-NEXT: v_add_f32_e32 v7, v5, v21365; VI-NEXT: v_cndmask_b32_e32 v5, v5, v7, vcc1366; VI-NEXT: v_add_u32_e32 v3, vcc, -11, v31367; VI-NEXT: v_ldexp_f32 v5, v5, 111368; VI-NEXT: v_cmp_lt_i32_e32 vcc, 11, v31369; VI-NEXT: s_cbranch_vccnz .LBB9_131370; VI-NEXT: s_branch .LBB9_151371; VI-NEXT: .LBB9_14:1372; VI-NEXT: v_mov_b32_e32 v6, v51373; VI-NEXT: .LBB9_15: ; %frem.loop_exit1374; VI-NEXT: v_add_u32_e32 v3, vcc, -10, v31375; VI-NEXT: v_ldexp_f32 v3, v6, v31376; VI-NEXT: v_mul_f32_e32 v4, v3, v41377; VI-NEXT: v_rndne_f32_e32 v4, v41378; VI-NEXT: v_fma_f32 v3, -v4, v2, v31379; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v31380; VI-NEXT: v_add_f32_e32 v2, v3, v21381; VI-NEXT: v_cndmask_b32_e32 v2, v3, v2, vcc1382; VI-NEXT: v_ldexp_f32 v1, v2, v11383; VI-NEXT: v_cvt_f16_f32_e32 v1, v11384; VI-NEXT: s_and_b32 s3, s4, 0x80001385; VI-NEXT: v_and_b32_e32 v1, 0x7fff, v11386; VI-NEXT: v_or_b32_e32 v1, s3, v11387; VI-NEXT: .LBB9_16: ; %Flow541388; VI-NEXT: v_mov_b32_e32 v2, 0x7c001389; VI-NEXT: v_cmp_nlg_f16_e64 vcc, s1, 01390; VI-NEXT: v_cmp_nge_f16_e64 s[0:1], |s0|, v21391; VI-NEXT: v_cmp_nlg_f16_e64 s[2:3], s2, 01392; VI-NEXT: v_cmp_nge_f16_e64 s[4:5], |s4|, v21393; VI-NEXT: v_mov_b32_e32 v2, 0x7e001394; VI-NEXT: v_cndmask_b32_sdwa v0, v0, v2, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1395; VI-NEXT: s_mov_b64 vcc, s[2:3]1396; VI-NEXT: v_cndmask_b32_sdwa v1, v1, v2, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD1397; VI-NEXT: s_mov_b64 vcc, s[4:5]1398; VI-NEXT: v_cndmask_b32_e64 v0, v2, v0, s[0:1]1399; VI-NEXT: v_cndmask_b32_sdwa v1, v2, v1, vcc dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD1400; VI-NEXT: v_or_b32_e32 v2, v0, v11401; VI-NEXT: v_mov_b32_e32 v0, s81402; VI-NEXT: v_mov_b32_e32 v1, s91403; VI-NEXT: flat_store_dword v[0:1], v21404; VI-NEXT: s_endpgm1405 %gep2 = getelementptr <2 x half>, ptr addrspace(1) %in2, i32 41406 %r0 = load <2 x half>, ptr addrspace(1) %in1, align 81407 %r1 = load <2 x half>, ptr addrspace(1) %gep2, align 81408 %r2 = frem <2 x half> %r0, %r11409 store <2 x half> %r2, ptr addrspace(1) %out, align 81410 ret void1411}1412 1413define amdgpu_kernel void @frem_v4f16(ptr addrspace(1) %out, ptr addrspace(1) %in1, ptr addrspace(1) %in2) #0 {1414; CI-LABEL: frem_v4f16:1415; CI: ; %bb.0:1416; CI-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x91417; CI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0xd1418; CI-NEXT: ; implicit-def: $vgpr01419; CI-NEXT: s_waitcnt lgkmcnt(0)1420; CI-NEXT: s_load_dwordx2 s[4:5], s[10:11], 0x01421; CI-NEXT: s_load_dwordx2 s[2:3], s[0:1], 0x81422; CI-NEXT: s_mov_b32 s0, 11423; CI-NEXT: s_waitcnt lgkmcnt(0)1424; CI-NEXT: v_cvt_f32_f16_e64 v2, |s4|1425; CI-NEXT: v_cvt_f32_f16_e64 v1, |s2|1426; CI-NEXT: v_cmp_ngt_f32_e32 vcc, v2, v11427; CI-NEXT: s_cbranch_vccz .LBB10_21428; CI-NEXT: ; %bb.1: ; %frem.else861429; CI-NEXT: s_and_b32 s0, s4, 0x80001430; CI-NEXT: v_cmp_eq_f32_e32 vcc, v2, v11431; CI-NEXT: v_mov_b32_e32 v0, s01432; CI-NEXT: v_mov_b32_e32 v3, s41433; CI-NEXT: v_cndmask_b32_e32 v0, v3, v0, vcc1434; CI-NEXT: s_mov_b32 s0, 01435; CI-NEXT: .LBB10_2: ; %Flow1351436; CI-NEXT: s_xor_b32 s0, s0, 11437; CI-NEXT: s_cmp_lg_u32 s0, 01438; CI-NEXT: s_cbranch_scc1 .LBB10_81439; CI-NEXT: ; %bb.3: ; %frem.compute851440; CI-NEXT: v_frexp_mant_f32_e32 v3, v11441; CI-NEXT: v_frexp_exp_i32_f32_e32 v6, v11442; CI-NEXT: v_ldexp_f32_e64 v1, v3, 11443; CI-NEXT: v_div_scale_f32 v3, s[0:1], v1, v1, 1.01444; CI-NEXT: v_frexp_mant_f32_e32 v0, v21445; CI-NEXT: v_frexp_exp_i32_f32_e32 v5, v21446; CI-NEXT: v_add_i32_e32 v2, vcc, -1, v51447; CI-NEXT: v_ldexp_f32_e64 v4, v0, 111448; CI-NEXT: v_add_i32_e32 v0, vcc, -1, v61449; CI-NEXT: v_sub_i32_e32 v2, vcc, v2, v01450; CI-NEXT: v_div_scale_f32 v7, vcc, 1.0, v1, 1.01451; CI-NEXT: v_rcp_f32_e32 v8, v31452; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 31453; CI-NEXT: v_fma_f32 v9, -v3, v8, 1.01454; CI-NEXT: v_fma_f32 v8, v9, v8, v81455; CI-NEXT: v_mul_f32_e32 v9, v7, v81456; CI-NEXT: v_fma_f32 v10, -v3, v9, v71457; CI-NEXT: v_fma_f32 v9, v10, v8, v91458; CI-NEXT: v_fma_f32 v3, -v3, v9, v71459; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 01460; CI-NEXT: v_div_fmas_f32 v3, v3, v8, v91461; CI-NEXT: v_cmp_ge_i32_e32 vcc, 11, v21462; CI-NEXT: v_div_fixup_f32 v3, v3, v1, 1.01463; CI-NEXT: s_cbranch_vccnz .LBB10_61464; CI-NEXT: ; %bb.4: ; %frem.loop_body93.preheader1465; CI-NEXT: v_add_i32_e32 v2, vcc, 11, v51466; CI-NEXT: v_sub_i32_e32 v2, vcc, v2, v61467; CI-NEXT: .LBB10_5: ; %frem.loop_body931468; CI-NEXT: ; =>This Inner Loop Header: Depth=11469; CI-NEXT: v_mov_b32_e32 v5, v41470; CI-NEXT: v_mul_f32_e32 v4, v5, v31471; CI-NEXT: v_rndne_f32_e32 v4, v41472; CI-NEXT: v_fma_f32 v4, -v4, v1, v51473; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v41474; CI-NEXT: v_add_f32_e32 v6, v4, v11475; CI-NEXT: v_cndmask_b32_e32 v4, v4, v6, vcc1476; CI-NEXT: v_add_i32_e32 v2, vcc, -11, v21477; CI-NEXT: v_ldexp_f32_e64 v4, v4, 111478; CI-NEXT: v_cmp_lt_i32_e32 vcc, 11, v21479; CI-NEXT: s_cbranch_vccnz .LBB10_51480; CI-NEXT: s_branch .LBB10_71481; CI-NEXT: .LBB10_6:1482; CI-NEXT: v_mov_b32_e32 v5, v41483; CI-NEXT: .LBB10_7: ; %frem.loop_exit941484; CI-NEXT: v_add_i32_e32 v2, vcc, -10, v21485; CI-NEXT: v_ldexp_f32_e32 v2, v5, v21486; CI-NEXT: v_mul_f32_e32 v3, v2, v31487; CI-NEXT: v_rndne_f32_e32 v3, v31488; CI-NEXT: v_fma_f32 v2, -v3, v1, v21489; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v21490; CI-NEXT: v_add_f32_e32 v1, v2, v11491; CI-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc1492; CI-NEXT: v_ldexp_f32_e32 v0, v1, v01493; CI-NEXT: v_cvt_f16_f32_e32 v0, v01494; CI-NEXT: s_and_b32 s0, s4, 0x80001495; CI-NEXT: v_and_b32_e32 v0, 0x7fff, v01496; CI-NEXT: v_or_b32_e32 v0, s0, v01497; CI-NEXT: .LBB10_8: ; %Flow1361498; CI-NEXT: s_lshr_b32 s6, s4, 161499; CI-NEXT: s_lshr_b32 s0, s2, 161500; CI-NEXT: v_cvt_f32_f16_e64 v3, |s6|1501; CI-NEXT: v_cvt_f32_f16_e64 v2, |s0|1502; CI-NEXT: s_mov_b32 s1, 11503; CI-NEXT: ; implicit-def: $vgpr11504; CI-NEXT: v_cmp_ngt_f32_e32 vcc, v3, v21505; CI-NEXT: s_cbranch_vccz .LBB10_101506; CI-NEXT: ; %bb.9: ; %frem.else531507; CI-NEXT: s_and_b32 s1, s6, 0x80001508; CI-NEXT: v_cmp_eq_f32_e32 vcc, v3, v21509; CI-NEXT: v_mov_b32_e32 v1, s11510; CI-NEXT: v_mov_b32_e32 v4, s61511; CI-NEXT: v_cndmask_b32_e32 v1, v4, v1, vcc1512; CI-NEXT: s_mov_b32 s1, 01513; CI-NEXT: .LBB10_10: ; %Flow1311514; CI-NEXT: s_xor_b32 s1, s1, 11515; CI-NEXT: s_cmp_lg_u32 s1, 01516; CI-NEXT: s_cbranch_scc1 .LBB10_161517; CI-NEXT: ; %bb.11: ; %frem.compute521518; CI-NEXT: v_frexp_mant_f32_e32 v4, v21519; CI-NEXT: v_frexp_exp_i32_f32_e32 v7, v21520; CI-NEXT: v_ldexp_f32_e64 v2, v4, 11521; CI-NEXT: v_div_scale_f32 v4, s[10:11], v2, v2, 1.01522; CI-NEXT: v_frexp_mant_f32_e32 v1, v31523; CI-NEXT: v_frexp_exp_i32_f32_e32 v6, v31524; CI-NEXT: v_add_i32_e32 v3, vcc, -1, v61525; CI-NEXT: v_ldexp_f32_e64 v5, v1, 111526; CI-NEXT: v_add_i32_e32 v1, vcc, -1, v71527; CI-NEXT: v_sub_i32_e32 v3, vcc, v3, v11528; CI-NEXT: v_div_scale_f32 v8, vcc, 1.0, v2, 1.01529; CI-NEXT: v_rcp_f32_e32 v9, v41530; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 31531; CI-NEXT: v_fma_f32 v10, -v4, v9, 1.01532; CI-NEXT: v_fma_f32 v9, v10, v9, v91533; CI-NEXT: v_mul_f32_e32 v10, v8, v91534; CI-NEXT: v_fma_f32 v11, -v4, v10, v81535; CI-NEXT: v_fma_f32 v10, v11, v9, v101536; CI-NEXT: v_fma_f32 v4, -v4, v10, v81537; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 01538; CI-NEXT: v_div_fmas_f32 v4, v4, v9, v101539; CI-NEXT: v_cmp_ge_i32_e32 vcc, 11, v31540; CI-NEXT: v_div_fixup_f32 v4, v4, v2, 1.01541; CI-NEXT: s_cbranch_vccnz .LBB10_141542; CI-NEXT: ; %bb.12: ; %frem.loop_body60.preheader1543; CI-NEXT: v_add_i32_e32 v3, vcc, 11, v61544; CI-NEXT: v_sub_i32_e32 v3, vcc, v3, v71545; CI-NEXT: .LBB10_13: ; %frem.loop_body601546; CI-NEXT: ; =>This Inner Loop Header: Depth=11547; CI-NEXT: v_mov_b32_e32 v6, v51548; CI-NEXT: v_mul_f32_e32 v5, v6, v41549; CI-NEXT: v_rndne_f32_e32 v5, v51550; CI-NEXT: v_fma_f32 v5, -v5, v2, v61551; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v51552; CI-NEXT: v_add_f32_e32 v7, v5, v21553; CI-NEXT: v_cndmask_b32_e32 v5, v5, v7, vcc1554; CI-NEXT: v_add_i32_e32 v3, vcc, -11, v31555; CI-NEXT: v_ldexp_f32_e64 v5, v5, 111556; CI-NEXT: v_cmp_lt_i32_e32 vcc, 11, v31557; CI-NEXT: s_cbranch_vccnz .LBB10_131558; CI-NEXT: s_branch .LBB10_151559; CI-NEXT: .LBB10_14:1560; CI-NEXT: v_mov_b32_e32 v6, v51561; CI-NEXT: .LBB10_15: ; %frem.loop_exit611562; CI-NEXT: v_add_i32_e32 v3, vcc, -10, v31563; CI-NEXT: v_ldexp_f32_e32 v3, v6, v31564; CI-NEXT: v_mul_f32_e32 v4, v3, v41565; CI-NEXT: v_rndne_f32_e32 v4, v41566; CI-NEXT: v_fma_f32 v3, -v4, v2, v31567; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v31568; CI-NEXT: v_add_f32_e32 v2, v3, v21569; CI-NEXT: v_cndmask_b32_e32 v2, v3, v2, vcc1570; CI-NEXT: v_ldexp_f32_e32 v1, v2, v11571; CI-NEXT: v_cvt_f16_f32_e32 v1, v11572; CI-NEXT: s_and_b32 s1, s6, 0x80001573; CI-NEXT: v_and_b32_e32 v1, 0x7fff, v11574; CI-NEXT: v_or_b32_e32 v1, s1, v11575; CI-NEXT: .LBB10_16: ; %Flow1321576; CI-NEXT: v_cvt_f32_f16_e64 v4, |s5|1577; CI-NEXT: v_cvt_f32_f16_e64 v3, |s3|1578; CI-NEXT: s_mov_b32 s1, 11579; CI-NEXT: ; implicit-def: $vgpr21580; CI-NEXT: v_cmp_ngt_f32_e32 vcc, v4, v31581; CI-NEXT: s_cbranch_vccz .LBB10_181582; CI-NEXT: ; %bb.17: ; %frem.else201583; CI-NEXT: s_and_b32 s1, s5, 0x80001584; CI-NEXT: v_cmp_eq_f32_e32 vcc, v4, v31585; CI-NEXT: v_mov_b32_e32 v2, s11586; CI-NEXT: v_mov_b32_e32 v5, s51587; CI-NEXT: v_cndmask_b32_e32 v2, v5, v2, vcc1588; CI-NEXT: s_mov_b32 s1, 01589; CI-NEXT: .LBB10_18: ; %Flow1271590; CI-NEXT: s_xor_b32 s1, s1, 11591; CI-NEXT: s_cmp_lg_u32 s1, 01592; CI-NEXT: s_cbranch_scc1 .LBB10_241593; CI-NEXT: ; %bb.19: ; %frem.compute191594; CI-NEXT: v_frexp_mant_f32_e32 v5, v31595; CI-NEXT: v_frexp_exp_i32_f32_e32 v8, v31596; CI-NEXT: v_ldexp_f32_e64 v3, v5, 11597; CI-NEXT: v_div_scale_f32 v5, s[10:11], v3, v3, 1.01598; CI-NEXT: v_frexp_mant_f32_e32 v2, v41599; CI-NEXT: v_frexp_exp_i32_f32_e32 v7, v41600; CI-NEXT: v_add_i32_e32 v4, vcc, -1, v71601; CI-NEXT: v_ldexp_f32_e64 v6, v2, 111602; CI-NEXT: v_add_i32_e32 v2, vcc, -1, v81603; CI-NEXT: v_sub_i32_e32 v4, vcc, v4, v21604; CI-NEXT: v_div_scale_f32 v9, vcc, 1.0, v3, 1.01605; CI-NEXT: v_rcp_f32_e32 v10, v51606; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 31607; CI-NEXT: v_fma_f32 v11, -v5, v10, 1.01608; CI-NEXT: v_fma_f32 v10, v11, v10, v101609; CI-NEXT: v_mul_f32_e32 v11, v9, v101610; CI-NEXT: v_fma_f32 v12, -v5, v11, v91611; CI-NEXT: v_fma_f32 v11, v12, v10, v111612; CI-NEXT: v_fma_f32 v5, -v5, v11, v91613; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 01614; CI-NEXT: v_div_fmas_f32 v5, v5, v10, v111615; CI-NEXT: v_cmp_ge_i32_e32 vcc, 11, v41616; CI-NEXT: v_div_fixup_f32 v5, v5, v3, 1.01617; CI-NEXT: s_cbranch_vccnz .LBB10_221618; CI-NEXT: ; %bb.20: ; %frem.loop_body27.preheader1619; CI-NEXT: v_add_i32_e32 v4, vcc, 11, v71620; CI-NEXT: v_sub_i32_e32 v4, vcc, v4, v81621; CI-NEXT: .LBB10_21: ; %frem.loop_body271622; CI-NEXT: ; =>This Inner Loop Header: Depth=11623; CI-NEXT: v_mov_b32_e32 v7, v61624; CI-NEXT: v_mul_f32_e32 v6, v7, v51625; CI-NEXT: v_rndne_f32_e32 v6, v61626; CI-NEXT: v_fma_f32 v6, -v6, v3, v71627; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v61628; CI-NEXT: v_add_f32_e32 v8, v6, v31629; CI-NEXT: v_cndmask_b32_e32 v6, v6, v8, vcc1630; CI-NEXT: v_add_i32_e32 v4, vcc, -11, v41631; CI-NEXT: v_ldexp_f32_e64 v6, v6, 111632; CI-NEXT: v_cmp_lt_i32_e32 vcc, 11, v41633; CI-NEXT: s_cbranch_vccnz .LBB10_211634; CI-NEXT: s_branch .LBB10_231635; CI-NEXT: .LBB10_22:1636; CI-NEXT: v_mov_b32_e32 v7, v61637; CI-NEXT: .LBB10_23: ; %frem.loop_exit281638; CI-NEXT: v_add_i32_e32 v4, vcc, -10, v41639; CI-NEXT: v_ldexp_f32_e32 v4, v7, v41640; CI-NEXT: v_mul_f32_e32 v5, v4, v51641; CI-NEXT: v_rndne_f32_e32 v5, v51642; CI-NEXT: v_fma_f32 v4, -v5, v3, v41643; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v41644; CI-NEXT: v_add_f32_e32 v3, v4, v31645; CI-NEXT: v_cndmask_b32_e32 v3, v4, v3, vcc1646; CI-NEXT: v_ldexp_f32_e32 v2, v3, v21647; CI-NEXT: v_cvt_f16_f32_e32 v2, v21648; CI-NEXT: s_and_b32 s1, s5, 0x80001649; CI-NEXT: v_and_b32_e32 v2, 0x7fff, v21650; CI-NEXT: v_or_b32_e32 v2, s1, v21651; CI-NEXT: .LBB10_24: ; %Flow1281652; CI-NEXT: s_lshr_b32 s7, s5, 161653; CI-NEXT: s_lshr_b32 s10, s3, 161654; CI-NEXT: v_cvt_f32_f16_e64 v5, |s7|1655; CI-NEXT: v_cvt_f32_f16_e64 v4, |s10|1656; CI-NEXT: s_mov_b32 s1, 11657; CI-NEXT: ; implicit-def: $vgpr31658; CI-NEXT: v_cmp_ngt_f32_e32 vcc, v5, v41659; CI-NEXT: s_cbranch_vccz .LBB10_261660; CI-NEXT: ; %bb.25: ; %frem.else1661; CI-NEXT: s_and_b32 s1, s7, 0x80001662; CI-NEXT: v_cmp_eq_f32_e32 vcc, v5, v41663; CI-NEXT: v_mov_b32_e32 v3, s11664; CI-NEXT: v_mov_b32_e32 v6, s71665; CI-NEXT: v_cndmask_b32_e32 v3, v6, v3, vcc1666; CI-NEXT: s_mov_b32 s1, 01667; CI-NEXT: .LBB10_26: ; %Flow1231668; CI-NEXT: s_xor_b32 s1, s1, 11669; CI-NEXT: s_cmp_lg_u32 s1, 01670; CI-NEXT: s_cbranch_scc1 .LBB10_321671; CI-NEXT: ; %bb.27: ; %frem.compute1672; CI-NEXT: v_frexp_mant_f32_e32 v6, v41673; CI-NEXT: v_frexp_exp_i32_f32_e32 v9, v41674; CI-NEXT: v_ldexp_f32_e64 v4, v6, 11675; CI-NEXT: v_div_scale_f32 v6, s[12:13], v4, v4, 1.01676; CI-NEXT: v_frexp_mant_f32_e32 v3, v51677; CI-NEXT: v_frexp_exp_i32_f32_e32 v8, v51678; CI-NEXT: v_add_i32_e32 v5, vcc, -1, v81679; CI-NEXT: v_ldexp_f32_e64 v7, v3, 111680; CI-NEXT: v_add_i32_e32 v3, vcc, -1, v91681; CI-NEXT: v_sub_i32_e32 v5, vcc, v5, v31682; CI-NEXT: v_div_scale_f32 v10, vcc, 1.0, v4, 1.01683; CI-NEXT: v_rcp_f32_e32 v11, v61684; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 31685; CI-NEXT: v_fma_f32 v12, -v6, v11, 1.01686; CI-NEXT: v_fma_f32 v11, v12, v11, v111687; CI-NEXT: v_mul_f32_e32 v12, v10, v111688; CI-NEXT: v_fma_f32 v13, -v6, v12, v101689; CI-NEXT: v_fma_f32 v12, v13, v11, v121690; CI-NEXT: v_fma_f32 v6, -v6, v12, v101691; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 01692; CI-NEXT: v_div_fmas_f32 v6, v6, v11, v121693; CI-NEXT: v_cmp_ge_i32_e32 vcc, 11, v51694; CI-NEXT: v_div_fixup_f32 v6, v6, v4, 1.01695; CI-NEXT: s_cbranch_vccnz .LBB10_301696; CI-NEXT: ; %bb.28: ; %frem.loop_body.preheader1697; CI-NEXT: v_add_i32_e32 v5, vcc, 11, v81698; CI-NEXT: v_sub_i32_e32 v5, vcc, v5, v91699; CI-NEXT: .LBB10_29: ; %frem.loop_body1700; CI-NEXT: ; =>This Inner Loop Header: Depth=11701; CI-NEXT: v_mov_b32_e32 v8, v71702; CI-NEXT: v_mul_f32_e32 v7, v8, v61703; CI-NEXT: v_rndne_f32_e32 v7, v71704; CI-NEXT: v_fma_f32 v7, -v7, v4, v81705; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v71706; CI-NEXT: v_add_f32_e32 v9, v7, v41707; CI-NEXT: v_cndmask_b32_e32 v7, v7, v9, vcc1708; CI-NEXT: v_add_i32_e32 v5, vcc, -11, v51709; CI-NEXT: v_ldexp_f32_e64 v7, v7, 111710; CI-NEXT: v_cmp_lt_i32_e32 vcc, 11, v51711; CI-NEXT: s_cbranch_vccnz .LBB10_291712; CI-NEXT: s_branch .LBB10_311713; CI-NEXT: .LBB10_30:1714; CI-NEXT: v_mov_b32_e32 v8, v71715; CI-NEXT: .LBB10_31: ; %frem.loop_exit1716; CI-NEXT: v_add_i32_e32 v5, vcc, -10, v51717; CI-NEXT: v_ldexp_f32_e32 v5, v8, v51718; CI-NEXT: v_mul_f32_e32 v6, v5, v61719; CI-NEXT: v_rndne_f32_e32 v6, v61720; CI-NEXT: v_fma_f32 v5, -v6, v4, v51721; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v51722; CI-NEXT: v_add_f32_e32 v4, v5, v41723; CI-NEXT: v_cndmask_b32_e32 v4, v5, v4, vcc1724; CI-NEXT: v_ldexp_f32_e32 v3, v4, v31725; CI-NEXT: v_cvt_f16_f32_e32 v3, v31726; CI-NEXT: s_and_b32 s1, s7, 0x80001727; CI-NEXT: v_and_b32_e32 v3, 0x7fff, v31728; CI-NEXT: v_or_b32_e32 v3, s1, v31729; CI-NEXT: .LBB10_32: ; %Flow1241730; CI-NEXT: v_cvt_f32_f16_e32 v4, s21731; CI-NEXT: s_and_b32 s1, s4, 0x7fff1732; CI-NEXT: s_cmpk_lg_i32 s1, 0x7c001733; CI-NEXT: s_cselect_b32 s11, 1, 01734; CI-NEXT: v_cmp_nlg_f32_e32 vcc, 0, v41735; CI-NEXT: v_cvt_f32_f16_e32 v4, s01736; CI-NEXT: s_and_b32 s2, s6, 0x7fff1737; CI-NEXT: s_cmpk_lg_i32 s2, 0x7c001738; CI-NEXT: s_cselect_b32 s6, 1, 01739; CI-NEXT: v_cmp_nlg_f32_e64 s[0:1], 0, v41740; CI-NEXT: v_cvt_f32_f16_e32 v4, s31741; CI-NEXT: s_and_b32 s4, s5, 0x7fff1742; CI-NEXT: s_cmpk_lg_i32 s4, 0x7c001743; CI-NEXT: s_cselect_b32 s12, 1, 01744; CI-NEXT: v_cmp_nlg_f32_e64 s[2:3], 0, v41745; CI-NEXT: v_cvt_f32_f16_e32 v4, s101746; CI-NEXT: s_and_b32 s7, s7, 0x7fff1747; CI-NEXT: s_cmpk_lg_i32 s7, 0x7c001748; CI-NEXT: s_cselect_b32 s7, 1, 01749; CI-NEXT: v_cmp_nlg_f32_e64 s[4:5], 0, v41750; CI-NEXT: v_and_b32_e32 v0, 0xffff, v01751; CI-NEXT: v_mov_b32_e32 v4, 0x7e001752; CI-NEXT: s_and_b32 s10, 1, s111753; CI-NEXT: v_and_b32_e32 v1, 0xffff, v11754; CI-NEXT: v_cndmask_b32_e32 v0, v0, v4, vcc1755; CI-NEXT: v_cmp_ne_u32_e64 vcc, 0, s101756; CI-NEXT: v_cndmask_b32_e64 v1, v1, v4, s[0:1]1757; CI-NEXT: s_and_b32 s0, 1, s61758; CI-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc1759; CI-NEXT: v_cmp_ne_u32_e64 vcc, 0, s01760; CI-NEXT: v_cndmask_b32_e32 v1, v4, v1, vcc1761; CI-NEXT: v_lshlrev_b32_e32 v1, 16, v11762; CI-NEXT: v_or_b32_e32 v0, v0, v11763; CI-NEXT: v_and_b32_e32 v1, 0xffff, v21764; CI-NEXT: s_and_b32 s0, 1, s121765; CI-NEXT: v_cndmask_b32_e64 v1, v1, v4, s[2:3]1766; CI-NEXT: v_cmp_ne_u32_e64 vcc, 0, s01767; CI-NEXT: v_and_b32_e32 v2, 0xffff, v31768; CI-NEXT: s_and_b32 s0, 1, s71769; CI-NEXT: v_cndmask_b32_e32 v1, v4, v1, vcc1770; CI-NEXT: v_cndmask_b32_e64 v2, v2, v4, s[4:5]1771; CI-NEXT: v_cmp_ne_u32_e64 vcc, 0, s01772; CI-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc1773; CI-NEXT: v_lshlrev_b32_e32 v2, 16, v21774; CI-NEXT: v_or_b32_e32 v1, v1, v21775; CI-NEXT: s_mov_b32 s10, -11776; CI-NEXT: s_mov_b32 s11, 0xf0001777; CI-NEXT: buffer_store_dwordx2 v[0:1], off, s[8:11], 01778; CI-NEXT: s_endpgm1779;1780; VI-LABEL: frem_v4f16:1781; VI: ; %bb.0:1782; VI-NEXT: s_load_dwordx4 s[16:19], s[4:5], 0x241783; VI-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x341784; VI-NEXT: ; implicit-def: $vgpr01785; VI-NEXT: s_waitcnt lgkmcnt(0)1786; VI-NEXT: s_load_dwordx2 s[8:9], s[18:19], 0x01787; VI-NEXT: s_load_dwordx2 s[6:7], s[0:1], 0x201788; VI-NEXT: s_mov_b32 s0, 11789; VI-NEXT: s_waitcnt lgkmcnt(0)1790; VI-NEXT: v_cvt_f32_f16_e64 v2, |s8|1791; VI-NEXT: v_cvt_f32_f16_e64 v1, |s6|1792; VI-NEXT: v_cmp_ngt_f32_e32 vcc, v2, v11793; VI-NEXT: s_cbranch_vccz .LBB10_21794; VI-NEXT: ; %bb.1: ; %frem.else861795; VI-NEXT: s_and_b32 s0, s8, 0x80001796; VI-NEXT: v_cmp_eq_f32_e32 vcc, v2, v11797; VI-NEXT: v_mov_b32_e32 v0, s01798; VI-NEXT: v_mov_b32_e32 v3, s81799; VI-NEXT: v_cndmask_b32_e32 v0, v3, v0, vcc1800; VI-NEXT: s_mov_b32 s0, 01801; VI-NEXT: .LBB10_2: ; %Flow1351802; VI-NEXT: s_xor_b32 s0, s0, 11803; VI-NEXT: s_cmp_lg_u32 s0, 01804; VI-NEXT: s_cbranch_scc1 .LBB10_81805; VI-NEXT: ; %bb.3: ; %frem.compute851806; VI-NEXT: v_frexp_mant_f32_e32 v3, v11807; VI-NEXT: v_frexp_exp_i32_f32_e32 v6, v11808; VI-NEXT: v_ldexp_f32 v1, v3, 11809; VI-NEXT: v_div_scale_f32 v3, s[0:1], v1, v1, 1.01810; VI-NEXT: v_frexp_mant_f32_e32 v0, v21811; VI-NEXT: v_frexp_exp_i32_f32_e32 v5, v21812; VI-NEXT: v_add_u32_e32 v2, vcc, -1, v51813; VI-NEXT: v_ldexp_f32 v4, v0, 111814; VI-NEXT: v_add_u32_e32 v0, vcc, -1, v61815; VI-NEXT: v_sub_u32_e32 v2, vcc, v2, v01816; VI-NEXT: v_div_scale_f32 v7, vcc, 1.0, v1, 1.01817; VI-NEXT: v_rcp_f32_e32 v8, v31818; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 31819; VI-NEXT: v_fma_f32 v9, -v3, v8, 1.01820; VI-NEXT: v_fma_f32 v8, v9, v8, v81821; VI-NEXT: v_mul_f32_e32 v9, v7, v81822; VI-NEXT: v_fma_f32 v10, -v3, v9, v71823; VI-NEXT: v_fma_f32 v9, v10, v8, v91824; VI-NEXT: v_fma_f32 v3, -v3, v9, v71825; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 01826; VI-NEXT: v_div_fmas_f32 v3, v3, v8, v91827; VI-NEXT: v_cmp_ge_i32_e32 vcc, 11, v21828; VI-NEXT: v_div_fixup_f32 v3, v3, v1, 1.01829; VI-NEXT: s_cbranch_vccnz .LBB10_61830; VI-NEXT: ; %bb.4: ; %frem.loop_body93.preheader1831; VI-NEXT: v_add_u32_e32 v2, vcc, 11, v51832; VI-NEXT: v_sub_u32_e32 v2, vcc, v2, v61833; VI-NEXT: .LBB10_5: ; %frem.loop_body931834; VI-NEXT: ; =>This Inner Loop Header: Depth=11835; VI-NEXT: v_mov_b32_e32 v5, v41836; VI-NEXT: v_mul_f32_e32 v4, v5, v31837; VI-NEXT: v_rndne_f32_e32 v4, v41838; VI-NEXT: v_fma_f32 v4, -v4, v1, v51839; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v41840; VI-NEXT: v_add_f32_e32 v6, v4, v11841; VI-NEXT: v_cndmask_b32_e32 v4, v4, v6, vcc1842; VI-NEXT: v_add_u32_e32 v2, vcc, -11, v21843; VI-NEXT: v_ldexp_f32 v4, v4, 111844; VI-NEXT: v_cmp_lt_i32_e32 vcc, 11, v21845; VI-NEXT: s_cbranch_vccnz .LBB10_51846; VI-NEXT: s_branch .LBB10_71847; VI-NEXT: .LBB10_6:1848; VI-NEXT: v_mov_b32_e32 v5, v41849; VI-NEXT: .LBB10_7: ; %frem.loop_exit941850; VI-NEXT: v_add_u32_e32 v2, vcc, -10, v21851; VI-NEXT: v_ldexp_f32 v2, v5, v21852; VI-NEXT: v_mul_f32_e32 v3, v2, v31853; VI-NEXT: v_rndne_f32_e32 v3, v31854; VI-NEXT: v_fma_f32 v2, -v3, v1, v21855; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v21856; VI-NEXT: v_add_f32_e32 v1, v2, v11857; VI-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc1858; VI-NEXT: v_ldexp_f32 v0, v1, v01859; VI-NEXT: v_cvt_f16_f32_e32 v0, v01860; VI-NEXT: s_and_b32 s0, s8, 0x80001861; VI-NEXT: v_and_b32_e32 v0, 0x7fff, v01862; VI-NEXT: v_or_b32_e32 v0, s0, v01863; VI-NEXT: .LBB10_8: ; %Flow1361864; VI-NEXT: s_lshr_b32 s4, s8, 161865; VI-NEXT: s_lshr_b32 s2, s6, 161866; VI-NEXT: v_cvt_f32_f16_e64 v3, |s4|1867; VI-NEXT: v_cvt_f32_f16_e64 v2, |s2|1868; VI-NEXT: s_mov_b32 s0, 11869; VI-NEXT: ; implicit-def: $vgpr11870; VI-NEXT: v_cmp_ngt_f32_e32 vcc, v3, v21871; VI-NEXT: s_cbranch_vccz .LBB10_101872; VI-NEXT: ; %bb.9: ; %frem.else531873; VI-NEXT: s_and_b32 s0, s4, 0x80001874; VI-NEXT: v_cmp_eq_f32_e32 vcc, v3, v21875; VI-NEXT: v_mov_b32_e32 v1, s01876; VI-NEXT: v_mov_b32_e32 v4, s41877; VI-NEXT: v_cndmask_b32_e32 v1, v4, v1, vcc1878; VI-NEXT: s_mov_b32 s0, 01879; VI-NEXT: .LBB10_10: ; %Flow1311880; VI-NEXT: s_xor_b32 s0, s0, 11881; VI-NEXT: s_cmp_lg_u32 s0, 01882; VI-NEXT: s_cbranch_scc1 .LBB10_161883; VI-NEXT: ; %bb.11: ; %frem.compute521884; VI-NEXT: v_frexp_mant_f32_e32 v4, v21885; VI-NEXT: v_frexp_exp_i32_f32_e32 v7, v21886; VI-NEXT: v_ldexp_f32 v2, v4, 11887; VI-NEXT: v_div_scale_f32 v4, s[0:1], v2, v2, 1.01888; VI-NEXT: v_frexp_mant_f32_e32 v1, v31889; VI-NEXT: v_frexp_exp_i32_f32_e32 v6, v31890; VI-NEXT: v_add_u32_e32 v3, vcc, -1, v61891; VI-NEXT: v_ldexp_f32 v5, v1, 111892; VI-NEXT: v_add_u32_e32 v1, vcc, -1, v71893; VI-NEXT: v_sub_u32_e32 v3, vcc, v3, v11894; VI-NEXT: v_div_scale_f32 v8, vcc, 1.0, v2, 1.01895; VI-NEXT: v_rcp_f32_e32 v9, v41896; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 31897; VI-NEXT: v_fma_f32 v10, -v4, v9, 1.01898; VI-NEXT: v_fma_f32 v9, v10, v9, v91899; VI-NEXT: v_mul_f32_e32 v10, v8, v91900; VI-NEXT: v_fma_f32 v11, -v4, v10, v81901; VI-NEXT: v_fma_f32 v10, v11, v9, v101902; VI-NEXT: v_fma_f32 v4, -v4, v10, v81903; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 01904; VI-NEXT: v_div_fmas_f32 v4, v4, v9, v101905; VI-NEXT: v_cmp_ge_i32_e32 vcc, 11, v31906; VI-NEXT: v_div_fixup_f32 v4, v4, v2, 1.01907; VI-NEXT: s_cbranch_vccnz .LBB10_141908; VI-NEXT: ; %bb.12: ; %frem.loop_body60.preheader1909; VI-NEXT: v_add_u32_e32 v3, vcc, 11, v61910; VI-NEXT: v_sub_u32_e32 v3, vcc, v3, v71911; VI-NEXT: .LBB10_13: ; %frem.loop_body601912; VI-NEXT: ; =>This Inner Loop Header: Depth=11913; VI-NEXT: v_mov_b32_e32 v6, v51914; VI-NEXT: v_mul_f32_e32 v5, v6, v41915; VI-NEXT: v_rndne_f32_e32 v5, v51916; VI-NEXT: v_fma_f32 v5, -v5, v2, v61917; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v51918; VI-NEXT: v_add_f32_e32 v7, v5, v21919; VI-NEXT: v_cndmask_b32_e32 v5, v5, v7, vcc1920; VI-NEXT: v_add_u32_e32 v3, vcc, -11, v31921; VI-NEXT: v_ldexp_f32 v5, v5, 111922; VI-NEXT: v_cmp_lt_i32_e32 vcc, 11, v31923; VI-NEXT: s_cbranch_vccnz .LBB10_131924; VI-NEXT: s_branch .LBB10_151925; VI-NEXT: .LBB10_14:1926; VI-NEXT: v_mov_b32_e32 v6, v51927; VI-NEXT: .LBB10_15: ; %frem.loop_exit611928; VI-NEXT: v_add_u32_e32 v3, vcc, -10, v31929; VI-NEXT: v_ldexp_f32 v3, v6, v31930; VI-NEXT: v_mul_f32_e32 v4, v3, v41931; VI-NEXT: v_rndne_f32_e32 v4, v41932; VI-NEXT: v_fma_f32 v3, -v4, v2, v31933; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v31934; VI-NEXT: v_add_f32_e32 v2, v3, v21935; VI-NEXT: v_cndmask_b32_e32 v2, v3, v2, vcc1936; VI-NEXT: v_ldexp_f32 v1, v2, v11937; VI-NEXT: v_cvt_f16_f32_e32 v1, v11938; VI-NEXT: s_and_b32 s0, s4, 0x80001939; VI-NEXT: v_and_b32_e32 v1, 0x7fff, v11940; VI-NEXT: v_or_b32_e32 v1, s0, v11941; VI-NEXT: .LBB10_16: ; %Flow1321942; VI-NEXT: v_cvt_f32_f16_e64 v4, |s9|1943; VI-NEXT: v_cvt_f32_f16_e64 v3, |s7|1944; VI-NEXT: s_mov_b32 s0, 11945; VI-NEXT: ; implicit-def: $vgpr21946; VI-NEXT: v_cmp_ngt_f32_e32 vcc, v4, v31947; VI-NEXT: s_cbranch_vccz .LBB10_181948; VI-NEXT: ; %bb.17: ; %frem.else201949; VI-NEXT: s_and_b32 s0, s9, 0x80001950; VI-NEXT: v_cmp_eq_f32_e32 vcc, v4, v31951; VI-NEXT: v_mov_b32_e32 v2, s01952; VI-NEXT: v_mov_b32_e32 v5, s91953; VI-NEXT: v_cndmask_b32_e32 v2, v5, v2, vcc1954; VI-NEXT: s_mov_b32 s0, 01955; VI-NEXT: .LBB10_18: ; %Flow1271956; VI-NEXT: s_xor_b32 s0, s0, 11957; VI-NEXT: s_cmp_lg_u32 s0, 01958; VI-NEXT: s_cbranch_scc1 .LBB10_241959; VI-NEXT: ; %bb.19: ; %frem.compute191960; VI-NEXT: v_frexp_mant_f32_e32 v5, v31961; VI-NEXT: v_frexp_exp_i32_f32_e32 v8, v31962; VI-NEXT: v_ldexp_f32 v3, v5, 11963; VI-NEXT: v_div_scale_f32 v5, s[0:1], v3, v3, 1.01964; VI-NEXT: v_frexp_mant_f32_e32 v2, v41965; VI-NEXT: v_frexp_exp_i32_f32_e32 v7, v41966; VI-NEXT: v_add_u32_e32 v4, vcc, -1, v71967; VI-NEXT: v_ldexp_f32 v6, v2, 111968; VI-NEXT: v_add_u32_e32 v2, vcc, -1, v81969; VI-NEXT: v_sub_u32_e32 v4, vcc, v4, v21970; VI-NEXT: v_div_scale_f32 v9, vcc, 1.0, v3, 1.01971; VI-NEXT: v_rcp_f32_e32 v10, v51972; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 31973; VI-NEXT: v_fma_f32 v11, -v5, v10, 1.01974; VI-NEXT: v_fma_f32 v10, v11, v10, v101975; VI-NEXT: v_mul_f32_e32 v11, v9, v101976; VI-NEXT: v_fma_f32 v12, -v5, v11, v91977; VI-NEXT: v_fma_f32 v11, v12, v10, v111978; VI-NEXT: v_fma_f32 v5, -v5, v11, v91979; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 01980; VI-NEXT: v_div_fmas_f32 v5, v5, v10, v111981; VI-NEXT: v_cmp_ge_i32_e32 vcc, 11, v41982; VI-NEXT: v_div_fixup_f32 v5, v5, v3, 1.01983; VI-NEXT: s_cbranch_vccnz .LBB10_221984; VI-NEXT: ; %bb.20: ; %frem.loop_body27.preheader1985; VI-NEXT: v_add_u32_e32 v4, vcc, 11, v71986; VI-NEXT: v_sub_u32_e32 v4, vcc, v4, v81987; VI-NEXT: .LBB10_21: ; %frem.loop_body271988; VI-NEXT: ; =>This Inner Loop Header: Depth=11989; VI-NEXT: v_mov_b32_e32 v7, v61990; VI-NEXT: v_mul_f32_e32 v6, v7, v51991; VI-NEXT: v_rndne_f32_e32 v6, v61992; VI-NEXT: v_fma_f32 v6, -v6, v3, v71993; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v61994; VI-NEXT: v_add_f32_e32 v8, v6, v31995; VI-NEXT: v_cndmask_b32_e32 v6, v6, v8, vcc1996; VI-NEXT: v_add_u32_e32 v4, vcc, -11, v41997; VI-NEXT: v_ldexp_f32 v6, v6, 111998; VI-NEXT: v_cmp_lt_i32_e32 vcc, 11, v41999; VI-NEXT: s_cbranch_vccnz .LBB10_212000; VI-NEXT: s_branch .LBB10_232001; VI-NEXT: .LBB10_22:2002; VI-NEXT: v_mov_b32_e32 v7, v62003; VI-NEXT: .LBB10_23: ; %frem.loop_exit282004; VI-NEXT: v_add_u32_e32 v4, vcc, -10, v42005; VI-NEXT: v_ldexp_f32 v4, v7, v42006; VI-NEXT: v_mul_f32_e32 v5, v4, v52007; VI-NEXT: v_rndne_f32_e32 v5, v52008; VI-NEXT: v_fma_f32 v4, -v5, v3, v42009; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v42010; VI-NEXT: v_add_f32_e32 v3, v4, v32011; VI-NEXT: v_cndmask_b32_e32 v3, v4, v3, vcc2012; VI-NEXT: v_ldexp_f32 v2, v3, v22013; VI-NEXT: v_cvt_f16_f32_e32 v2, v22014; VI-NEXT: s_and_b32 s0, s9, 0x80002015; VI-NEXT: v_and_b32_e32 v2, 0x7fff, v22016; VI-NEXT: v_or_b32_e32 v2, s0, v22017; VI-NEXT: .LBB10_24: ; %Flow1282018; VI-NEXT: s_lshr_b32 s12, s9, 162019; VI-NEXT: s_lshr_b32 s10, s7, 162020; VI-NEXT: v_cvt_f32_f16_e64 v5, |s12|2021; VI-NEXT: v_cvt_f32_f16_e64 v4, |s10|2022; VI-NEXT: s_mov_b32 s0, 12023; VI-NEXT: ; implicit-def: $vgpr32024; VI-NEXT: v_cmp_ngt_f32_e32 vcc, v5, v42025; VI-NEXT: s_cbranch_vccz .LBB10_262026; VI-NEXT: ; %bb.25: ; %frem.else2027; VI-NEXT: s_and_b32 s0, s12, 0x80002028; VI-NEXT: v_cmp_eq_f32_e32 vcc, v5, v42029; VI-NEXT: v_mov_b32_e32 v3, s02030; VI-NEXT: v_mov_b32_e32 v6, s122031; VI-NEXT: v_cndmask_b32_e32 v3, v6, v3, vcc2032; VI-NEXT: s_mov_b32 s0, 02033; VI-NEXT: .LBB10_26: ; %Flow1232034; VI-NEXT: s_xor_b32 s0, s0, 12035; VI-NEXT: s_cmp_lg_u32 s0, 02036; VI-NEXT: s_cbranch_scc1 .LBB10_322037; VI-NEXT: ; %bb.27: ; %frem.compute2038; VI-NEXT: v_frexp_mant_f32_e32 v6, v42039; VI-NEXT: v_frexp_exp_i32_f32_e32 v9, v42040; VI-NEXT: v_ldexp_f32 v4, v6, 12041; VI-NEXT: v_div_scale_f32 v6, s[0:1], v4, v4, 1.02042; VI-NEXT: v_frexp_mant_f32_e32 v3, v52043; VI-NEXT: v_frexp_exp_i32_f32_e32 v8, v52044; VI-NEXT: v_add_u32_e32 v5, vcc, -1, v82045; VI-NEXT: v_ldexp_f32 v7, v3, 112046; VI-NEXT: v_add_u32_e32 v3, vcc, -1, v92047; VI-NEXT: v_sub_u32_e32 v5, vcc, v5, v32048; VI-NEXT: v_div_scale_f32 v10, vcc, 1.0, v4, 1.02049; VI-NEXT: v_rcp_f32_e32 v11, v62050; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 32051; VI-NEXT: v_fma_f32 v12, -v6, v11, 1.02052; VI-NEXT: v_fma_f32 v11, v12, v11, v112053; VI-NEXT: v_mul_f32_e32 v12, v10, v112054; VI-NEXT: v_fma_f32 v13, -v6, v12, v102055; VI-NEXT: v_fma_f32 v12, v13, v11, v122056; VI-NEXT: v_fma_f32 v6, -v6, v12, v102057; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 02058; VI-NEXT: v_div_fmas_f32 v6, v6, v11, v122059; VI-NEXT: v_cmp_ge_i32_e32 vcc, 11, v52060; VI-NEXT: v_div_fixup_f32 v6, v6, v4, 1.02061; VI-NEXT: s_cbranch_vccnz .LBB10_302062; VI-NEXT: ; %bb.28: ; %frem.loop_body.preheader2063; VI-NEXT: v_add_u32_e32 v5, vcc, 11, v82064; VI-NEXT: v_sub_u32_e32 v5, vcc, v5, v92065; VI-NEXT: .LBB10_29: ; %frem.loop_body2066; VI-NEXT: ; =>This Inner Loop Header: Depth=12067; VI-NEXT: v_mov_b32_e32 v8, v72068; VI-NEXT: v_mul_f32_e32 v7, v8, v62069; VI-NEXT: v_rndne_f32_e32 v7, v72070; VI-NEXT: v_fma_f32 v7, -v7, v4, v82071; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v72072; VI-NEXT: v_add_f32_e32 v9, v7, v42073; VI-NEXT: v_cndmask_b32_e32 v7, v7, v9, vcc2074; VI-NEXT: v_add_u32_e32 v5, vcc, -11, v52075; VI-NEXT: v_ldexp_f32 v7, v7, 112076; VI-NEXT: v_cmp_lt_i32_e32 vcc, 11, v52077; VI-NEXT: s_cbranch_vccnz .LBB10_292078; VI-NEXT: s_branch .LBB10_312079; VI-NEXT: .LBB10_30:2080; VI-NEXT: v_mov_b32_e32 v8, v72081; VI-NEXT: .LBB10_31: ; %frem.loop_exit2082; VI-NEXT: v_add_u32_e32 v5, vcc, -10, v52083; VI-NEXT: v_ldexp_f32 v5, v8, v52084; VI-NEXT: v_mul_f32_e32 v6, v5, v62085; VI-NEXT: v_rndne_f32_e32 v6, v62086; VI-NEXT: v_fma_f32 v5, -v6, v4, v52087; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v52088; VI-NEXT: v_add_f32_e32 v4, v5, v42089; VI-NEXT: v_cndmask_b32_e32 v4, v5, v4, vcc2090; VI-NEXT: v_ldexp_f32 v3, v4, v32091; VI-NEXT: v_cvt_f16_f32_e32 v3, v32092; VI-NEXT: s_and_b32 s0, s12, 0x80002093; VI-NEXT: v_and_b32_e32 v3, 0x7fff, v32094; VI-NEXT: v_or_b32_e32 v3, s0, v32095; VI-NEXT: .LBB10_32: ; %Flow1242096; VI-NEXT: v_mov_b32_e32 v4, 0x7c002097; VI-NEXT: v_cmp_nlg_f16_e64 vcc, s6, 02098; VI-NEXT: v_cmp_nge_f16_e64 s[0:1], |s8|, v42099; VI-NEXT: v_cmp_nlg_f16_e64 s[2:3], s2, 02100; VI-NEXT: v_cmp_nge_f16_e64 s[4:5], |s4|, v42101; VI-NEXT: v_cmp_nge_f16_e64 s[8:9], |s9|, v42102; VI-NEXT: v_cmp_nge_f16_e64 s[12:13], |s12|, v42103; VI-NEXT: v_mov_b32_e32 v4, 0x7e002104; VI-NEXT: v_cndmask_b32_sdwa v0, v0, v4, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2105; VI-NEXT: s_mov_b64 vcc, s[2:3]2106; VI-NEXT: v_cmp_nlg_f16_e64 s[6:7], s7, 02107; VI-NEXT: v_cndmask_b32_sdwa v1, v1, v4, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2108; VI-NEXT: s_mov_b64 vcc, s[4:5]2109; VI-NEXT: v_cmp_nlg_f16_e64 s[10:11], s10, 02110; VI-NEXT: v_cndmask_b32_e64 v0, v4, v0, s[0:1]2111; VI-NEXT: v_cndmask_b32_sdwa v1, v4, v1, vcc dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2112; VI-NEXT: s_mov_b64 vcc, s[6:7]2113; VI-NEXT: v_or_b32_e32 v0, v0, v12114; VI-NEXT: v_cndmask_b32_sdwa v1, v2, v4, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2115; VI-NEXT: s_mov_b64 vcc, s[10:11]2116; VI-NEXT: v_cndmask_b32_sdwa v2, v3, v4, vcc dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD2117; VI-NEXT: s_mov_b64 vcc, s[12:13]2118; VI-NEXT: v_cndmask_b32_e64 v1, v4, v1, s[8:9]2119; VI-NEXT: v_cndmask_b32_sdwa v2, v4, v2, vcc dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD2120; VI-NEXT: v_or_b32_e32 v1, v1, v22121; VI-NEXT: v_mov_b32_e32 v2, s162122; VI-NEXT: v_mov_b32_e32 v3, s172123; VI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]2124; VI-NEXT: s_endpgm2125 %gep2 = getelementptr <4 x half>, ptr addrspace(1) %in2, i32 42126 %r0 = load <4 x half>, ptr addrspace(1) %in1, align 162127 %r1 = load <4 x half>, ptr addrspace(1) %gep2, align 162128 %r2 = frem <4 x half> %r0, %r12129 store <4 x half> %r2, ptr addrspace(1) %out, align 162130 ret void2131}2132 2133define amdgpu_kernel void @frem_v2f32(ptr addrspace(1) %out, ptr addrspace(1) %in1, ptr addrspace(1) %in2) #0 {2134; CI-LABEL: frem_v2f32:2135; CI: ; %bb.0:2136; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x92137; CI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0xd2138; CI-NEXT: s_mov_b32 s6, 12139; CI-NEXT: s_waitcnt lgkmcnt(0)2140; CI-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x02141; CI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x82142; CI-NEXT: s_waitcnt lgkmcnt(0)2143; CI-NEXT: v_mov_b32_e32 v0, s42144; CI-NEXT: v_cmp_ngt_f32_e64 vcc, |s2|, |v0|2145; CI-NEXT: ; implicit-def: $vgpr02146; CI-NEXT: s_cbranch_vccz .LBB11_22147; CI-NEXT: ; %bb.1: ; %frem.else162148; CI-NEXT: s_and_b32 s6, s2, 0x800000002149; CI-NEXT: v_mov_b32_e32 v1, s42150; CI-NEXT: v_mov_b32_e32 v0, s22151; CI-NEXT: v_cmp_eq_f32_e64 vcc, |s2|, |v1|2152; CI-NEXT: v_mov_b32_e32 v1, s62153; CI-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc2154; CI-NEXT: s_mov_b32 s6, 02155; CI-NEXT: .LBB11_2: ; %Flow532156; CI-NEXT: s_xor_b32 s6, s6, 12157; CI-NEXT: s_cmp_lg_u32 s6, 02158; CI-NEXT: s_cbranch_scc1 .LBB11_82159; CI-NEXT: ; %bb.3: ; %frem.compute152160; CI-NEXT: v_frexp_mant_f32_e64 v1, |s4|2161; CI-NEXT: v_ldexp_f32_e64 v1, v1, 12162; CI-NEXT: v_div_scale_f32 v3, s[6:7], v1, v1, 1.02163; CI-NEXT: v_frexp_mant_f32_e64 v0, |s2|2164; CI-NEXT: v_frexp_exp_i32_f32_e64 v5, |s2|2165; CI-NEXT: v_frexp_exp_i32_f32_e64 v6, |s4|2166; CI-NEXT: v_add_i32_e32 v2, vcc, -1, v52167; CI-NEXT: v_ldexp_f32_e64 v4, v0, 122168; CI-NEXT: v_add_i32_e32 v0, vcc, -1, v62169; CI-NEXT: v_sub_i32_e32 v2, vcc, v2, v02170; CI-NEXT: v_div_scale_f32 v7, vcc, 1.0, v1, 1.02171; CI-NEXT: v_rcp_f32_e32 v8, v32172; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 32173; CI-NEXT: v_fma_f32 v9, -v3, v8, 1.02174; CI-NEXT: v_fma_f32 v8, v9, v8, v82175; CI-NEXT: v_mul_f32_e32 v9, v7, v82176; CI-NEXT: v_fma_f32 v10, -v3, v9, v72177; CI-NEXT: v_fma_f32 v9, v10, v8, v92178; CI-NEXT: v_fma_f32 v3, -v3, v9, v72179; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 02180; CI-NEXT: v_div_fmas_f32 v3, v3, v8, v92181; CI-NEXT: v_cmp_ge_i32_e32 vcc, 12, v22182; CI-NEXT: v_div_fixup_f32 v3, v3, v1, 1.02183; CI-NEXT: s_cbranch_vccnz .LBB11_62184; CI-NEXT: ; %bb.4: ; %frem.loop_body23.preheader2185; CI-NEXT: v_add_i32_e32 v2, vcc, 12, v52186; CI-NEXT: v_sub_i32_e32 v2, vcc, v2, v62187; CI-NEXT: .LBB11_5: ; %frem.loop_body232188; CI-NEXT: ; =>This Inner Loop Header: Depth=12189; CI-NEXT: v_mov_b32_e32 v5, v42190; CI-NEXT: v_mul_f32_e32 v4, v5, v32191; CI-NEXT: v_rndne_f32_e32 v4, v42192; CI-NEXT: v_fma_f32 v4, -v4, v1, v52193; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v42194; CI-NEXT: v_add_f32_e32 v6, v4, v12195; CI-NEXT: v_cndmask_b32_e32 v4, v4, v6, vcc2196; CI-NEXT: v_add_i32_e32 v2, vcc, -12, v22197; CI-NEXT: v_ldexp_f32_e64 v4, v4, 122198; CI-NEXT: v_cmp_lt_i32_e32 vcc, 12, v22199; CI-NEXT: s_cbranch_vccnz .LBB11_52200; CI-NEXT: s_branch .LBB11_72201; CI-NEXT: .LBB11_6:2202; CI-NEXT: v_mov_b32_e32 v5, v42203; CI-NEXT: .LBB11_7: ; %frem.loop_exit242204; CI-NEXT: v_add_i32_e32 v2, vcc, -11, v22205; CI-NEXT: v_ldexp_f32_e32 v2, v5, v22206; CI-NEXT: v_mul_f32_e32 v3, v2, v32207; CI-NEXT: v_rndne_f32_e32 v3, v32208; CI-NEXT: v_fma_f32 v2, -v3, v1, v22209; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v22210; CI-NEXT: v_add_f32_e32 v1, v2, v12211; CI-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc2212; CI-NEXT: v_ldexp_f32_e32 v0, v1, v02213; CI-NEXT: v_and_b32_e32 v0, 0x7fffffff, v02214; CI-NEXT: s_and_b32 s6, s2, 0x800000002215; CI-NEXT: v_or_b32_e32 v0, s6, v02216; CI-NEXT: .LBB11_8: ; %Flow542217; CI-NEXT: v_mov_b32_e32 v1, s52218; CI-NEXT: v_cmp_ngt_f32_e64 vcc, |s3|, |v1|2219; CI-NEXT: s_mov_b32 s6, 12220; CI-NEXT: ; implicit-def: $vgpr12221; CI-NEXT: s_cbranch_vccz .LBB11_102222; CI-NEXT: ; %bb.9: ; %frem.else2223; CI-NEXT: s_and_b32 s6, s3, 0x800000002224; CI-NEXT: v_mov_b32_e32 v2, s52225; CI-NEXT: v_mov_b32_e32 v1, s32226; CI-NEXT: v_cmp_eq_f32_e64 vcc, |s3|, |v2|2227; CI-NEXT: v_mov_b32_e32 v2, s62228; CI-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc2229; CI-NEXT: s_mov_b32 s6, 02230; CI-NEXT: .LBB11_10: ; %Flow492231; CI-NEXT: s_xor_b32 s6, s6, 12232; CI-NEXT: s_cmp_lg_u32 s6, 02233; CI-NEXT: s_cbranch_scc1 .LBB11_162234; CI-NEXT: ; %bb.11: ; %frem.compute2235; CI-NEXT: v_frexp_mant_f32_e64 v2, |s5|2236; CI-NEXT: v_ldexp_f32_e64 v2, v2, 12237; CI-NEXT: v_div_scale_f32 v4, s[6:7], v2, v2, 1.02238; CI-NEXT: v_frexp_mant_f32_e64 v1, |s3|2239; CI-NEXT: v_frexp_exp_i32_f32_e64 v6, |s3|2240; CI-NEXT: v_frexp_exp_i32_f32_e64 v7, |s5|2241; CI-NEXT: v_add_i32_e32 v3, vcc, -1, v62242; CI-NEXT: v_ldexp_f32_e64 v5, v1, 122243; CI-NEXT: v_add_i32_e32 v1, vcc, -1, v72244; CI-NEXT: v_sub_i32_e32 v3, vcc, v3, v12245; CI-NEXT: v_div_scale_f32 v8, vcc, 1.0, v2, 1.02246; CI-NEXT: v_rcp_f32_e32 v9, v42247; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 32248; CI-NEXT: v_fma_f32 v10, -v4, v9, 1.02249; CI-NEXT: v_fma_f32 v9, v10, v9, v92250; CI-NEXT: v_mul_f32_e32 v10, v8, v92251; CI-NEXT: v_fma_f32 v11, -v4, v10, v82252; CI-NEXT: v_fma_f32 v10, v11, v9, v102253; CI-NEXT: v_fma_f32 v4, -v4, v10, v82254; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 02255; CI-NEXT: v_div_fmas_f32 v4, v4, v9, v102256; CI-NEXT: v_cmp_ge_i32_e32 vcc, 12, v32257; CI-NEXT: v_div_fixup_f32 v4, v4, v2, 1.02258; CI-NEXT: s_cbranch_vccnz .LBB11_142259; CI-NEXT: ; %bb.12: ; %frem.loop_body.preheader2260; CI-NEXT: v_add_i32_e32 v3, vcc, 12, v62261; CI-NEXT: v_sub_i32_e32 v3, vcc, v3, v72262; CI-NEXT: .LBB11_13: ; %frem.loop_body2263; CI-NEXT: ; =>This Inner Loop Header: Depth=12264; CI-NEXT: v_mov_b32_e32 v6, v52265; CI-NEXT: v_mul_f32_e32 v5, v6, v42266; CI-NEXT: v_rndne_f32_e32 v5, v52267; CI-NEXT: v_fma_f32 v5, -v5, v2, v62268; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v52269; CI-NEXT: v_add_f32_e32 v7, v5, v22270; CI-NEXT: v_cndmask_b32_e32 v5, v5, v7, vcc2271; CI-NEXT: v_add_i32_e32 v3, vcc, -12, v32272; CI-NEXT: v_ldexp_f32_e64 v5, v5, 122273; CI-NEXT: v_cmp_lt_i32_e32 vcc, 12, v32274; CI-NEXT: s_cbranch_vccnz .LBB11_132275; CI-NEXT: s_branch .LBB11_152276; CI-NEXT: .LBB11_14:2277; CI-NEXT: v_mov_b32_e32 v6, v52278; CI-NEXT: .LBB11_15: ; %frem.loop_exit2279; CI-NEXT: v_add_i32_e32 v3, vcc, -11, v32280; CI-NEXT: v_ldexp_f32_e32 v3, v6, v32281; CI-NEXT: v_mul_f32_e32 v4, v3, v42282; CI-NEXT: v_rndne_f32_e32 v4, v42283; CI-NEXT: v_fma_f32 v3, -v4, v2, v32284; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v32285; CI-NEXT: v_add_f32_e32 v2, v3, v22286; CI-NEXT: v_cndmask_b32_e32 v2, v3, v2, vcc2287; CI-NEXT: v_ldexp_f32_e32 v1, v2, v12288; CI-NEXT: v_and_b32_e32 v1, 0x7fffffff, v12289; CI-NEXT: s_and_b32 s6, s3, 0x800000002290; CI-NEXT: v_or_b32_e32 v1, s6, v12291; CI-NEXT: .LBB11_16: ; %Flow502292; CI-NEXT: v_cmp_nlg_f32_e64 vcc, s4, 02293; CI-NEXT: v_mov_b32_e32 v2, 0x7fc000002294; CI-NEXT: v_mov_b32_e32 v3, 0x7f8000002295; CI-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc2296; CI-NEXT: v_cmp_nge_f32_e64 vcc, |s2|, v32297; CI-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2298; CI-NEXT: v_cmp_nlg_f32_e64 vcc, s5, 02299; CI-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc2300; CI-NEXT: v_cmp_nge_f32_e64 vcc, |s3|, v32301; CI-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc2302; CI-NEXT: s_mov_b32 s2, -12303; CI-NEXT: s_mov_b32 s3, 0xf0002304; CI-NEXT: buffer_store_dwordx2 v[0:1], off, s[0:3], 02305; CI-NEXT: s_endpgm2306;2307; VI-LABEL: frem_v2f32:2308; VI: ; %bb.0:2309; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242310; VI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x342311; VI-NEXT: s_mov_b32 s6, 12312; VI-NEXT: s_waitcnt lgkmcnt(0)2313; VI-NEXT: s_load_dwordx2 s[2:3], s[2:3], 0x02314; VI-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x202315; VI-NEXT: s_waitcnt lgkmcnt(0)2316; VI-NEXT: v_mov_b32_e32 v0, s42317; VI-NEXT: v_cmp_ngt_f32_e64 vcc, |s2|, |v0|2318; VI-NEXT: ; implicit-def: $vgpr02319; VI-NEXT: s_cbranch_vccz .LBB11_22320; VI-NEXT: ; %bb.1: ; %frem.else162321; VI-NEXT: s_and_b32 s6, s2, 0x800000002322; VI-NEXT: v_mov_b32_e32 v1, s42323; VI-NEXT: v_mov_b32_e32 v0, s22324; VI-NEXT: v_cmp_eq_f32_e64 vcc, |s2|, |v1|2325; VI-NEXT: v_mov_b32_e32 v1, s62326; VI-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc2327; VI-NEXT: s_mov_b32 s6, 02328; VI-NEXT: .LBB11_2: ; %Flow532329; VI-NEXT: s_xor_b32 s6, s6, 12330; VI-NEXT: s_cmp_lg_u32 s6, 02331; VI-NEXT: s_cbranch_scc1 .LBB11_82332; VI-NEXT: ; %bb.3: ; %frem.compute152333; VI-NEXT: v_frexp_mant_f32_e64 v1, |s4|2334; VI-NEXT: v_ldexp_f32 v1, v1, 12335; VI-NEXT: v_div_scale_f32 v3, s[6:7], v1, v1, 1.02336; VI-NEXT: v_frexp_mant_f32_e64 v0, |s2|2337; VI-NEXT: v_frexp_exp_i32_f32_e64 v5, |s2|2338; VI-NEXT: v_frexp_exp_i32_f32_e64 v6, |s4|2339; VI-NEXT: v_add_u32_e32 v2, vcc, -1, v52340; VI-NEXT: v_ldexp_f32 v4, v0, 122341; VI-NEXT: v_add_u32_e32 v0, vcc, -1, v62342; VI-NEXT: v_sub_u32_e32 v2, vcc, v2, v02343; VI-NEXT: v_div_scale_f32 v7, vcc, 1.0, v1, 1.02344; VI-NEXT: v_rcp_f32_e32 v8, v32345; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 32346; VI-NEXT: v_fma_f32 v9, -v3, v8, 1.02347; VI-NEXT: v_fma_f32 v8, v9, v8, v82348; VI-NEXT: v_mul_f32_e32 v9, v7, v82349; VI-NEXT: v_fma_f32 v10, -v3, v9, v72350; VI-NEXT: v_fma_f32 v9, v10, v8, v92351; VI-NEXT: v_fma_f32 v3, -v3, v9, v72352; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 02353; VI-NEXT: v_div_fmas_f32 v3, v3, v8, v92354; VI-NEXT: v_cmp_ge_i32_e32 vcc, 12, v22355; VI-NEXT: v_div_fixup_f32 v3, v3, v1, 1.02356; VI-NEXT: s_cbranch_vccnz .LBB11_62357; VI-NEXT: ; %bb.4: ; %frem.loop_body23.preheader2358; VI-NEXT: v_add_u32_e32 v2, vcc, 12, v52359; VI-NEXT: v_sub_u32_e32 v2, vcc, v2, v62360; VI-NEXT: .LBB11_5: ; %frem.loop_body232361; VI-NEXT: ; =>This Inner Loop Header: Depth=12362; VI-NEXT: v_mov_b32_e32 v5, v42363; VI-NEXT: v_mul_f32_e32 v4, v5, v32364; VI-NEXT: v_rndne_f32_e32 v4, v42365; VI-NEXT: v_fma_f32 v4, -v4, v1, v52366; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v42367; VI-NEXT: v_add_f32_e32 v6, v4, v12368; VI-NEXT: v_cndmask_b32_e32 v4, v4, v6, vcc2369; VI-NEXT: v_add_u32_e32 v2, vcc, -12, v22370; VI-NEXT: v_ldexp_f32 v4, v4, 122371; VI-NEXT: v_cmp_lt_i32_e32 vcc, 12, v22372; VI-NEXT: s_cbranch_vccnz .LBB11_52373; VI-NEXT: s_branch .LBB11_72374; VI-NEXT: .LBB11_6:2375; VI-NEXT: v_mov_b32_e32 v5, v42376; VI-NEXT: .LBB11_7: ; %frem.loop_exit242377; VI-NEXT: v_add_u32_e32 v2, vcc, -11, v22378; VI-NEXT: v_ldexp_f32 v2, v5, v22379; VI-NEXT: v_mul_f32_e32 v3, v2, v32380; VI-NEXT: v_rndne_f32_e32 v3, v32381; VI-NEXT: v_fma_f32 v2, -v3, v1, v22382; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v22383; VI-NEXT: v_add_f32_e32 v1, v2, v12384; VI-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc2385; VI-NEXT: v_ldexp_f32 v0, v1, v02386; VI-NEXT: v_and_b32_e32 v0, 0x7fffffff, v02387; VI-NEXT: s_and_b32 s6, s2, 0x800000002388; VI-NEXT: v_or_b32_e32 v0, s6, v02389; VI-NEXT: .LBB11_8: ; %Flow542390; VI-NEXT: v_mov_b32_e32 v1, s52391; VI-NEXT: v_cmp_ngt_f32_e64 vcc, |s3|, |v1|2392; VI-NEXT: s_mov_b32 s6, 12393; VI-NEXT: ; implicit-def: $vgpr12394; VI-NEXT: s_cbranch_vccz .LBB11_102395; VI-NEXT: ; %bb.9: ; %frem.else2396; VI-NEXT: s_and_b32 s6, s3, 0x800000002397; VI-NEXT: v_mov_b32_e32 v2, s52398; VI-NEXT: v_mov_b32_e32 v1, s32399; VI-NEXT: v_cmp_eq_f32_e64 vcc, |s3|, |v2|2400; VI-NEXT: v_mov_b32_e32 v2, s62401; VI-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc2402; VI-NEXT: s_mov_b32 s6, 02403; VI-NEXT: .LBB11_10: ; %Flow492404; VI-NEXT: s_xor_b32 s6, s6, 12405; VI-NEXT: s_cmp_lg_u32 s6, 02406; VI-NEXT: s_cbranch_scc1 .LBB11_162407; VI-NEXT: ; %bb.11: ; %frem.compute2408; VI-NEXT: v_frexp_mant_f32_e64 v2, |s5|2409; VI-NEXT: v_ldexp_f32 v2, v2, 12410; VI-NEXT: v_div_scale_f32 v4, s[6:7], v2, v2, 1.02411; VI-NEXT: v_frexp_mant_f32_e64 v1, |s3|2412; VI-NEXT: v_frexp_exp_i32_f32_e64 v6, |s3|2413; VI-NEXT: v_frexp_exp_i32_f32_e64 v7, |s5|2414; VI-NEXT: v_add_u32_e32 v3, vcc, -1, v62415; VI-NEXT: v_ldexp_f32 v5, v1, 122416; VI-NEXT: v_add_u32_e32 v1, vcc, -1, v72417; VI-NEXT: v_sub_u32_e32 v3, vcc, v3, v12418; VI-NEXT: v_div_scale_f32 v8, vcc, 1.0, v2, 1.02419; VI-NEXT: v_rcp_f32_e32 v9, v42420; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 32421; VI-NEXT: v_fma_f32 v10, -v4, v9, 1.02422; VI-NEXT: v_fma_f32 v9, v10, v9, v92423; VI-NEXT: v_mul_f32_e32 v10, v8, v92424; VI-NEXT: v_fma_f32 v11, -v4, v10, v82425; VI-NEXT: v_fma_f32 v10, v11, v9, v102426; VI-NEXT: v_fma_f32 v4, -v4, v10, v82427; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 02428; VI-NEXT: v_div_fmas_f32 v4, v4, v9, v102429; VI-NEXT: v_cmp_ge_i32_e32 vcc, 12, v32430; VI-NEXT: v_div_fixup_f32 v4, v4, v2, 1.02431; VI-NEXT: s_cbranch_vccnz .LBB11_142432; VI-NEXT: ; %bb.12: ; %frem.loop_body.preheader2433; VI-NEXT: v_add_u32_e32 v3, vcc, 12, v62434; VI-NEXT: v_sub_u32_e32 v3, vcc, v3, v72435; VI-NEXT: .LBB11_13: ; %frem.loop_body2436; VI-NEXT: ; =>This Inner Loop Header: Depth=12437; VI-NEXT: v_mov_b32_e32 v6, v52438; VI-NEXT: v_mul_f32_e32 v5, v6, v42439; VI-NEXT: v_rndne_f32_e32 v5, v52440; VI-NEXT: v_fma_f32 v5, -v5, v2, v62441; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v52442; VI-NEXT: v_add_f32_e32 v7, v5, v22443; VI-NEXT: v_cndmask_b32_e32 v5, v5, v7, vcc2444; VI-NEXT: v_add_u32_e32 v3, vcc, -12, v32445; VI-NEXT: v_ldexp_f32 v5, v5, 122446; VI-NEXT: v_cmp_lt_i32_e32 vcc, 12, v32447; VI-NEXT: s_cbranch_vccnz .LBB11_132448; VI-NEXT: s_branch .LBB11_152449; VI-NEXT: .LBB11_14:2450; VI-NEXT: v_mov_b32_e32 v6, v52451; VI-NEXT: .LBB11_15: ; %frem.loop_exit2452; VI-NEXT: v_add_u32_e32 v3, vcc, -11, v32453; VI-NEXT: v_ldexp_f32 v3, v6, v32454; VI-NEXT: v_mul_f32_e32 v4, v3, v42455; VI-NEXT: v_rndne_f32_e32 v4, v42456; VI-NEXT: v_fma_f32 v3, -v4, v2, v32457; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v32458; VI-NEXT: v_add_f32_e32 v2, v3, v22459; VI-NEXT: v_cndmask_b32_e32 v2, v3, v2, vcc2460; VI-NEXT: v_ldexp_f32 v1, v2, v12461; VI-NEXT: v_and_b32_e32 v1, 0x7fffffff, v12462; VI-NEXT: s_and_b32 s6, s3, 0x800000002463; VI-NEXT: v_or_b32_e32 v1, s6, v12464; VI-NEXT: .LBB11_16: ; %Flow502465; VI-NEXT: v_cmp_nlg_f32_e64 vcc, s4, 02466; VI-NEXT: v_mov_b32_e32 v2, 0x7fc000002467; VI-NEXT: v_mov_b32_e32 v3, 0x7f8000002468; VI-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc2469; VI-NEXT: v_cmp_nge_f32_e64 vcc, |s2|, v32470; VI-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2471; VI-NEXT: v_cmp_nlg_f32_e64 vcc, s5, 02472; VI-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc2473; VI-NEXT: v_cmp_nge_f32_e64 vcc, |s3|, v32474; VI-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc2475; VI-NEXT: v_mov_b32_e32 v3, s12476; VI-NEXT: v_mov_b32_e32 v2, s02477; VI-NEXT: flat_store_dwordx2 v[2:3], v[0:1]2478; VI-NEXT: s_endpgm2479 %gep2 = getelementptr <2 x float>, ptr addrspace(1) %in2, i32 42480 %r0 = load <2 x float>, ptr addrspace(1) %in1, align 82481 %r1 = load <2 x float>, ptr addrspace(1) %gep2, align 82482 %r2 = frem <2 x float> %r0, %r12483 store <2 x float> %r2, ptr addrspace(1) %out, align 82484 ret void2485}2486 2487define amdgpu_kernel void @frem_v4f32(ptr addrspace(1) %out, ptr addrspace(1) %in1, ptr addrspace(1) %in2) #0 {2488; CI-LABEL: frem_v4f32:2489; CI: ; %bb.0:2490; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x92491; CI-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0xd2492; CI-NEXT: s_waitcnt lgkmcnt(0)2493; CI-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x02494; CI-NEXT: s_load_dwordx4 s[8:11], s[8:9], 0x102495; CI-NEXT: s_mov_b32 s2, 12496; CI-NEXT: s_waitcnt lgkmcnt(0)2497; CI-NEXT: v_mov_b32_e32 v0, s82498; CI-NEXT: v_cmp_ngt_f32_e64 vcc, |s4|, |v0|2499; CI-NEXT: ; implicit-def: $vgpr02500; CI-NEXT: s_cbranch_vccz .LBB12_22501; CI-NEXT: ; %bb.1: ; %frem.else782502; CI-NEXT: s_and_b32 s2, s4, 0x800000002503; CI-NEXT: v_mov_b32_e32 v1, s82504; CI-NEXT: v_mov_b32_e32 v0, s42505; CI-NEXT: v_cmp_eq_f32_e64 vcc, |s4|, |v1|2506; CI-NEXT: v_mov_b32_e32 v1, s22507; CI-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc2508; CI-NEXT: s_mov_b32 s2, 02509; CI-NEXT: .LBB12_2: ; %Flow1272510; CI-NEXT: s_xor_b32 s2, s2, 12511; CI-NEXT: s_cmp_lg_u32 s2, 02512; CI-NEXT: s_cbranch_scc1 .LBB12_82513; CI-NEXT: ; %bb.3: ; %frem.compute772514; CI-NEXT: v_frexp_mant_f32_e64 v1, |s8|2515; CI-NEXT: v_ldexp_f32_e64 v1, v1, 12516; CI-NEXT: v_div_scale_f32 v3, s[2:3], v1, v1, 1.02517; CI-NEXT: v_frexp_mant_f32_e64 v0, |s4|2518; CI-NEXT: v_frexp_exp_i32_f32_e64 v5, |s4|2519; CI-NEXT: v_frexp_exp_i32_f32_e64 v6, |s8|2520; CI-NEXT: v_add_i32_e32 v2, vcc, -1, v52521; CI-NEXT: v_ldexp_f32_e64 v4, v0, 122522; CI-NEXT: v_add_i32_e32 v0, vcc, -1, v62523; CI-NEXT: v_sub_i32_e32 v2, vcc, v2, v02524; CI-NEXT: v_div_scale_f32 v7, vcc, 1.0, v1, 1.02525; CI-NEXT: v_rcp_f32_e32 v8, v32526; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 32527; CI-NEXT: v_fma_f32 v9, -v3, v8, 1.02528; CI-NEXT: v_fma_f32 v8, v9, v8, v82529; CI-NEXT: v_mul_f32_e32 v9, v7, v82530; CI-NEXT: v_fma_f32 v10, -v3, v9, v72531; CI-NEXT: v_fma_f32 v9, v10, v8, v92532; CI-NEXT: v_fma_f32 v3, -v3, v9, v72533; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 02534; CI-NEXT: v_div_fmas_f32 v3, v3, v8, v92535; CI-NEXT: v_cmp_ge_i32_e32 vcc, 12, v22536; CI-NEXT: v_div_fixup_f32 v3, v3, v1, 1.02537; CI-NEXT: s_cbranch_vccnz .LBB12_62538; CI-NEXT: ; %bb.4: ; %frem.loop_body85.preheader2539; CI-NEXT: v_add_i32_e32 v2, vcc, 12, v52540; CI-NEXT: v_sub_i32_e32 v2, vcc, v2, v62541; CI-NEXT: .LBB12_5: ; %frem.loop_body852542; CI-NEXT: ; =>This Inner Loop Header: Depth=12543; CI-NEXT: v_mov_b32_e32 v5, v42544; CI-NEXT: v_mul_f32_e32 v4, v5, v32545; CI-NEXT: v_rndne_f32_e32 v4, v42546; CI-NEXT: v_fma_f32 v4, -v4, v1, v52547; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v42548; CI-NEXT: v_add_f32_e32 v6, v4, v12549; CI-NEXT: v_cndmask_b32_e32 v4, v4, v6, vcc2550; CI-NEXT: v_add_i32_e32 v2, vcc, -12, v22551; CI-NEXT: v_ldexp_f32_e64 v4, v4, 122552; CI-NEXT: v_cmp_lt_i32_e32 vcc, 12, v22553; CI-NEXT: s_cbranch_vccnz .LBB12_52554; CI-NEXT: s_branch .LBB12_72555; CI-NEXT: .LBB12_6:2556; CI-NEXT: v_mov_b32_e32 v5, v42557; CI-NEXT: .LBB12_7: ; %frem.loop_exit862558; CI-NEXT: v_add_i32_e32 v2, vcc, -11, v22559; CI-NEXT: v_ldexp_f32_e32 v2, v5, v22560; CI-NEXT: v_mul_f32_e32 v3, v2, v32561; CI-NEXT: v_rndne_f32_e32 v3, v32562; CI-NEXT: v_fma_f32 v2, -v3, v1, v22563; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v22564; CI-NEXT: v_add_f32_e32 v1, v2, v12565; CI-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc2566; CI-NEXT: v_ldexp_f32_e32 v0, v1, v02567; CI-NEXT: v_and_b32_e32 v0, 0x7fffffff, v02568; CI-NEXT: s_and_b32 s2, s4, 0x800000002569; CI-NEXT: v_or_b32_e32 v0, s2, v02570; CI-NEXT: .LBB12_8: ; %Flow1282571; CI-NEXT: v_mov_b32_e32 v1, s92572; CI-NEXT: v_cmp_ngt_f32_e64 vcc, |s5|, |v1|2573; CI-NEXT: s_mov_b32 s2, 12574; CI-NEXT: ; implicit-def: $vgpr12575; CI-NEXT: s_cbranch_vccz .LBB12_102576; CI-NEXT: ; %bb.9: ; %frem.else472577; CI-NEXT: s_and_b32 s2, s5, 0x800000002578; CI-NEXT: v_mov_b32_e32 v2, s92579; CI-NEXT: v_mov_b32_e32 v1, s52580; CI-NEXT: v_cmp_eq_f32_e64 vcc, |s5|, |v2|2581; CI-NEXT: v_mov_b32_e32 v2, s22582; CI-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc2583; CI-NEXT: s_mov_b32 s2, 02584; CI-NEXT: .LBB12_10: ; %Flow1232585; CI-NEXT: s_xor_b32 s2, s2, 12586; CI-NEXT: s_cmp_lg_u32 s2, 02587; CI-NEXT: s_cbranch_scc1 .LBB12_162588; CI-NEXT: ; %bb.11: ; %frem.compute462589; CI-NEXT: v_frexp_mant_f32_e64 v2, |s9|2590; CI-NEXT: v_ldexp_f32_e64 v2, v2, 12591; CI-NEXT: v_div_scale_f32 v4, s[2:3], v2, v2, 1.02592; CI-NEXT: v_frexp_mant_f32_e64 v1, |s5|2593; CI-NEXT: v_frexp_exp_i32_f32_e64 v6, |s5|2594; CI-NEXT: v_frexp_exp_i32_f32_e64 v7, |s9|2595; CI-NEXT: v_add_i32_e32 v3, vcc, -1, v62596; CI-NEXT: v_ldexp_f32_e64 v5, v1, 122597; CI-NEXT: v_add_i32_e32 v1, vcc, -1, v72598; CI-NEXT: v_sub_i32_e32 v3, vcc, v3, v12599; CI-NEXT: v_div_scale_f32 v8, vcc, 1.0, v2, 1.02600; CI-NEXT: v_rcp_f32_e32 v9, v42601; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 32602; CI-NEXT: v_fma_f32 v10, -v4, v9, 1.02603; CI-NEXT: v_fma_f32 v9, v10, v9, v92604; CI-NEXT: v_mul_f32_e32 v10, v8, v92605; CI-NEXT: v_fma_f32 v11, -v4, v10, v82606; CI-NEXT: v_fma_f32 v10, v11, v9, v102607; CI-NEXT: v_fma_f32 v4, -v4, v10, v82608; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 02609; CI-NEXT: v_div_fmas_f32 v4, v4, v9, v102610; CI-NEXT: v_cmp_ge_i32_e32 vcc, 12, v32611; CI-NEXT: v_div_fixup_f32 v4, v4, v2, 1.02612; CI-NEXT: s_cbranch_vccnz .LBB12_142613; CI-NEXT: ; %bb.12: ; %frem.loop_body54.preheader2614; CI-NEXT: v_add_i32_e32 v3, vcc, 12, v62615; CI-NEXT: v_sub_i32_e32 v3, vcc, v3, v72616; CI-NEXT: .LBB12_13: ; %frem.loop_body542617; CI-NEXT: ; =>This Inner Loop Header: Depth=12618; CI-NEXT: v_mov_b32_e32 v6, v52619; CI-NEXT: v_mul_f32_e32 v5, v6, v42620; CI-NEXT: v_rndne_f32_e32 v5, v52621; CI-NEXT: v_fma_f32 v5, -v5, v2, v62622; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v52623; CI-NEXT: v_add_f32_e32 v7, v5, v22624; CI-NEXT: v_cndmask_b32_e32 v5, v5, v7, vcc2625; CI-NEXT: v_add_i32_e32 v3, vcc, -12, v32626; CI-NEXT: v_ldexp_f32_e64 v5, v5, 122627; CI-NEXT: v_cmp_lt_i32_e32 vcc, 12, v32628; CI-NEXT: s_cbranch_vccnz .LBB12_132629; CI-NEXT: s_branch .LBB12_152630; CI-NEXT: .LBB12_14:2631; CI-NEXT: v_mov_b32_e32 v6, v52632; CI-NEXT: .LBB12_15: ; %frem.loop_exit552633; CI-NEXT: v_add_i32_e32 v3, vcc, -11, v32634; CI-NEXT: v_ldexp_f32_e32 v3, v6, v32635; CI-NEXT: v_mul_f32_e32 v4, v3, v42636; CI-NEXT: v_rndne_f32_e32 v4, v42637; CI-NEXT: v_fma_f32 v3, -v4, v2, v32638; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v32639; CI-NEXT: v_add_f32_e32 v2, v3, v22640; CI-NEXT: v_cndmask_b32_e32 v2, v3, v2, vcc2641; CI-NEXT: v_ldexp_f32_e32 v1, v2, v12642; CI-NEXT: v_and_b32_e32 v1, 0x7fffffff, v12643; CI-NEXT: s_and_b32 s2, s5, 0x800000002644; CI-NEXT: v_or_b32_e32 v1, s2, v12645; CI-NEXT: .LBB12_16: ; %Flow1242646; CI-NEXT: v_mov_b32_e32 v2, s102647; CI-NEXT: v_cmp_ngt_f32_e64 vcc, |s6|, |v2|2648; CI-NEXT: s_mov_b32 s2, 12649; CI-NEXT: ; implicit-def: $vgpr22650; CI-NEXT: s_cbranch_vccz .LBB12_182651; CI-NEXT: ; %bb.17: ; %frem.else162652; CI-NEXT: s_and_b32 s2, s6, 0x800000002653; CI-NEXT: v_mov_b32_e32 v3, s102654; CI-NEXT: v_mov_b32_e32 v2, s62655; CI-NEXT: v_cmp_eq_f32_e64 vcc, |s6|, |v3|2656; CI-NEXT: v_mov_b32_e32 v3, s22657; CI-NEXT: v_cndmask_b32_e32 v2, v2, v3, vcc2658; CI-NEXT: s_mov_b32 s2, 02659; CI-NEXT: .LBB12_18: ; %Flow1192660; CI-NEXT: s_xor_b32 s2, s2, 12661; CI-NEXT: s_cmp_lg_u32 s2, 02662; CI-NEXT: s_cbranch_scc1 .LBB12_242663; CI-NEXT: ; %bb.19: ; %frem.compute152664; CI-NEXT: v_frexp_mant_f32_e64 v3, |s10|2665; CI-NEXT: v_ldexp_f32_e64 v3, v3, 12666; CI-NEXT: v_div_scale_f32 v5, s[2:3], v3, v3, 1.02667; CI-NEXT: v_frexp_mant_f32_e64 v2, |s6|2668; CI-NEXT: v_frexp_exp_i32_f32_e64 v7, |s6|2669; CI-NEXT: v_frexp_exp_i32_f32_e64 v8, |s10|2670; CI-NEXT: v_add_i32_e32 v4, vcc, -1, v72671; CI-NEXT: v_ldexp_f32_e64 v6, v2, 122672; CI-NEXT: v_add_i32_e32 v2, vcc, -1, v82673; CI-NEXT: v_sub_i32_e32 v4, vcc, v4, v22674; CI-NEXT: v_div_scale_f32 v9, vcc, 1.0, v3, 1.02675; CI-NEXT: v_rcp_f32_e32 v10, v52676; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 32677; CI-NEXT: v_fma_f32 v11, -v5, v10, 1.02678; CI-NEXT: v_fma_f32 v10, v11, v10, v102679; CI-NEXT: v_mul_f32_e32 v11, v9, v102680; CI-NEXT: v_fma_f32 v12, -v5, v11, v92681; CI-NEXT: v_fma_f32 v11, v12, v10, v112682; CI-NEXT: v_fma_f32 v5, -v5, v11, v92683; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 02684; CI-NEXT: v_div_fmas_f32 v5, v5, v10, v112685; CI-NEXT: v_cmp_ge_i32_e32 vcc, 12, v42686; CI-NEXT: v_div_fixup_f32 v5, v5, v3, 1.02687; CI-NEXT: s_cbranch_vccnz .LBB12_222688; CI-NEXT: ; %bb.20: ; %frem.loop_body23.preheader2689; CI-NEXT: v_add_i32_e32 v4, vcc, 12, v72690; CI-NEXT: v_sub_i32_e32 v4, vcc, v4, v82691; CI-NEXT: .LBB12_21: ; %frem.loop_body232692; CI-NEXT: ; =>This Inner Loop Header: Depth=12693; CI-NEXT: v_mov_b32_e32 v7, v62694; CI-NEXT: v_mul_f32_e32 v6, v7, v52695; CI-NEXT: v_rndne_f32_e32 v6, v62696; CI-NEXT: v_fma_f32 v6, -v6, v3, v72697; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v62698; CI-NEXT: v_add_f32_e32 v8, v6, v32699; CI-NEXT: v_cndmask_b32_e32 v6, v6, v8, vcc2700; CI-NEXT: v_add_i32_e32 v4, vcc, -12, v42701; CI-NEXT: v_ldexp_f32_e64 v6, v6, 122702; CI-NEXT: v_cmp_lt_i32_e32 vcc, 12, v42703; CI-NEXT: s_cbranch_vccnz .LBB12_212704; CI-NEXT: s_branch .LBB12_232705; CI-NEXT: .LBB12_22:2706; CI-NEXT: v_mov_b32_e32 v7, v62707; CI-NEXT: .LBB12_23: ; %frem.loop_exit242708; CI-NEXT: v_add_i32_e32 v4, vcc, -11, v42709; CI-NEXT: v_ldexp_f32_e32 v4, v7, v42710; CI-NEXT: v_mul_f32_e32 v5, v4, v52711; CI-NEXT: v_rndne_f32_e32 v5, v52712; CI-NEXT: v_fma_f32 v4, -v5, v3, v42713; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v42714; CI-NEXT: v_add_f32_e32 v3, v4, v32715; CI-NEXT: v_cndmask_b32_e32 v3, v4, v3, vcc2716; CI-NEXT: v_ldexp_f32_e32 v2, v3, v22717; CI-NEXT: v_and_b32_e32 v2, 0x7fffffff, v22718; CI-NEXT: s_and_b32 s2, s6, 0x800000002719; CI-NEXT: v_or_b32_e32 v2, s2, v22720; CI-NEXT: .LBB12_24: ; %Flow1202721; CI-NEXT: v_mov_b32_e32 v3, s112722; CI-NEXT: v_cmp_ngt_f32_e64 vcc, |s7|, |v3|2723; CI-NEXT: s_mov_b32 s2, 12724; CI-NEXT: ; implicit-def: $vgpr32725; CI-NEXT: s_cbranch_vccz .LBB12_262726; CI-NEXT: ; %bb.25: ; %frem.else2727; CI-NEXT: s_and_b32 s2, s7, 0x800000002728; CI-NEXT: v_mov_b32_e32 v4, s112729; CI-NEXT: v_mov_b32_e32 v3, s72730; CI-NEXT: v_cmp_eq_f32_e64 vcc, |s7|, |v4|2731; CI-NEXT: v_mov_b32_e32 v4, s22732; CI-NEXT: v_cndmask_b32_e32 v3, v3, v4, vcc2733; CI-NEXT: s_mov_b32 s2, 02734; CI-NEXT: .LBB12_26: ; %Flow1152735; CI-NEXT: s_xor_b32 s2, s2, 12736; CI-NEXT: s_cmp_lg_u32 s2, 02737; CI-NEXT: s_cbranch_scc1 .LBB12_322738; CI-NEXT: ; %bb.27: ; %frem.compute2739; CI-NEXT: v_frexp_mant_f32_e64 v4, |s11|2740; CI-NEXT: v_ldexp_f32_e64 v4, v4, 12741; CI-NEXT: v_div_scale_f32 v6, s[2:3], v4, v4, 1.02742; CI-NEXT: v_frexp_mant_f32_e64 v3, |s7|2743; CI-NEXT: v_frexp_exp_i32_f32_e64 v8, |s7|2744; CI-NEXT: v_frexp_exp_i32_f32_e64 v9, |s11|2745; CI-NEXT: v_add_i32_e32 v5, vcc, -1, v82746; CI-NEXT: v_ldexp_f32_e64 v7, v3, 122747; CI-NEXT: v_add_i32_e32 v3, vcc, -1, v92748; CI-NEXT: v_sub_i32_e32 v5, vcc, v5, v32749; CI-NEXT: v_div_scale_f32 v10, vcc, 1.0, v4, 1.02750; CI-NEXT: v_rcp_f32_e32 v11, v62751; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 32752; CI-NEXT: v_fma_f32 v12, -v6, v11, 1.02753; CI-NEXT: v_fma_f32 v11, v12, v11, v112754; CI-NEXT: v_mul_f32_e32 v12, v10, v112755; CI-NEXT: v_fma_f32 v13, -v6, v12, v102756; CI-NEXT: v_fma_f32 v12, v13, v11, v122757; CI-NEXT: v_fma_f32 v6, -v6, v12, v102758; CI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 02759; CI-NEXT: v_div_fmas_f32 v6, v6, v11, v122760; CI-NEXT: v_cmp_ge_i32_e32 vcc, 12, v52761; CI-NEXT: v_div_fixup_f32 v6, v6, v4, 1.02762; CI-NEXT: s_cbranch_vccnz .LBB12_302763; CI-NEXT: ; %bb.28: ; %frem.loop_body.preheader2764; CI-NEXT: v_add_i32_e32 v5, vcc, 12, v82765; CI-NEXT: v_sub_i32_e32 v5, vcc, v5, v92766; CI-NEXT: .LBB12_29: ; %frem.loop_body2767; CI-NEXT: ; =>This Inner Loop Header: Depth=12768; CI-NEXT: v_mov_b32_e32 v8, v72769; CI-NEXT: v_mul_f32_e32 v7, v8, v62770; CI-NEXT: v_rndne_f32_e32 v7, v72771; CI-NEXT: v_fma_f32 v7, -v7, v4, v82772; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v72773; CI-NEXT: v_add_f32_e32 v9, v7, v42774; CI-NEXT: v_cndmask_b32_e32 v7, v7, v9, vcc2775; CI-NEXT: v_add_i32_e32 v5, vcc, -12, v52776; CI-NEXT: v_ldexp_f32_e64 v7, v7, 122777; CI-NEXT: v_cmp_lt_i32_e32 vcc, 12, v52778; CI-NEXT: s_cbranch_vccnz .LBB12_292779; CI-NEXT: s_branch .LBB12_312780; CI-NEXT: .LBB12_30:2781; CI-NEXT: v_mov_b32_e32 v8, v72782; CI-NEXT: .LBB12_31: ; %frem.loop_exit2783; CI-NEXT: v_add_i32_e32 v5, vcc, -11, v52784; CI-NEXT: v_ldexp_f32_e32 v5, v8, v52785; CI-NEXT: v_mul_f32_e32 v6, v5, v62786; CI-NEXT: v_rndne_f32_e32 v6, v62787; CI-NEXT: v_fma_f32 v5, -v6, v4, v52788; CI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v52789; CI-NEXT: v_add_f32_e32 v4, v5, v42790; CI-NEXT: v_cndmask_b32_e32 v4, v5, v4, vcc2791; CI-NEXT: v_ldexp_f32_e32 v3, v4, v32792; CI-NEXT: v_and_b32_e32 v3, 0x7fffffff, v32793; CI-NEXT: s_and_b32 s2, s7, 0x800000002794; CI-NEXT: v_or_b32_e32 v3, s2, v32795; CI-NEXT: .LBB12_32: ; %Flow1162796; CI-NEXT: v_cmp_nlg_f32_e64 vcc, s8, 02797; CI-NEXT: v_mov_b32_e32 v4, 0x7fc000002798; CI-NEXT: v_mov_b32_e32 v5, 0x7f8000002799; CI-NEXT: v_cndmask_b32_e32 v0, v0, v4, vcc2800; CI-NEXT: v_cmp_nge_f32_e64 vcc, |s4|, v52801; CI-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc2802; CI-NEXT: v_cmp_nlg_f32_e64 vcc, s9, 02803; CI-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc2804; CI-NEXT: v_cmp_nge_f32_e64 vcc, |s5|, v52805; CI-NEXT: v_cndmask_b32_e32 v1, v4, v1, vcc2806; CI-NEXT: v_cmp_nlg_f32_e64 vcc, s10, 02807; CI-NEXT: v_cndmask_b32_e32 v2, v2, v4, vcc2808; CI-NEXT: v_cmp_nge_f32_e64 vcc, |s6|, v52809; CI-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc2810; CI-NEXT: v_cmp_nlg_f32_e64 vcc, s11, 02811; CI-NEXT: v_cndmask_b32_e32 v3, v3, v4, vcc2812; CI-NEXT: v_cmp_nge_f32_e64 vcc, |s7|, v52813; CI-NEXT: v_cndmask_b32_e32 v3, v4, v3, vcc2814; CI-NEXT: s_mov_b32 s2, -12815; CI-NEXT: s_mov_b32 s3, 0xf0002816; CI-NEXT: buffer_store_dwordx4 v[0:3], off, s[0:3], 02817; CI-NEXT: s_endpgm2818;2819; VI-LABEL: frem_v4f32:2820; VI: ; %bb.0:2821; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x242822; VI-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x342823; VI-NEXT: s_waitcnt lgkmcnt(0)2824; VI-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x02825; VI-NEXT: s_load_dwordx4 s[8:11], s[8:9], 0x402826; VI-NEXT: s_mov_b32 s2, 12827; VI-NEXT: s_waitcnt lgkmcnt(0)2828; VI-NEXT: v_mov_b32_e32 v0, s82829; VI-NEXT: v_cmp_ngt_f32_e64 vcc, |s4|, |v0|2830; VI-NEXT: ; implicit-def: $vgpr02831; VI-NEXT: s_cbranch_vccz .LBB12_22832; VI-NEXT: ; %bb.1: ; %frem.else782833; VI-NEXT: s_and_b32 s2, s4, 0x800000002834; VI-NEXT: v_mov_b32_e32 v1, s82835; VI-NEXT: v_mov_b32_e32 v0, s42836; VI-NEXT: v_cmp_eq_f32_e64 vcc, |s4|, |v1|2837; VI-NEXT: v_mov_b32_e32 v1, s22838; VI-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc2839; VI-NEXT: s_mov_b32 s2, 02840; VI-NEXT: .LBB12_2: ; %Flow1272841; VI-NEXT: s_xor_b32 s2, s2, 12842; VI-NEXT: s_cmp_lg_u32 s2, 02843; VI-NEXT: s_cbranch_scc1 .LBB12_82844; VI-NEXT: ; %bb.3: ; %frem.compute772845; VI-NEXT: v_frexp_mant_f32_e64 v1, |s8|2846; VI-NEXT: v_ldexp_f32 v1, v1, 12847; VI-NEXT: v_div_scale_f32 v3, s[2:3], v1, v1, 1.02848; VI-NEXT: v_frexp_mant_f32_e64 v0, |s4|2849; VI-NEXT: v_frexp_exp_i32_f32_e64 v5, |s4|2850; VI-NEXT: v_frexp_exp_i32_f32_e64 v6, |s8|2851; VI-NEXT: v_add_u32_e32 v2, vcc, -1, v52852; VI-NEXT: v_ldexp_f32 v4, v0, 122853; VI-NEXT: v_add_u32_e32 v0, vcc, -1, v62854; VI-NEXT: v_sub_u32_e32 v2, vcc, v2, v02855; VI-NEXT: v_div_scale_f32 v7, vcc, 1.0, v1, 1.02856; VI-NEXT: v_rcp_f32_e32 v8, v32857; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 32858; VI-NEXT: v_fma_f32 v9, -v3, v8, 1.02859; VI-NEXT: v_fma_f32 v8, v9, v8, v82860; VI-NEXT: v_mul_f32_e32 v9, v7, v82861; VI-NEXT: v_fma_f32 v10, -v3, v9, v72862; VI-NEXT: v_fma_f32 v9, v10, v8, v92863; VI-NEXT: v_fma_f32 v3, -v3, v9, v72864; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 02865; VI-NEXT: v_div_fmas_f32 v3, v3, v8, v92866; VI-NEXT: v_cmp_ge_i32_e32 vcc, 12, v22867; VI-NEXT: v_div_fixup_f32 v3, v3, v1, 1.02868; VI-NEXT: s_cbranch_vccnz .LBB12_62869; VI-NEXT: ; %bb.4: ; %frem.loop_body85.preheader2870; VI-NEXT: v_add_u32_e32 v2, vcc, 12, v52871; VI-NEXT: v_sub_u32_e32 v2, vcc, v2, v62872; VI-NEXT: .LBB12_5: ; %frem.loop_body852873; VI-NEXT: ; =>This Inner Loop Header: Depth=12874; VI-NEXT: v_mov_b32_e32 v5, v42875; VI-NEXT: v_mul_f32_e32 v4, v5, v32876; VI-NEXT: v_rndne_f32_e32 v4, v42877; VI-NEXT: v_fma_f32 v4, -v4, v1, v52878; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v42879; VI-NEXT: v_add_f32_e32 v6, v4, v12880; VI-NEXT: v_cndmask_b32_e32 v4, v4, v6, vcc2881; VI-NEXT: v_add_u32_e32 v2, vcc, -12, v22882; VI-NEXT: v_ldexp_f32 v4, v4, 122883; VI-NEXT: v_cmp_lt_i32_e32 vcc, 12, v22884; VI-NEXT: s_cbranch_vccnz .LBB12_52885; VI-NEXT: s_branch .LBB12_72886; VI-NEXT: .LBB12_6:2887; VI-NEXT: v_mov_b32_e32 v5, v42888; VI-NEXT: .LBB12_7: ; %frem.loop_exit862889; VI-NEXT: v_add_u32_e32 v2, vcc, -11, v22890; VI-NEXT: v_ldexp_f32 v2, v5, v22891; VI-NEXT: v_mul_f32_e32 v3, v2, v32892; VI-NEXT: v_rndne_f32_e32 v3, v32893; VI-NEXT: v_fma_f32 v2, -v3, v1, v22894; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v22895; VI-NEXT: v_add_f32_e32 v1, v2, v12896; VI-NEXT: v_cndmask_b32_e32 v1, v2, v1, vcc2897; VI-NEXT: v_ldexp_f32 v0, v1, v02898; VI-NEXT: v_and_b32_e32 v0, 0x7fffffff, v02899; VI-NEXT: s_and_b32 s2, s4, 0x800000002900; VI-NEXT: v_or_b32_e32 v0, s2, v02901; VI-NEXT: .LBB12_8: ; %Flow1282902; VI-NEXT: v_mov_b32_e32 v1, s92903; VI-NEXT: v_cmp_ngt_f32_e64 vcc, |s5|, |v1|2904; VI-NEXT: s_mov_b32 s2, 12905; VI-NEXT: ; implicit-def: $vgpr12906; VI-NEXT: s_cbranch_vccz .LBB12_102907; VI-NEXT: ; %bb.9: ; %frem.else472908; VI-NEXT: s_and_b32 s2, s5, 0x800000002909; VI-NEXT: v_mov_b32_e32 v2, s92910; VI-NEXT: v_mov_b32_e32 v1, s52911; VI-NEXT: v_cmp_eq_f32_e64 vcc, |s5|, |v2|2912; VI-NEXT: v_mov_b32_e32 v2, s22913; VI-NEXT: v_cndmask_b32_e32 v1, v1, v2, vcc2914; VI-NEXT: s_mov_b32 s2, 02915; VI-NEXT: .LBB12_10: ; %Flow1232916; VI-NEXT: s_xor_b32 s2, s2, 12917; VI-NEXT: s_cmp_lg_u32 s2, 02918; VI-NEXT: s_cbranch_scc1 .LBB12_162919; VI-NEXT: ; %bb.11: ; %frem.compute462920; VI-NEXT: v_frexp_mant_f32_e64 v2, |s9|2921; VI-NEXT: v_ldexp_f32 v2, v2, 12922; VI-NEXT: v_div_scale_f32 v4, s[2:3], v2, v2, 1.02923; VI-NEXT: v_frexp_mant_f32_e64 v1, |s5|2924; VI-NEXT: v_frexp_exp_i32_f32_e64 v6, |s5|2925; VI-NEXT: v_frexp_exp_i32_f32_e64 v7, |s9|2926; VI-NEXT: v_add_u32_e32 v3, vcc, -1, v62927; VI-NEXT: v_ldexp_f32 v5, v1, 122928; VI-NEXT: v_add_u32_e32 v1, vcc, -1, v72929; VI-NEXT: v_sub_u32_e32 v3, vcc, v3, v12930; VI-NEXT: v_div_scale_f32 v8, vcc, 1.0, v2, 1.02931; VI-NEXT: v_rcp_f32_e32 v9, v42932; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 32933; VI-NEXT: v_fma_f32 v10, -v4, v9, 1.02934; VI-NEXT: v_fma_f32 v9, v10, v9, v92935; VI-NEXT: v_mul_f32_e32 v10, v8, v92936; VI-NEXT: v_fma_f32 v11, -v4, v10, v82937; VI-NEXT: v_fma_f32 v10, v11, v9, v102938; VI-NEXT: v_fma_f32 v4, -v4, v10, v82939; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 02940; VI-NEXT: v_div_fmas_f32 v4, v4, v9, v102941; VI-NEXT: v_cmp_ge_i32_e32 vcc, 12, v32942; VI-NEXT: v_div_fixup_f32 v4, v4, v2, 1.02943; VI-NEXT: s_cbranch_vccnz .LBB12_142944; VI-NEXT: ; %bb.12: ; %frem.loop_body54.preheader2945; VI-NEXT: v_add_u32_e32 v3, vcc, 12, v62946; VI-NEXT: v_sub_u32_e32 v3, vcc, v3, v72947; VI-NEXT: .LBB12_13: ; %frem.loop_body542948; VI-NEXT: ; =>This Inner Loop Header: Depth=12949; VI-NEXT: v_mov_b32_e32 v6, v52950; VI-NEXT: v_mul_f32_e32 v5, v6, v42951; VI-NEXT: v_rndne_f32_e32 v5, v52952; VI-NEXT: v_fma_f32 v5, -v5, v2, v62953; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v52954; VI-NEXT: v_add_f32_e32 v7, v5, v22955; VI-NEXT: v_cndmask_b32_e32 v5, v5, v7, vcc2956; VI-NEXT: v_add_u32_e32 v3, vcc, -12, v32957; VI-NEXT: v_ldexp_f32 v5, v5, 122958; VI-NEXT: v_cmp_lt_i32_e32 vcc, 12, v32959; VI-NEXT: s_cbranch_vccnz .LBB12_132960; VI-NEXT: s_branch .LBB12_152961; VI-NEXT: .LBB12_14:2962; VI-NEXT: v_mov_b32_e32 v6, v52963; VI-NEXT: .LBB12_15: ; %frem.loop_exit552964; VI-NEXT: v_add_u32_e32 v3, vcc, -11, v32965; VI-NEXT: v_ldexp_f32 v3, v6, v32966; VI-NEXT: v_mul_f32_e32 v4, v3, v42967; VI-NEXT: v_rndne_f32_e32 v4, v42968; VI-NEXT: v_fma_f32 v3, -v4, v2, v32969; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v32970; VI-NEXT: v_add_f32_e32 v2, v3, v22971; VI-NEXT: v_cndmask_b32_e32 v2, v3, v2, vcc2972; VI-NEXT: v_ldexp_f32 v1, v2, v12973; VI-NEXT: v_and_b32_e32 v1, 0x7fffffff, v12974; VI-NEXT: s_and_b32 s2, s5, 0x800000002975; VI-NEXT: v_or_b32_e32 v1, s2, v12976; VI-NEXT: .LBB12_16: ; %Flow1242977; VI-NEXT: v_mov_b32_e32 v2, s102978; VI-NEXT: v_cmp_ngt_f32_e64 vcc, |s6|, |v2|2979; VI-NEXT: s_mov_b32 s2, 12980; VI-NEXT: ; implicit-def: $vgpr22981; VI-NEXT: s_cbranch_vccz .LBB12_182982; VI-NEXT: ; %bb.17: ; %frem.else162983; VI-NEXT: s_and_b32 s2, s6, 0x800000002984; VI-NEXT: v_mov_b32_e32 v3, s102985; VI-NEXT: v_mov_b32_e32 v2, s62986; VI-NEXT: v_cmp_eq_f32_e64 vcc, |s6|, |v3|2987; VI-NEXT: v_mov_b32_e32 v3, s22988; VI-NEXT: v_cndmask_b32_e32 v2, v2, v3, vcc2989; VI-NEXT: s_mov_b32 s2, 02990; VI-NEXT: .LBB12_18: ; %Flow1192991; VI-NEXT: s_xor_b32 s2, s2, 12992; VI-NEXT: s_cmp_lg_u32 s2, 02993; VI-NEXT: s_cbranch_scc1 .LBB12_242994; VI-NEXT: ; %bb.19: ; %frem.compute152995; VI-NEXT: v_frexp_mant_f32_e64 v3, |s10|2996; VI-NEXT: v_ldexp_f32 v3, v3, 12997; VI-NEXT: v_div_scale_f32 v5, s[2:3], v3, v3, 1.02998; VI-NEXT: v_frexp_mant_f32_e64 v2, |s6|2999; VI-NEXT: v_frexp_exp_i32_f32_e64 v7, |s6|3000; VI-NEXT: v_frexp_exp_i32_f32_e64 v8, |s10|3001; VI-NEXT: v_add_u32_e32 v4, vcc, -1, v73002; VI-NEXT: v_ldexp_f32 v6, v2, 123003; VI-NEXT: v_add_u32_e32 v2, vcc, -1, v83004; VI-NEXT: v_sub_u32_e32 v4, vcc, v4, v23005; VI-NEXT: v_div_scale_f32 v9, vcc, 1.0, v3, 1.03006; VI-NEXT: v_rcp_f32_e32 v10, v53007; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 33008; VI-NEXT: v_fma_f32 v11, -v5, v10, 1.03009; VI-NEXT: v_fma_f32 v10, v11, v10, v103010; VI-NEXT: v_mul_f32_e32 v11, v9, v103011; VI-NEXT: v_fma_f32 v12, -v5, v11, v93012; VI-NEXT: v_fma_f32 v11, v12, v10, v113013; VI-NEXT: v_fma_f32 v5, -v5, v11, v93014; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 03015; VI-NEXT: v_div_fmas_f32 v5, v5, v10, v113016; VI-NEXT: v_cmp_ge_i32_e32 vcc, 12, v43017; VI-NEXT: v_div_fixup_f32 v5, v5, v3, 1.03018; VI-NEXT: s_cbranch_vccnz .LBB12_223019; VI-NEXT: ; %bb.20: ; %frem.loop_body23.preheader3020; VI-NEXT: v_add_u32_e32 v4, vcc, 12, v73021; VI-NEXT: v_sub_u32_e32 v4, vcc, v4, v83022; VI-NEXT: .LBB12_21: ; %frem.loop_body233023; VI-NEXT: ; =>This Inner Loop Header: Depth=13024; VI-NEXT: v_mov_b32_e32 v7, v63025; VI-NEXT: v_mul_f32_e32 v6, v7, v53026; VI-NEXT: v_rndne_f32_e32 v6, v63027; VI-NEXT: v_fma_f32 v6, -v6, v3, v73028; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v63029; VI-NEXT: v_add_f32_e32 v8, v6, v33030; VI-NEXT: v_cndmask_b32_e32 v6, v6, v8, vcc3031; VI-NEXT: v_add_u32_e32 v4, vcc, -12, v43032; VI-NEXT: v_ldexp_f32 v6, v6, 123033; VI-NEXT: v_cmp_lt_i32_e32 vcc, 12, v43034; VI-NEXT: s_cbranch_vccnz .LBB12_213035; VI-NEXT: s_branch .LBB12_233036; VI-NEXT: .LBB12_22:3037; VI-NEXT: v_mov_b32_e32 v7, v63038; VI-NEXT: .LBB12_23: ; %frem.loop_exit243039; VI-NEXT: v_add_u32_e32 v4, vcc, -11, v43040; VI-NEXT: v_ldexp_f32 v4, v7, v43041; VI-NEXT: v_mul_f32_e32 v5, v4, v53042; VI-NEXT: v_rndne_f32_e32 v5, v53043; VI-NEXT: v_fma_f32 v4, -v5, v3, v43044; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v43045; VI-NEXT: v_add_f32_e32 v3, v4, v33046; VI-NEXT: v_cndmask_b32_e32 v3, v4, v3, vcc3047; VI-NEXT: v_ldexp_f32 v2, v3, v23048; VI-NEXT: v_and_b32_e32 v2, 0x7fffffff, v23049; VI-NEXT: s_and_b32 s2, s6, 0x800000003050; VI-NEXT: v_or_b32_e32 v2, s2, v23051; VI-NEXT: .LBB12_24: ; %Flow1203052; VI-NEXT: v_mov_b32_e32 v3, s113053; VI-NEXT: v_cmp_ngt_f32_e64 vcc, |s7|, |v3|3054; VI-NEXT: s_mov_b32 s2, 13055; VI-NEXT: ; implicit-def: $vgpr33056; VI-NEXT: s_cbranch_vccz .LBB12_263057; VI-NEXT: ; %bb.25: ; %frem.else3058; VI-NEXT: s_and_b32 s2, s7, 0x800000003059; VI-NEXT: v_mov_b32_e32 v4, s113060; VI-NEXT: v_mov_b32_e32 v3, s73061; VI-NEXT: v_cmp_eq_f32_e64 vcc, |s7|, |v4|3062; VI-NEXT: v_mov_b32_e32 v4, s23063; VI-NEXT: v_cndmask_b32_e32 v3, v3, v4, vcc3064; VI-NEXT: s_mov_b32 s2, 03065; VI-NEXT: .LBB12_26: ; %Flow1153066; VI-NEXT: s_xor_b32 s2, s2, 13067; VI-NEXT: s_cmp_lg_u32 s2, 03068; VI-NEXT: s_cbranch_scc1 .LBB12_323069; VI-NEXT: ; %bb.27: ; %frem.compute3070; VI-NEXT: v_frexp_mant_f32_e64 v4, |s11|3071; VI-NEXT: v_ldexp_f32 v4, v4, 13072; VI-NEXT: v_div_scale_f32 v6, s[2:3], v4, v4, 1.03073; VI-NEXT: v_frexp_mant_f32_e64 v3, |s7|3074; VI-NEXT: v_frexp_exp_i32_f32_e64 v8, |s7|3075; VI-NEXT: v_frexp_exp_i32_f32_e64 v9, |s11|3076; VI-NEXT: v_add_u32_e32 v5, vcc, -1, v83077; VI-NEXT: v_ldexp_f32 v7, v3, 123078; VI-NEXT: v_add_u32_e32 v3, vcc, -1, v93079; VI-NEXT: v_sub_u32_e32 v5, vcc, v5, v33080; VI-NEXT: v_div_scale_f32 v10, vcc, 1.0, v4, 1.03081; VI-NEXT: v_rcp_f32_e32 v11, v63082; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 33083; VI-NEXT: v_fma_f32 v12, -v6, v11, 1.03084; VI-NEXT: v_fma_f32 v11, v12, v11, v113085; VI-NEXT: v_mul_f32_e32 v12, v10, v113086; VI-NEXT: v_fma_f32 v13, -v6, v12, v103087; VI-NEXT: v_fma_f32 v12, v13, v11, v123088; VI-NEXT: v_fma_f32 v6, -v6, v12, v103089; VI-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_MODE, 4, 2), 03090; VI-NEXT: v_div_fmas_f32 v6, v6, v11, v123091; VI-NEXT: v_cmp_ge_i32_e32 vcc, 12, v53092; VI-NEXT: v_div_fixup_f32 v6, v6, v4, 1.03093; VI-NEXT: s_cbranch_vccnz .LBB12_303094; VI-NEXT: ; %bb.28: ; %frem.loop_body.preheader3095; VI-NEXT: v_add_u32_e32 v5, vcc, 12, v83096; VI-NEXT: v_sub_u32_e32 v5, vcc, v5, v93097; VI-NEXT: .LBB12_29: ; %frem.loop_body3098; VI-NEXT: ; =>This Inner Loop Header: Depth=13099; VI-NEXT: v_mov_b32_e32 v8, v73100; VI-NEXT: v_mul_f32_e32 v7, v8, v63101; VI-NEXT: v_rndne_f32_e32 v7, v73102; VI-NEXT: v_fma_f32 v7, -v7, v4, v83103; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v73104; VI-NEXT: v_add_f32_e32 v9, v7, v43105; VI-NEXT: v_cndmask_b32_e32 v7, v7, v9, vcc3106; VI-NEXT: v_add_u32_e32 v5, vcc, -12, v53107; VI-NEXT: v_ldexp_f32 v7, v7, 123108; VI-NEXT: v_cmp_lt_i32_e32 vcc, 12, v53109; VI-NEXT: s_cbranch_vccnz .LBB12_293110; VI-NEXT: s_branch .LBB12_313111; VI-NEXT: .LBB12_30:3112; VI-NEXT: v_mov_b32_e32 v8, v73113; VI-NEXT: .LBB12_31: ; %frem.loop_exit3114; VI-NEXT: v_add_u32_e32 v5, vcc, -11, v53115; VI-NEXT: v_ldexp_f32 v5, v8, v53116; VI-NEXT: v_mul_f32_e32 v6, v5, v63117; VI-NEXT: v_rndne_f32_e32 v6, v63118; VI-NEXT: v_fma_f32 v5, -v6, v4, v53119; VI-NEXT: v_cmp_gt_f32_e32 vcc, 0, v53120; VI-NEXT: v_add_f32_e32 v4, v5, v43121; VI-NEXT: v_cndmask_b32_e32 v4, v5, v4, vcc3122; VI-NEXT: v_ldexp_f32 v3, v4, v33123; VI-NEXT: v_and_b32_e32 v3, 0x7fffffff, v33124; VI-NEXT: s_and_b32 s2, s7, 0x800000003125; VI-NEXT: v_or_b32_e32 v3, s2, v33126; VI-NEXT: .LBB12_32: ; %Flow1163127; VI-NEXT: v_cmp_nlg_f32_e64 vcc, s8, 03128; VI-NEXT: v_mov_b32_e32 v4, 0x7fc000003129; VI-NEXT: v_mov_b32_e32 v5, 0x7f8000003130; VI-NEXT: v_cndmask_b32_e32 v0, v0, v4, vcc3131; VI-NEXT: v_cmp_nge_f32_e64 vcc, |s4|, v53132; VI-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc3133; VI-NEXT: v_cmp_nlg_f32_e64 vcc, s9, 03134; VI-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc3135; VI-NEXT: v_cmp_nge_f32_e64 vcc, |s5|, v53136; VI-NEXT: v_cndmask_b32_e32 v1, v4, v1, vcc3137; VI-NEXT: v_cmp_nlg_f32_e64 vcc, s10, 03138; VI-NEXT: v_cndmask_b32_e32 v2, v2, v4, vcc3139; VI-NEXT: v_cmp_nge_f32_e64 vcc, |s6|, v53140; VI-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc3141; VI-NEXT: v_cmp_nlg_f32_e64 vcc, s11, 03142; VI-NEXT: v_cndmask_b32_e32 v3, v3, v4, vcc3143; VI-NEXT: v_cmp_nge_f32_e64 vcc, |s7|, v53144; VI-NEXT: v_cndmask_b32_e32 v3, v4, v3, vcc3145; VI-NEXT: v_mov_b32_e32 v5, s13146; VI-NEXT: v_mov_b32_e32 v4, s03147; VI-NEXT: flat_store_dwordx4 v[4:5], v[0:3]3148; VI-NEXT: s_endpgm3149 %gep2 = getelementptr <4 x float>, ptr addrspace(1) %in2, i32 43150 %r0 = load <4 x float>, ptr addrspace(1) %in1, align 163151 %r1 = load <4 x float>, ptr addrspace(1) %gep2, align 163152 %r2 = frem <4 x float> %r0, %r13153 store <4 x float> %r2, ptr addrspace(1) %out, align 163154 ret void3155}3156 3157define amdgpu_kernel void @frem_v2f64(ptr addrspace(1) %out, ptr addrspace(1) %in1, ptr addrspace(1) %in2) #0 {3158; CI-LABEL: frem_v2f64:3159; CI: ; %bb.0:3160; CI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x93161; CI-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0xd3162; CI-NEXT: s_waitcnt lgkmcnt(0)3163; CI-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x03164; CI-NEXT: s_load_dwordx4 s[8:11], s[8:9], 0x103165; CI-NEXT: s_mov_b32 s2, 13166; CI-NEXT: s_waitcnt lgkmcnt(0)3167; CI-NEXT: v_mov_b32_e32 v0, s83168; CI-NEXT: v_mov_b32_e32 v1, s93169; CI-NEXT: v_cmp_ngt_f64_e64 vcc, |s[4:5]|, |v[0:1]|3170; CI-NEXT: ; implicit-def: $vgpr0_vgpr13171; CI-NEXT: s_cbranch_vccz .LBB13_23172; CI-NEXT: ; %bb.1: ; %frem.else163173; CI-NEXT: v_mov_b32_e32 v0, s83174; CI-NEXT: v_mov_b32_e32 v1, s93175; CI-NEXT: v_cmp_eq_f64_e64 vcc, |s[4:5]|, |v[0:1]|3176; CI-NEXT: s_mov_b32 s2, 03177; CI-NEXT: s_brev_b32 s3, 13178; CI-NEXT: s_and_b64 s[2:3], s[4:5], s[2:3]3179; CI-NEXT: v_mov_b32_e32 v0, s23180; CI-NEXT: v_mov_b32_e32 v1, s33181; CI-NEXT: v_mov_b32_e32 v2, s43182; CI-NEXT: v_mov_b32_e32 v3, s53183; CI-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc3184; CI-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc3185; CI-NEXT: s_mov_b32 s2, 03186; CI-NEXT: .LBB13_2: ; %Flow533187; CI-NEXT: s_xor_b32 s2, s2, 13188; CI-NEXT: s_cmp_lg_u32 s2, 03189; CI-NEXT: s_cbranch_scc1 .LBB13_83190; CI-NEXT: ; %bb.3: ; %frem.compute153191; CI-NEXT: v_frexp_mant_f64_e64 v[0:1], |s[4:5]|3192; CI-NEXT: v_frexp_exp_i32_f64_e64 v6, |s[4:5]|3193; CI-NEXT: v_frexp_exp_i32_f64_e64 v7, |s[8:9]|3194; CI-NEXT: v_ldexp_f64 v[4:5], v[0:1], 263195; CI-NEXT: v_frexp_mant_f64_e64 v[0:1], |s[8:9]|3196; CI-NEXT: v_add_i32_e32 v2, vcc, -1, v63197; CI-NEXT: v_add_i32_e32 v8, vcc, -1, v73198; CI-NEXT: v_sub_i32_e32 v9, vcc, v2, v83199; CI-NEXT: v_ldexp_f64 v[0:1], v[0:1], 13200; CI-NEXT: v_div_scale_f64 v[2:3], s[2:3], v[0:1], v[0:1], 1.03201; CI-NEXT: v_div_scale_f64 v[14:15], vcc, 1.0, v[0:1], 1.03202; CI-NEXT: v_rcp_f64_e32 v[10:11], v[2:3]3203; CI-NEXT: v_fma_f64 v[12:13], -v[2:3], v[10:11], 1.03204; CI-NEXT: v_fma_f64 v[10:11], v[10:11], v[12:13], v[10:11]3205; CI-NEXT: v_fma_f64 v[12:13], -v[2:3], v[10:11], 1.03206; CI-NEXT: v_fma_f64 v[10:11], v[10:11], v[12:13], v[10:11]3207; CI-NEXT: v_mul_f64 v[12:13], v[14:15], v[10:11]3208; CI-NEXT: v_fma_f64 v[2:3], -v[2:3], v[12:13], v[14:15]3209; CI-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[10:11], v[12:13]3210; CI-NEXT: v_cmp_ge_i32_e32 vcc, 26, v93211; CI-NEXT: v_div_fixup_f64 v[2:3], v[2:3], v[0:1], 1.03212; CI-NEXT: s_cbranch_vccnz .LBB13_63213; CI-NEXT: ; %bb.4: ; %frem.loop_body23.preheader3214; CI-NEXT: v_add_i32_e32 v6, vcc, 26, v63215; CI-NEXT: v_sub_i32_e32 v9, vcc, v6, v73216; CI-NEXT: .LBB13_5: ; %frem.loop_body233217; CI-NEXT: ; =>This Inner Loop Header: Depth=13218; CI-NEXT: v_mov_b32_e32 v7, v53219; CI-NEXT: v_mov_b32_e32 v6, v43220; CI-NEXT: v_mul_f64 v[4:5], v[6:7], v[2:3]3221; CI-NEXT: v_rndne_f64_e32 v[4:5], v[4:5]3222; CI-NEXT: v_fma_f64 v[4:5], -v[4:5], v[0:1], v[6:7]3223; CI-NEXT: v_cmp_gt_f64_e32 vcc, 0, v[4:5]3224; CI-NEXT: v_add_f64 v[10:11], v[4:5], v[0:1]3225; CI-NEXT: v_cndmask_b32_e32 v4, v4, v10, vcc3226; CI-NEXT: v_cndmask_b32_e32 v5, v5, v11, vcc3227; CI-NEXT: v_ldexp_f64 v[4:5], v[4:5], 263228; CI-NEXT: v_add_i32_e32 v9, vcc, 0xffffffe6, v93229; CI-NEXT: v_cmp_lt_i32_e32 vcc, 26, v93230; CI-NEXT: s_cbranch_vccnz .LBB13_53231; CI-NEXT: s_branch .LBB13_73232; CI-NEXT: .LBB13_6:3233; CI-NEXT: v_mov_b32_e32 v7, v53234; CI-NEXT: v_mov_b32_e32 v6, v43235; CI-NEXT: .LBB13_7: ; %frem.loop_exit243236; CI-NEXT: v_add_i32_e32 v4, vcc, 0xffffffe7, v93237; CI-NEXT: v_ldexp_f64 v[4:5], v[6:7], v43238; CI-NEXT: s_mov_b32 s2, 03239; CI-NEXT: s_brev_b32 s3, 13240; CI-NEXT: s_and_b64 s[2:3], s[4:5], s[2:3]3241; CI-NEXT: v_mul_f64 v[2:3], v[4:5], v[2:3]3242; CI-NEXT: v_rndne_f64_e32 v[2:3], v[2:3]3243; CI-NEXT: v_fma_f64 v[2:3], -v[2:3], v[0:1], v[4:5]3244; CI-NEXT: v_cmp_gt_f64_e32 vcc, 0, v[2:3]3245; CI-NEXT: v_add_f64 v[0:1], v[2:3], v[0:1]3246; CI-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc3247; CI-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc3248; CI-NEXT: v_ldexp_f64 v[0:1], v[0:1], v83249; CI-NEXT: v_and_b32_e32 v1, 0x7fffffff, v13250; CI-NEXT: v_or_b32_e32 v0, s2, v03251; CI-NEXT: v_or_b32_e32 v1, s3, v13252; CI-NEXT: .LBB13_8: ; %Flow543253; CI-NEXT: v_mov_b32_e32 v2, s103254; CI-NEXT: v_mov_b32_e32 v3, s113255; CI-NEXT: v_cmp_ngt_f64_e64 vcc, |s[6:7]|, |v[2:3]|3256; CI-NEXT: s_mov_b32 s2, 13257; CI-NEXT: ; implicit-def: $vgpr2_vgpr33258; CI-NEXT: s_cbranch_vccz .LBB13_103259; CI-NEXT: ; %bb.9: ; %frem.else3260; CI-NEXT: v_mov_b32_e32 v2, s103261; CI-NEXT: v_mov_b32_e32 v3, s113262; CI-NEXT: v_cmp_eq_f64_e64 vcc, |s[6:7]|, |v[2:3]|3263; CI-NEXT: s_mov_b32 s2, 03264; CI-NEXT: s_brev_b32 s3, 13265; CI-NEXT: s_and_b64 s[2:3], s[6:7], s[2:3]3266; CI-NEXT: v_mov_b32_e32 v2, s23267; CI-NEXT: v_mov_b32_e32 v3, s33268; CI-NEXT: v_mov_b32_e32 v4, s63269; CI-NEXT: v_mov_b32_e32 v5, s73270; CI-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc3271; CI-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc3272; CI-NEXT: s_mov_b32 s2, 03273; CI-NEXT: .LBB13_10: ; %Flow493274; CI-NEXT: s_xor_b32 s2, s2, 13275; CI-NEXT: s_cmp_lg_u32 s2, 03276; CI-NEXT: s_cbranch_scc1 .LBB13_163277; CI-NEXT: ; %bb.11: ; %frem.compute3278; CI-NEXT: v_frexp_mant_f64_e64 v[2:3], |s[6:7]|3279; CI-NEXT: v_frexp_exp_i32_f64_e64 v8, |s[6:7]|3280; CI-NEXT: v_frexp_exp_i32_f64_e64 v9, |s[10:11]|3281; CI-NEXT: v_ldexp_f64 v[6:7], v[2:3], 263282; CI-NEXT: v_frexp_mant_f64_e64 v[2:3], |s[10:11]|3283; CI-NEXT: v_add_i32_e32 v4, vcc, -1, v83284; CI-NEXT: v_add_i32_e32 v10, vcc, -1, v93285; CI-NEXT: v_sub_i32_e32 v11, vcc, v4, v103286; CI-NEXT: v_ldexp_f64 v[2:3], v[2:3], 13287; CI-NEXT: v_div_scale_f64 v[4:5], s[2:3], v[2:3], v[2:3], 1.03288; CI-NEXT: v_div_scale_f64 v[16:17], vcc, 1.0, v[2:3], 1.03289; CI-NEXT: v_rcp_f64_e32 v[12:13], v[4:5]3290; CI-NEXT: v_fma_f64 v[14:15], -v[4:5], v[12:13], 1.03291; CI-NEXT: v_fma_f64 v[12:13], v[12:13], v[14:15], v[12:13]3292; CI-NEXT: v_fma_f64 v[14:15], -v[4:5], v[12:13], 1.03293; CI-NEXT: v_fma_f64 v[12:13], v[12:13], v[14:15], v[12:13]3294; CI-NEXT: v_mul_f64 v[14:15], v[16:17], v[12:13]3295; CI-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[16:17]3296; CI-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[12:13], v[14:15]3297; CI-NEXT: v_cmp_ge_i32_e32 vcc, 26, v113298; CI-NEXT: v_div_fixup_f64 v[4:5], v[4:5], v[2:3], 1.03299; CI-NEXT: s_cbranch_vccnz .LBB13_143300; CI-NEXT: ; %bb.12: ; %frem.loop_body.preheader3301; CI-NEXT: v_add_i32_e32 v8, vcc, 26, v83302; CI-NEXT: v_sub_i32_e32 v11, vcc, v8, v93303; CI-NEXT: .LBB13_13: ; %frem.loop_body3304; CI-NEXT: ; =>This Inner Loop Header: Depth=13305; CI-NEXT: v_mov_b32_e32 v9, v73306; CI-NEXT: v_mov_b32_e32 v8, v63307; CI-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]3308; CI-NEXT: v_rndne_f64_e32 v[6:7], v[6:7]3309; CI-NEXT: v_fma_f64 v[6:7], -v[6:7], v[2:3], v[8:9]3310; CI-NEXT: v_cmp_gt_f64_e32 vcc, 0, v[6:7]3311; CI-NEXT: v_add_f64 v[12:13], v[6:7], v[2:3]3312; CI-NEXT: v_cndmask_b32_e32 v6, v6, v12, vcc3313; CI-NEXT: v_cndmask_b32_e32 v7, v7, v13, vcc3314; CI-NEXT: v_ldexp_f64 v[6:7], v[6:7], 263315; CI-NEXT: v_add_i32_e32 v11, vcc, 0xffffffe6, v113316; CI-NEXT: v_cmp_lt_i32_e32 vcc, 26, v113317; CI-NEXT: s_cbranch_vccnz .LBB13_133318; CI-NEXT: s_branch .LBB13_153319; CI-NEXT: .LBB13_14:3320; CI-NEXT: v_mov_b32_e32 v9, v73321; CI-NEXT: v_mov_b32_e32 v8, v63322; CI-NEXT: .LBB13_15: ; %frem.loop_exit3323; CI-NEXT: v_add_i32_e32 v6, vcc, 0xffffffe7, v113324; CI-NEXT: v_ldexp_f64 v[6:7], v[8:9], v63325; CI-NEXT: s_mov_b32 s2, 03326; CI-NEXT: s_brev_b32 s3, 13327; CI-NEXT: s_and_b64 s[2:3], s[6:7], s[2:3]3328; CI-NEXT: v_mul_f64 v[4:5], v[6:7], v[4:5]3329; CI-NEXT: v_rndne_f64_e32 v[4:5], v[4:5]3330; CI-NEXT: v_fma_f64 v[4:5], -v[4:5], v[2:3], v[6:7]3331; CI-NEXT: v_cmp_gt_f64_e32 vcc, 0, v[4:5]3332; CI-NEXT: v_add_f64 v[2:3], v[4:5], v[2:3]3333; CI-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc3334; CI-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc3335; CI-NEXT: v_ldexp_f64 v[2:3], v[2:3], v103336; CI-NEXT: v_and_b32_e32 v3, 0x7fffffff, v33337; CI-NEXT: v_or_b32_e32 v2, s2, v23338; CI-NEXT: v_or_b32_e32 v3, s3, v33339; CI-NEXT: .LBB13_16: ; %Flow503340; CI-NEXT: v_cmp_nlg_f64_e64 vcc, s[8:9], 03341; CI-NEXT: v_mov_b32_e32 v4, 03342; CI-NEXT: v_mov_b32_e32 v6, 0x7ff800003343; CI-NEXT: v_mov_b32_e32 v5, 0x7ff000003344; CI-NEXT: s_mov_b32 s2, -13345; CI-NEXT: s_mov_b32 s3, 0xf0003346; CI-NEXT: v_cndmask_b32_e64 v0, v0, 0, vcc3347; CI-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc3348; CI-NEXT: v_cmp_nge_f64_e64 vcc, |s[4:5]|, v[4:5]3349; CI-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc3350; CI-NEXT: v_cndmask_b32_e32 v1, v6, v1, vcc3351; CI-NEXT: v_cmp_nlg_f64_e64 vcc, s[10:11], 03352; CI-NEXT: v_cndmask_b32_e64 v2, v2, 0, vcc3353; CI-NEXT: v_cndmask_b32_e32 v3, v3, v6, vcc3354; CI-NEXT: v_cmp_nge_f64_e64 vcc, |s[6:7]|, v[4:5]3355; CI-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc3356; CI-NEXT: v_cndmask_b32_e32 v3, v6, v3, vcc3357; CI-NEXT: buffer_store_dwordx4 v[0:3], off, s[0:3], 03358; CI-NEXT: s_endpgm3359;3360; VI-LABEL: frem_v2f64:3361; VI: ; %bb.0:3362; VI-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x243363; VI-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x343364; VI-NEXT: s_waitcnt lgkmcnt(0)3365; VI-NEXT: s_load_dwordx4 s[4:7], s[2:3], 0x03366; VI-NEXT: s_load_dwordx4 s[8:11], s[8:9], 0x403367; VI-NEXT: s_mov_b32 s2, 13368; VI-NEXT: s_waitcnt lgkmcnt(0)3369; VI-NEXT: v_mov_b32_e32 v0, s83370; VI-NEXT: v_mov_b32_e32 v1, s93371; VI-NEXT: v_cmp_ngt_f64_e64 vcc, |s[4:5]|, |v[0:1]|3372; VI-NEXT: ; implicit-def: $vgpr0_vgpr13373; VI-NEXT: s_cbranch_vccz .LBB13_23374; VI-NEXT: ; %bb.1: ; %frem.else163375; VI-NEXT: v_mov_b32_e32 v0, s83376; VI-NEXT: v_mov_b32_e32 v1, s93377; VI-NEXT: v_cmp_eq_f64_e64 vcc, |s[4:5]|, |v[0:1]|3378; VI-NEXT: s_mov_b32 s2, 03379; VI-NEXT: s_brev_b32 s3, 13380; VI-NEXT: s_and_b64 s[2:3], s[4:5], s[2:3]3381; VI-NEXT: v_mov_b32_e32 v0, s23382; VI-NEXT: v_mov_b32_e32 v1, s33383; VI-NEXT: v_mov_b32_e32 v2, s43384; VI-NEXT: v_mov_b32_e32 v3, s53385; VI-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc3386; VI-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc3387; VI-NEXT: s_mov_b32 s2, 03388; VI-NEXT: .LBB13_2: ; %Flow533389; VI-NEXT: s_xor_b32 s2, s2, 13390; VI-NEXT: s_cmp_lg_u32 s2, 03391; VI-NEXT: s_cbranch_scc1 .LBB13_83392; VI-NEXT: ; %bb.3: ; %frem.compute153393; VI-NEXT: v_frexp_mant_f64_e64 v[0:1], |s[4:5]|3394; VI-NEXT: v_frexp_exp_i32_f64_e64 v6, |s[4:5]|3395; VI-NEXT: v_frexp_exp_i32_f64_e64 v7, |s[8:9]|3396; VI-NEXT: v_ldexp_f64 v[4:5], v[0:1], 263397; VI-NEXT: v_frexp_mant_f64_e64 v[0:1], |s[8:9]|3398; VI-NEXT: v_add_u32_e32 v2, vcc, -1, v63399; VI-NEXT: v_add_u32_e32 v8, vcc, -1, v73400; VI-NEXT: v_sub_u32_e32 v9, vcc, v2, v83401; VI-NEXT: v_ldexp_f64 v[0:1], v[0:1], 13402; VI-NEXT: v_div_scale_f64 v[2:3], s[2:3], v[0:1], v[0:1], 1.03403; VI-NEXT: v_div_scale_f64 v[14:15], vcc, 1.0, v[0:1], 1.03404; VI-NEXT: v_rcp_f64_e32 v[10:11], v[2:3]3405; VI-NEXT: v_fma_f64 v[12:13], -v[2:3], v[10:11], 1.03406; VI-NEXT: v_fma_f64 v[10:11], v[10:11], v[12:13], v[10:11]3407; VI-NEXT: v_fma_f64 v[12:13], -v[2:3], v[10:11], 1.03408; VI-NEXT: v_fma_f64 v[10:11], v[10:11], v[12:13], v[10:11]3409; VI-NEXT: v_mul_f64 v[12:13], v[14:15], v[10:11]3410; VI-NEXT: v_fma_f64 v[2:3], -v[2:3], v[12:13], v[14:15]3411; VI-NEXT: v_div_fmas_f64 v[2:3], v[2:3], v[10:11], v[12:13]3412; VI-NEXT: v_cmp_ge_i32_e32 vcc, 26, v93413; VI-NEXT: v_div_fixup_f64 v[2:3], v[2:3], v[0:1], 1.03414; VI-NEXT: s_cbranch_vccnz .LBB13_63415; VI-NEXT: ; %bb.4: ; %frem.loop_body23.preheader3416; VI-NEXT: v_add_u32_e32 v6, vcc, 26, v63417; VI-NEXT: v_sub_u32_e32 v9, vcc, v6, v73418; VI-NEXT: .LBB13_5: ; %frem.loop_body233419; VI-NEXT: ; =>This Inner Loop Header: Depth=13420; VI-NEXT: v_mov_b32_e32 v7, v53421; VI-NEXT: v_mov_b32_e32 v6, v43422; VI-NEXT: v_mul_f64 v[4:5], v[6:7], v[2:3]3423; VI-NEXT: v_rndne_f64_e32 v[4:5], v[4:5]3424; VI-NEXT: v_fma_f64 v[4:5], -v[4:5], v[0:1], v[6:7]3425; VI-NEXT: v_cmp_gt_f64_e32 vcc, 0, v[4:5]3426; VI-NEXT: v_add_f64 v[10:11], v[4:5], v[0:1]3427; VI-NEXT: v_cndmask_b32_e32 v4, v4, v10, vcc3428; VI-NEXT: v_cndmask_b32_e32 v5, v5, v11, vcc3429; VI-NEXT: v_ldexp_f64 v[4:5], v[4:5], 263430; VI-NEXT: v_add_u32_e32 v9, vcc, 0xffffffe6, v93431; VI-NEXT: v_cmp_lt_i32_e32 vcc, 26, v93432; VI-NEXT: s_cbranch_vccnz .LBB13_53433; VI-NEXT: s_branch .LBB13_73434; VI-NEXT: .LBB13_6:3435; VI-NEXT: v_mov_b32_e32 v7, v53436; VI-NEXT: v_mov_b32_e32 v6, v43437; VI-NEXT: .LBB13_7: ; %frem.loop_exit243438; VI-NEXT: v_add_u32_e32 v4, vcc, 0xffffffe7, v93439; VI-NEXT: v_ldexp_f64 v[4:5], v[6:7], v43440; VI-NEXT: s_mov_b32 s2, 03441; VI-NEXT: s_brev_b32 s3, 13442; VI-NEXT: s_and_b64 s[2:3], s[4:5], s[2:3]3443; VI-NEXT: v_mul_f64 v[2:3], v[4:5], v[2:3]3444; VI-NEXT: v_rndne_f64_e32 v[2:3], v[2:3]3445; VI-NEXT: v_fma_f64 v[2:3], -v[2:3], v[0:1], v[4:5]3446; VI-NEXT: v_cmp_gt_f64_e32 vcc, 0, v[2:3]3447; VI-NEXT: v_add_f64 v[0:1], v[2:3], v[0:1]3448; VI-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc3449; VI-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc3450; VI-NEXT: v_ldexp_f64 v[0:1], v[0:1], v83451; VI-NEXT: v_and_b32_e32 v1, 0x7fffffff, v13452; VI-NEXT: v_or_b32_e32 v0, s2, v03453; VI-NEXT: v_or_b32_e32 v1, s3, v13454; VI-NEXT: .LBB13_8: ; %Flow543455; VI-NEXT: v_mov_b32_e32 v2, s103456; VI-NEXT: v_mov_b32_e32 v3, s113457; VI-NEXT: v_cmp_ngt_f64_e64 vcc, |s[6:7]|, |v[2:3]|3458; VI-NEXT: s_mov_b32 s2, 13459; VI-NEXT: ; implicit-def: $vgpr2_vgpr33460; VI-NEXT: s_cbranch_vccz .LBB13_103461; VI-NEXT: ; %bb.9: ; %frem.else3462; VI-NEXT: v_mov_b32_e32 v2, s103463; VI-NEXT: v_mov_b32_e32 v3, s113464; VI-NEXT: v_cmp_eq_f64_e64 vcc, |s[6:7]|, |v[2:3]|3465; VI-NEXT: s_mov_b32 s2, 03466; VI-NEXT: s_brev_b32 s3, 13467; VI-NEXT: s_and_b64 s[2:3], s[6:7], s[2:3]3468; VI-NEXT: v_mov_b32_e32 v2, s23469; VI-NEXT: v_mov_b32_e32 v3, s33470; VI-NEXT: v_mov_b32_e32 v4, s63471; VI-NEXT: v_mov_b32_e32 v5, s73472; VI-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc3473; VI-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc3474; VI-NEXT: s_mov_b32 s2, 03475; VI-NEXT: .LBB13_10: ; %Flow493476; VI-NEXT: s_xor_b32 s2, s2, 13477; VI-NEXT: s_cmp_lg_u32 s2, 03478; VI-NEXT: s_cbranch_scc1 .LBB13_163479; VI-NEXT: ; %bb.11: ; %frem.compute3480; VI-NEXT: v_frexp_mant_f64_e64 v[2:3], |s[6:7]|3481; VI-NEXT: v_frexp_exp_i32_f64_e64 v8, |s[6:7]|3482; VI-NEXT: v_frexp_exp_i32_f64_e64 v9, |s[10:11]|3483; VI-NEXT: v_ldexp_f64 v[6:7], v[2:3], 263484; VI-NEXT: v_frexp_mant_f64_e64 v[2:3], |s[10:11]|3485; VI-NEXT: v_add_u32_e32 v4, vcc, -1, v83486; VI-NEXT: v_add_u32_e32 v10, vcc, -1, v93487; VI-NEXT: v_sub_u32_e32 v11, vcc, v4, v103488; VI-NEXT: v_ldexp_f64 v[2:3], v[2:3], 13489; VI-NEXT: v_div_scale_f64 v[4:5], s[2:3], v[2:3], v[2:3], 1.03490; VI-NEXT: v_div_scale_f64 v[16:17], vcc, 1.0, v[2:3], 1.03491; VI-NEXT: v_rcp_f64_e32 v[12:13], v[4:5]3492; VI-NEXT: v_fma_f64 v[14:15], -v[4:5], v[12:13], 1.03493; VI-NEXT: v_fma_f64 v[12:13], v[12:13], v[14:15], v[12:13]3494; VI-NEXT: v_fma_f64 v[14:15], -v[4:5], v[12:13], 1.03495; VI-NEXT: v_fma_f64 v[12:13], v[12:13], v[14:15], v[12:13]3496; VI-NEXT: v_mul_f64 v[14:15], v[16:17], v[12:13]3497; VI-NEXT: v_fma_f64 v[4:5], -v[4:5], v[14:15], v[16:17]3498; VI-NEXT: v_div_fmas_f64 v[4:5], v[4:5], v[12:13], v[14:15]3499; VI-NEXT: v_cmp_ge_i32_e32 vcc, 26, v113500; VI-NEXT: v_div_fixup_f64 v[4:5], v[4:5], v[2:3], 1.03501; VI-NEXT: s_cbranch_vccnz .LBB13_143502; VI-NEXT: ; %bb.12: ; %frem.loop_body.preheader3503; VI-NEXT: v_add_u32_e32 v8, vcc, 26, v83504; VI-NEXT: v_sub_u32_e32 v11, vcc, v8, v93505; VI-NEXT: .LBB13_13: ; %frem.loop_body3506; VI-NEXT: ; =>This Inner Loop Header: Depth=13507; VI-NEXT: v_mov_b32_e32 v9, v73508; VI-NEXT: v_mov_b32_e32 v8, v63509; VI-NEXT: v_mul_f64 v[6:7], v[8:9], v[4:5]3510; VI-NEXT: v_rndne_f64_e32 v[6:7], v[6:7]3511; VI-NEXT: v_fma_f64 v[6:7], -v[6:7], v[2:3], v[8:9]3512; VI-NEXT: v_cmp_gt_f64_e32 vcc, 0, v[6:7]3513; VI-NEXT: v_add_f64 v[12:13], v[6:7], v[2:3]3514; VI-NEXT: v_cndmask_b32_e32 v6, v6, v12, vcc3515; VI-NEXT: v_cndmask_b32_e32 v7, v7, v13, vcc3516; VI-NEXT: v_ldexp_f64 v[6:7], v[6:7], 263517; VI-NEXT: v_add_u32_e32 v11, vcc, 0xffffffe6, v113518; VI-NEXT: v_cmp_lt_i32_e32 vcc, 26, v113519; VI-NEXT: s_cbranch_vccnz .LBB13_133520; VI-NEXT: s_branch .LBB13_153521; VI-NEXT: .LBB13_14:3522; VI-NEXT: v_mov_b32_e32 v9, v73523; VI-NEXT: v_mov_b32_e32 v8, v63524; VI-NEXT: .LBB13_15: ; %frem.loop_exit3525; VI-NEXT: v_add_u32_e32 v6, vcc, 0xffffffe7, v113526; VI-NEXT: v_ldexp_f64 v[6:7], v[8:9], v63527; VI-NEXT: s_mov_b32 s2, 03528; VI-NEXT: s_brev_b32 s3, 13529; VI-NEXT: s_and_b64 s[2:3], s[6:7], s[2:3]3530; VI-NEXT: v_mul_f64 v[4:5], v[6:7], v[4:5]3531; VI-NEXT: v_rndne_f64_e32 v[4:5], v[4:5]3532; VI-NEXT: v_fma_f64 v[4:5], -v[4:5], v[2:3], v[6:7]3533; VI-NEXT: v_cmp_gt_f64_e32 vcc, 0, v[4:5]3534; VI-NEXT: v_add_f64 v[2:3], v[4:5], v[2:3]3535; VI-NEXT: v_cndmask_b32_e32 v2, v4, v2, vcc3536; VI-NEXT: v_cndmask_b32_e32 v3, v5, v3, vcc3537; VI-NEXT: v_ldexp_f64 v[2:3], v[2:3], v103538; VI-NEXT: v_and_b32_e32 v3, 0x7fffffff, v33539; VI-NEXT: v_or_b32_e32 v2, s2, v23540; VI-NEXT: v_or_b32_e32 v3, s3, v33541; VI-NEXT: .LBB13_16: ; %Flow503542; VI-NEXT: v_cmp_nlg_f64_e64 vcc, s[8:9], 03543; VI-NEXT: v_mov_b32_e32 v4, 03544; VI-NEXT: v_mov_b32_e32 v6, 0x7ff800003545; VI-NEXT: v_mov_b32_e32 v5, 0x7ff000003546; VI-NEXT: v_cndmask_b32_e64 v0, v0, 0, vcc3547; VI-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc3548; VI-NEXT: v_cmp_nge_f64_e64 vcc, |s[4:5]|, v[4:5]3549; VI-NEXT: v_cndmask_b32_e32 v0, 0, v0, vcc3550; VI-NEXT: v_cndmask_b32_e32 v1, v6, v1, vcc3551; VI-NEXT: v_cmp_nlg_f64_e64 vcc, s[10:11], 03552; VI-NEXT: v_cndmask_b32_e64 v2, v2, 0, vcc3553; VI-NEXT: v_cndmask_b32_e32 v3, v3, v6, vcc3554; VI-NEXT: v_cmp_nge_f64_e64 vcc, |s[6:7]|, v[4:5]3555; VI-NEXT: v_mov_b32_e32 v5, s13556; VI-NEXT: v_mov_b32_e32 v4, s03557; VI-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc3558; VI-NEXT: v_cndmask_b32_e32 v3, v6, v3, vcc3559; VI-NEXT: flat_store_dwordx4 v[4:5], v[0:3]3560; VI-NEXT: s_endpgm3561 %gep2 = getelementptr <2 x double>, ptr addrspace(1) %in2, i32 43562 %r0 = load <2 x double>, ptr addrspace(1) %in1, align 163563 %r1 = load <2 x double>, ptr addrspace(1) %gep2, align 163564 %r2 = frem <2 x double> %r0, %r13565 store <2 x double> %r2, ptr addrspace(1) %out, align 163566 ret void3567}3568 3569attributes #0 = { nounwind "denormal-fp-math-f32"="preserve-sign,preserve-sign" }3570attributes #1 = { nounwind "denormal-fp-math-f32"="preserve-sign,preserve-sign" }3571