5261 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GFX689,SI,GFX689-SDAG,SI-SDAG %s3; RUN: llc -global-isel=1 -global-isel-abort=2 -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GFX689,SI,GFX689-GISEL,SI-GISEL %s4; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GFX689,VI,GFX689-SDAG,VI-SDAG %s5; RUN: llc -global-isel=1 -global-isel-abort=2 -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GFX689,VI,GFX689-GISEL,VI-GISEL %s6; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX689,GFX900,GFX689-SDAG,GFX900-SDAG %s7; RUN: llc -global-isel=1 -global-isel-abort=2 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX689,GFX900,GFX689-GISEL,GFX900-GISEL %s8; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX1100,GFX1100-SDAG,GFX1100-SDAG-TRUE16 %s9; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX1100,GFX1100-SDAG,GFX1100-SDAG-FAKE16 %s10; RUN: llc -global-isel=1 -global-isel-abort=2 -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX1100,GFX1100-GISEL,GFX1100-GISEL-TRUE16 %s11; RUN: llc -global-isel=1 -global-isel-abort=2 -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX1100,GFX1100-GISEL,GFX1100-GISEL-FAKE16 %s12 13; RUN: llc -mtriple=r600 -mcpu=redwood < %s | FileCheck -check-prefix=R600 %s14; RUN: llc -mtriple=r600 -mcpu=cayman < %s | FileCheck -check-prefix=CM %s15 16define amdgpu_kernel void @s_log2_f32(ptr addrspace(1) %out, float %in) {17; SI-SDAG-LABEL: s_log2_f32:18; SI-SDAG: ; %bb.0:19; SI-SDAG-NEXT: s_load_dword s6, s[4:5], 0xb20; SI-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x921; SI-SDAG-NEXT: v_mov_b32_e32 v0, 0x80000022; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x4200000023; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0)24; SI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s6, v025; SI-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec26; SI-SDAG-NEXT: s_cselect_b32 s2, 32, 027; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc28; SI-SDAG-NEXT: v_mov_b32_e32 v1, s229; SI-SDAG-NEXT: v_ldexp_f32_e32 v1, s6, v130; SI-SDAG-NEXT: v_log_f32_e32 v1, v131; SI-SDAG-NEXT: s_mov_b32 s3, 0xf00032; SI-SDAG-NEXT: s_mov_b32 s2, -133; SI-SDAG-NEXT: v_sub_f32_e32 v0, v1, v034; SI-SDAG-NEXT: buffer_store_dword v0, off, s[0:3], 035; SI-SDAG-NEXT: s_endpgm36;37; SI-GISEL-LABEL: s_log2_f32:38; SI-GISEL: ; %bb.0:39; SI-GISEL-NEXT: s_load_dword s2, s[4:5], 0xb40; SI-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x941; SI-GISEL-NEXT: v_mov_b32_e32 v0, 0x80000042; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x4200000043; SI-GISEL-NEXT: s_mov_b32 s3, 0xf00044; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)45; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s2, v046; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc47; SI-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v048; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, s2, v049; SI-GISEL-NEXT: v_log_f32_e32 v0, v050; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc51; SI-GISEL-NEXT: s_mov_b32 s2, -152; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v153; SI-GISEL-NEXT: buffer_store_dword v0, off, s[0:3], 054; SI-GISEL-NEXT: s_endpgm55;56; VI-SDAG-LABEL: s_log2_f32:57; VI-SDAG: ; %bb.0:58; VI-SDAG-NEXT: s_load_dword s6, s[4:5], 0x2c59; VI-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2460; VI-SDAG-NEXT: v_mov_b32_e32 v0, 0x80000061; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x4200000062; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0)63; VI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s6, v064; VI-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec65; VI-SDAG-NEXT: s_cselect_b32 s2, 32, 066; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc67; VI-SDAG-NEXT: v_mov_b32_e32 v1, s268; VI-SDAG-NEXT: v_ldexp_f32 v1, s6, v169; VI-SDAG-NEXT: v_log_f32_e32 v1, v170; VI-SDAG-NEXT: v_sub_f32_e32 v2, v1, v071; VI-SDAG-NEXT: v_mov_b32_e32 v0, s072; VI-SDAG-NEXT: v_mov_b32_e32 v1, s173; VI-SDAG-NEXT: flat_store_dword v[0:1], v274; VI-SDAG-NEXT: s_endpgm75;76; VI-GISEL-LABEL: s_log2_f32:77; VI-GISEL: ; %bb.0:78; VI-GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c79; VI-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2480; VI-GISEL-NEXT: v_mov_b32_e32 v0, 0x80000081; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x4200000082; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)83; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s2, v084; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc85; VI-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v086; VI-GISEL-NEXT: v_ldexp_f32 v0, s2, v087; VI-GISEL-NEXT: v_log_f32_e32 v0, v088; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc89; VI-GISEL-NEXT: v_sub_f32_e32 v2, v0, v190; VI-GISEL-NEXT: v_mov_b32_e32 v0, s091; VI-GISEL-NEXT: v_mov_b32_e32 v1, s192; VI-GISEL-NEXT: flat_store_dword v[0:1], v293; VI-GISEL-NEXT: s_endpgm94;95; GFX900-SDAG-LABEL: s_log2_f32:96; GFX900-SDAG: ; %bb.0:97; GFX900-SDAG-NEXT: s_load_dword s6, s[4:5], 0x2c98; GFX900-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2499; GFX900-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000100; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x42000000101; GFX900-SDAG-NEXT: v_mov_b32_e32 v2, 0102; GFX900-SDAG-NEXT: s_waitcnt lgkmcnt(0)103; GFX900-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s6, v0104; GFX900-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec105; GFX900-SDAG-NEXT: s_cselect_b32 s2, 32, 0106; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc107; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, s2108; GFX900-SDAG-NEXT: v_ldexp_f32 v1, s6, v1109; GFX900-SDAG-NEXT: v_log_f32_e32 v1, v1110; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v1, v0111; GFX900-SDAG-NEXT: global_store_dword v2, v0, s[0:1]112; GFX900-SDAG-NEXT: s_endpgm113;114; GFX900-GISEL-LABEL: s_log2_f32:115; GFX900-GISEL: ; %bb.0:116; GFX900-GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c117; GFX900-GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24118; GFX900-GISEL-NEXT: v_mov_b32_e32 v0, 0x800000119; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x42000000120; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0121; GFX900-GISEL-NEXT: s_waitcnt lgkmcnt(0)122; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s2, v0123; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc124; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0125; GFX900-GISEL-NEXT: v_ldexp_f32 v0, s2, v0126; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0127; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc128; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v2129; GFX900-GISEL-NEXT: global_store_dword v1, v0, s[0:1]130; GFX900-GISEL-NEXT: s_endpgm131;132; GFX1100-SDAG-LABEL: s_log2_f32:133; GFX1100-SDAG: ; %bb.0:134; GFX1100-SDAG-NEXT: s_load_b32 s2, s[4:5], 0x2c135; GFX1100-SDAG-NEXT: v_mov_b32_e32 v2, 0136; GFX1100-SDAG-NEXT: s_waitcnt lgkmcnt(0)137; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s0, 0x800000, s2138; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)139; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 0x42000000, s0140; GFX1100-SDAG-NEXT: s_and_b32 s0, s0, exec_lo141; GFX1100-SDAG-NEXT: s_cselect_b32 s3, 32, 0142; GFX1100-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24143; GFX1100-SDAG-NEXT: v_ldexp_f32 v1, s2, s3144; GFX1100-SDAG-NEXT: v_log_f32_e32 v1, v1145; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)146; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v1, v0147; GFX1100-SDAG-NEXT: s_waitcnt lgkmcnt(0)148; GFX1100-SDAG-NEXT: global_store_b32 v2, v0, s[0:1]149; GFX1100-SDAG-NEXT: s_endpgm150;151; GFX1100-GISEL-LABEL: s_log2_f32:152; GFX1100-GISEL: ; %bb.0:153; GFX1100-GISEL-NEXT: s_clause 0x1154; GFX1100-GISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c155; GFX1100-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24156; GFX1100-GISEL-NEXT: v_mov_b32_e32 v2, 0157; GFX1100-GISEL-NEXT: s_waitcnt lgkmcnt(0)158; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s3, 0x800000, s2159; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)160; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s3161; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, s3162; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0163; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)164; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, s2, v0165; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0166; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)167; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1168; GFX1100-GISEL-NEXT: global_store_b32 v2, v0, s[0:1]169; GFX1100-GISEL-NEXT: s_endpgm170;171; R600-LABEL: s_log2_f32:172; R600: ; %bb.0:173; R600-NEXT: ALU 10, @4, KC0[CB0:0-32], KC1[]174; R600-NEXT: MEM_RAT_CACHELESS STORE_RAW T0.X, T1.X, 1175; R600-NEXT: CF_END176; R600-NEXT: PAD177; R600-NEXT: ALU clause starting at 4:178; R600-NEXT: SETGT * T0.W, literal.x, KC0[2].Z,179; R600-NEXT: 8388608(1.175494e-38), 0(0.000000e+00)180; R600-NEXT: CNDE * T1.W, PV.W, 1.0, literal.x,181; R600-NEXT: 1333788672(4.294967e+09), 0(0.000000e+00)182; R600-NEXT: MUL_IEEE T1.W, KC0[2].Z, PV.W,183; R600-NEXT: CNDE * T0.W, T0.W, 0.0, literal.x,184; R600-NEXT: 1107296256(3.200000e+01), 0(0.000000e+00)185; R600-NEXT: LOG_IEEE * T0.X, PV.W,186; R600-NEXT: ADD T0.X, PS, -T0.W,187; R600-NEXT: LSHR * T1.X, KC0[2].Y, literal.x,188; R600-NEXT: 2(2.802597e-45), 0(0.000000e+00)189;190; CM-LABEL: s_log2_f32:191; CM: ; %bb.0:192; CM-NEXT: ALU 13, @4, KC0[CB0:0-32], KC1[]193; CM-NEXT: MEM_RAT_CACHELESS STORE_DWORD T0.X, T1.X194; CM-NEXT: CF_END195; CM-NEXT: PAD196; CM-NEXT: ALU clause starting at 4:197; CM-NEXT: SETGT * T0.W, literal.x, KC0[2].Z,198; CM-NEXT: 8388608(1.175494e-38), 0(0.000000e+00)199; CM-NEXT: CNDE * T1.W, PV.W, 1.0, literal.x,200; CM-NEXT: 1333788672(4.294967e+09), 0(0.000000e+00)201; CM-NEXT: CNDE T0.Z, T0.W, 0.0, literal.x,202; CM-NEXT: MUL_IEEE * T0.W, KC0[2].Z, PV.W,203; CM-NEXT: 1107296256(3.200000e+01), 0(0.000000e+00)204; CM-NEXT: LOG_IEEE T0.X, T0.W,205; CM-NEXT: LOG_IEEE T0.Y (MASKED), T0.W,206; CM-NEXT: LOG_IEEE T0.Z (MASKED), T0.W,207; CM-NEXT: LOG_IEEE * T0.W (MASKED), T0.W,208; CM-NEXT: ADD * T0.X, PV.X, -T0.Z,209; CM-NEXT: LSHR * T1.X, KC0[2].Y, literal.x,210; CM-NEXT: 2(2.802597e-45), 0(0.000000e+00)211 %result = call float @llvm.log2.f32(float %in)212 store float %result, ptr addrspace(1) %out213 ret void214}215 216; FIXME: We should be able to merge these packets together on Cayman so we217; have a maximum of 4 instructions.218define amdgpu_kernel void @s_log2_v2f32(ptr addrspace(1) %out, <2 x float> %in) {219; SI-SDAG-LABEL: s_log2_v2f32:220; SI-SDAG: ; %bb.0:221; SI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9222; SI-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000223; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x42000000224; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0)225; SI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s3, v0226; SI-SDAG-NEXT: s_and_b64 s[4:5], vcc, exec227; SI-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v1, vcc228; SI-SDAG-NEXT: s_cselect_b32 s4, 32, 0229; SI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s2, v0230; SI-SDAG-NEXT: v_mov_b32_e32 v3, s4231; SI-SDAG-NEXT: s_and_b64 s[4:5], vcc, exec232; SI-SDAG-NEXT: v_ldexp_f32_e32 v3, s3, v3233; SI-SDAG-NEXT: s_cselect_b32 s3, 32, 0234; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc235; SI-SDAG-NEXT: v_mov_b32_e32 v1, s3236; SI-SDAG-NEXT: v_ldexp_f32_e32 v1, s2, v1237; SI-SDAG-NEXT: v_log_f32_e32 v3, v3238; SI-SDAG-NEXT: v_log_f32_e32 v4, v1239; SI-SDAG-NEXT: s_mov_b32 s3, 0xf000240; SI-SDAG-NEXT: s_mov_b32 s2, -1241; SI-SDAG-NEXT: v_sub_f32_e32 v1, v3, v2242; SI-SDAG-NEXT: v_sub_f32_e32 v0, v4, v0243; SI-SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[0:3], 0244; SI-SDAG-NEXT: s_endpgm245;246; SI-GISEL-LABEL: s_log2_v2f32:247; SI-GISEL: ; %bb.0:248; SI-GISEL-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x9249; SI-GISEL-NEXT: v_mov_b32_e32 v0, 0x800000250; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x42000000251; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)252; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s6, v0253; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s7, v0254; SI-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc255; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[0:1]256; SI-GISEL-NEXT: v_lshlrev_b32_e32 v2, 5, v2257; SI-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0258; SI-GISEL-NEXT: v_ldexp_f32_e32 v2, s6, v2259; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, s7, v0260; SI-GISEL-NEXT: v_log_f32_e32 v2, v2261; SI-GISEL-NEXT: v_log_f32_e32 v3, v0262; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc263; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, v1, s[0:1]264; SI-GISEL-NEXT: v_sub_f32_e32 v0, v2, v0265; SI-GISEL-NEXT: v_sub_f32_e32 v1, v3, v1266; SI-GISEL-NEXT: s_mov_b32 s6, -1267; SI-GISEL-NEXT: s_mov_b32 s7, 0xf000268; SI-GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 0269; SI-GISEL-NEXT: s_endpgm270;271; VI-SDAG-LABEL: s_log2_v2f32:272; VI-SDAG: ; %bb.0:273; VI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24274; VI-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000275; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x42000000276; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0)277; VI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s3, v0278; VI-SDAG-NEXT: s_and_b64 s[4:5], vcc, exec279; VI-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v1, vcc280; VI-SDAG-NEXT: s_cselect_b32 s4, 32, 0281; VI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s2, v0282; VI-SDAG-NEXT: v_mov_b32_e32 v3, s4283; VI-SDAG-NEXT: s_and_b64 s[4:5], vcc, exec284; VI-SDAG-NEXT: v_ldexp_f32 v3, s3, v3285; VI-SDAG-NEXT: s_cselect_b32 s3, 32, 0286; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc287; VI-SDAG-NEXT: v_mov_b32_e32 v1, s3288; VI-SDAG-NEXT: v_log_f32_e32 v3, v3289; VI-SDAG-NEXT: v_ldexp_f32 v1, s2, v1290; VI-SDAG-NEXT: v_log_f32_e32 v4, v1291; VI-SDAG-NEXT: v_sub_f32_e32 v1, v3, v2292; VI-SDAG-NEXT: v_mov_b32_e32 v3, s1293; VI-SDAG-NEXT: v_sub_f32_e32 v0, v4, v0294; VI-SDAG-NEXT: v_mov_b32_e32 v2, s0295; VI-SDAG-NEXT: flat_store_dwordx2 v[2:3], v[0:1]296; VI-SDAG-NEXT: s_endpgm297;298; VI-GISEL-LABEL: s_log2_v2f32:299; VI-GISEL: ; %bb.0:300; VI-GISEL-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x24301; VI-GISEL-NEXT: v_mov_b32_e32 v0, 0x800000302; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x42000000303; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)304; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s6, v0305; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s7, v0306; VI-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc307; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[0:1]308; VI-GISEL-NEXT: v_lshlrev_b32_e32 v2, 5, v2309; VI-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0310; VI-GISEL-NEXT: v_ldexp_f32 v2, s6, v2311; VI-GISEL-NEXT: v_ldexp_f32 v0, s7, v0312; VI-GISEL-NEXT: v_log_f32_e32 v2, v2313; VI-GISEL-NEXT: v_log_f32_e32 v3, v0314; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc315; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, v1, s[0:1]316; VI-GISEL-NEXT: v_sub_f32_e32 v0, v2, v0317; VI-GISEL-NEXT: v_sub_f32_e32 v1, v3, v1318; VI-GISEL-NEXT: v_mov_b32_e32 v2, s4319; VI-GISEL-NEXT: v_mov_b32_e32 v3, s5320; VI-GISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1]321; VI-GISEL-NEXT: s_endpgm322;323; GFX900-SDAG-LABEL: s_log2_v2f32:324; GFX900-SDAG: ; %bb.0:325; GFX900-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24326; GFX900-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000327; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x42000000328; GFX900-SDAG-NEXT: v_mov_b32_e32 v5, 0329; GFX900-SDAG-NEXT: s_waitcnt lgkmcnt(0)330; GFX900-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s3, v0331; GFX900-SDAG-NEXT: s_and_b64 s[4:5], vcc, exec332; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v1, vcc333; GFX900-SDAG-NEXT: s_cselect_b32 s4, 32, 0334; GFX900-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s2, v0335; GFX900-SDAG-NEXT: v_mov_b32_e32 v3, s4336; GFX900-SDAG-NEXT: s_and_b64 s[4:5], vcc, exec337; GFX900-SDAG-NEXT: v_ldexp_f32 v3, s3, v3338; GFX900-SDAG-NEXT: s_cselect_b32 s3, 32, 0339; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc340; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, s3341; GFX900-SDAG-NEXT: v_ldexp_f32 v1, s2, v1342; GFX900-SDAG-NEXT: v_log_f32_e32 v3, v3343; GFX900-SDAG-NEXT: v_log_f32_e32 v4, v1344; GFX900-SDAG-NEXT: v_sub_f32_e32 v1, v3, v2345; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v4, v0346; GFX900-SDAG-NEXT: global_store_dwordx2 v5, v[0:1], s[0:1]347; GFX900-SDAG-NEXT: s_endpgm348;349; GFX900-GISEL-LABEL: s_log2_v2f32:350; GFX900-GISEL: ; %bb.0:351; GFX900-GISEL-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x24352; GFX900-GISEL-NEXT: v_mov_b32_e32 v0, 0x800000353; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x42000000354; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0355; GFX900-GISEL-NEXT: s_waitcnt lgkmcnt(0)356; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s10, v0357; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s11, v0358; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v3, 0, 1, vcc359; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[0:1]360; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v3, 5, v3361; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0362; GFX900-GISEL-NEXT: v_ldexp_f32 v3, s10, v3363; GFX900-GISEL-NEXT: v_ldexp_f32 v0, s11, v0364; GFX900-GISEL-NEXT: v_log_f32_e32 v3, v3365; GFX900-GISEL-NEXT: v_log_f32_e32 v4, v0366; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc367; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, v1, s[0:1]368; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v3, v0369; GFX900-GISEL-NEXT: v_sub_f32_e32 v1, v4, v1370; GFX900-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[8:9]371; GFX900-GISEL-NEXT: s_endpgm372;373; GFX1100-SDAG-LABEL: s_log2_v2f32:374; GFX1100-SDAG: ; %bb.0:375; GFX1100-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24376; GFX1100-SDAG-NEXT: s_waitcnt lgkmcnt(0)377; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s4, 0x800000, s3378; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s5, 0x800000, s2379; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2)380; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 0x42000000, s4381; GFX1100-SDAG-NEXT: s_and_b32 s4, s4, exec_lo382; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 0x42000000, s5383; GFX1100-SDAG-NEXT: s_cselect_b32 s4, 32, 0384; GFX1100-SDAG-NEXT: s_and_b32 s5, s5, exec_lo385; GFX1100-SDAG-NEXT: s_cselect_b32 s5, 32, 0386; GFX1100-SDAG-NEXT: v_ldexp_f32 v1, s3, s4387; GFX1100-SDAG-NEXT: v_ldexp_f32 v3, s2, s5388; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)389; GFX1100-SDAG-NEXT: v_log_f32_e32 v1, v1390; GFX1100-SDAG-NEXT: v_log_f32_e32 v3, v3391; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)392; GFX1100-SDAG-NEXT: v_dual_mov_b32 v4, 0 :: v_dual_sub_f32 v1, v1, v0393; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v3, v2394; GFX1100-SDAG-NEXT: global_store_b64 v4, v[0:1], s[0:1]395; GFX1100-SDAG-NEXT: s_endpgm396;397; GFX1100-GISEL-LABEL: s_log2_v2f32:398; GFX1100-GISEL: ; %bb.0:399; GFX1100-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24400; GFX1100-GISEL-NEXT: v_mov_b32_e32 v4, 0401; GFX1100-GISEL-NEXT: s_waitcnt lgkmcnt(0)402; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s5, 0x800000, s3403; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s4, 0x800000, s2404; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)405; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s5406; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s4407; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v3, 0, 0x42000000, s5408; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 0x42000000, s4409; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_1)410; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1411; GFX1100-GISEL-NEXT: v_ldexp_f32 v1, s3, v1412; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)413; GFX1100-GISEL-NEXT: v_log_f32_e32 v1, v1414; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)415; GFX1100-GISEL-NEXT: v_dual_sub_f32 v1, v1, v3 :: v_dual_lshlrev_b32 v0, 5, v0416; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, s2, v0417; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)418; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0419; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)420; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v2421; GFX1100-GISEL-NEXT: global_store_b64 v4, v[0:1], s[0:1]422; GFX1100-GISEL-NEXT: s_endpgm423;424; R600-LABEL: s_log2_v2f32:425; R600: ; %bb.0:426; R600-NEXT: ALU 18, @4, KC0[CB0:0-32], KC1[]427; R600-NEXT: MEM_RAT_CACHELESS STORE_RAW T0.XY, T1.X, 1428; R600-NEXT: CF_END429; R600-NEXT: PAD430; R600-NEXT: ALU clause starting at 4:431; R600-NEXT: SETGT T0.W, literal.x, KC0[3].X,432; R600-NEXT: SETGT * T1.W, literal.x, KC0[2].W,433; R600-NEXT: 8388608(1.175494e-38), 0(0.000000e+00)434; R600-NEXT: CNDE * T2.W, PV.W, 1.0, literal.x,435; R600-NEXT: 1333788672(4.294967e+09), 0(0.000000e+00)436; R600-NEXT: MUL_IEEE T2.W, KC0[3].X, PV.W,437; R600-NEXT: CNDE * T3.W, T1.W, 1.0, literal.x,438; R600-NEXT: 1333788672(4.294967e+09), 0(0.000000e+00)439; R600-NEXT: MUL_IEEE T0.Z, KC0[2].W, PS,440; R600-NEXT: CNDE T0.W, T0.W, 0.0, literal.x,441; R600-NEXT: LOG_IEEE * T0.X, PV.W,442; R600-NEXT: 1107296256(3.200000e+01), 0(0.000000e+00)443; R600-NEXT: ADD T0.Y, PS, -PV.W,444; R600-NEXT: CNDE T0.W, T1.W, 0.0, literal.x,445; R600-NEXT: LOG_IEEE * T0.X, PV.Z,446; R600-NEXT: 1107296256(3.200000e+01), 0(0.000000e+00)447; R600-NEXT: ADD T0.X, PS, -PV.W,448; R600-NEXT: LSHR * T1.X, KC0[2].Y, literal.x,449; R600-NEXT: 2(2.802597e-45), 0(0.000000e+00)450;451; CM-LABEL: s_log2_v2f32:452; CM: ; %bb.0:453; CM-NEXT: ALU 23, @4, KC0[CB0:0-32], KC1[]454; CM-NEXT: MEM_RAT_CACHELESS STORE_DWORD T1, T0.X455; CM-NEXT: CF_END456; CM-NEXT: PAD457; CM-NEXT: ALU clause starting at 4:458; CM-NEXT: SETGT * T0.W, literal.x, KC0[3].X,459; CM-NEXT: 8388608(1.175494e-38), 0(0.000000e+00)460; CM-NEXT: CNDE T0.Z, PV.W, 1.0, literal.x,461; CM-NEXT: SETGT * T1.W, literal.y, KC0[2].W,462; CM-NEXT: 1333788672(4.294967e+09), 8388608(1.175494e-38)463; CM-NEXT: CNDE T0.Y, PV.W, 1.0, literal.x,464; CM-NEXT: CNDE T1.Z, T0.W, 0.0, literal.y,465; CM-NEXT: MUL_IEEE * T0.W, KC0[3].X, PV.Z,466; CM-NEXT: 1333788672(4.294967e+09), 1107296256(3.200000e+01)467; CM-NEXT: LOG_IEEE T0.X, T0.W,468; CM-NEXT: LOG_IEEE T0.Y (MASKED), T0.W,469; CM-NEXT: LOG_IEEE T0.Z (MASKED), T0.W,470; CM-NEXT: LOG_IEEE * T0.W (MASKED), T0.W,471; CM-NEXT: ADD T1.Y, PV.X, -T1.Z,472; CM-NEXT: CNDE T0.Z, T1.W, 0.0, literal.x,473; CM-NEXT: MUL_IEEE * T0.W, KC0[2].W, T0.Y,474; CM-NEXT: 1107296256(3.200000e+01), 0(0.000000e+00)475; CM-NEXT: LOG_IEEE T0.X, T0.W,476; CM-NEXT: LOG_IEEE T0.Y (MASKED), T0.W,477; CM-NEXT: LOG_IEEE T0.Z (MASKED), T0.W,478; CM-NEXT: LOG_IEEE * T0.W (MASKED), T0.W,479; CM-NEXT: ADD * T1.X, PV.X, -T0.Z,480; CM-NEXT: LSHR * T0.X, KC0[2].Y, literal.x,481; CM-NEXT: 2(2.802597e-45), 0(0.000000e+00)482 %result = call <2 x float> @llvm.log2.v2f32(<2 x float> %in)483 store <2 x float> %result, ptr addrspace(1) %out484 ret void485}486 487define amdgpu_kernel void @s_log2_v3f32(ptr addrspace(1) %out, <3 x float> %in) {488; SI-SDAG-LABEL: s_log2_v3f32:489; SI-SDAG: ; %bb.0:490; SI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0xd491; SI-SDAG-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x9492; SI-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000493; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x42000000494; SI-SDAG-NEXT: s_mov_b32 s7, 0xf000495; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0)496; SI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s1, v0497; SI-SDAG-NEXT: s_and_b64 s[8:9], vcc, exec498; SI-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v1, vcc499; SI-SDAG-NEXT: s_cselect_b32 s3, 32, 0500; SI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s0, v0501; SI-SDAG-NEXT: v_mov_b32_e32 v3, s3502; SI-SDAG-NEXT: s_and_b64 s[8:9], vcc, exec503; SI-SDAG-NEXT: v_ldexp_f32_e32 v3, s1, v3504; SI-SDAG-NEXT: s_cselect_b32 s1, 32, 0505; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v1, vcc506; SI-SDAG-NEXT: v_mov_b32_e32 v5, s1507; SI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s2, v0508; SI-SDAG-NEXT: v_ldexp_f32_e32 v5, s0, v5509; SI-SDAG-NEXT: s_and_b64 s[0:1], vcc, exec510; SI-SDAG-NEXT: s_cselect_b32 s0, 32, 0511; SI-SDAG-NEXT: v_mov_b32_e32 v0, s0512; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, s2, v0513; SI-SDAG-NEXT: v_log_f32_e32 v3, v3514; SI-SDAG-NEXT: v_log_f32_e32 v7, v0515; SI-SDAG-NEXT: v_log_f32_e32 v5, v5516; SI-SDAG-NEXT: v_cndmask_b32_e32 v6, 0, v1, vcc517; SI-SDAG-NEXT: s_mov_b32 s6, -1518; SI-SDAG-NEXT: v_sub_f32_e32 v1, v3, v2519; SI-SDAG-NEXT: v_sub_f32_e32 v2, v7, v6520; SI-SDAG-NEXT: v_sub_f32_e32 v0, v5, v4521; SI-SDAG-NEXT: buffer_store_dword v2, off, s[4:7], 0 offset:8522; SI-SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 0523; SI-SDAG-NEXT: s_endpgm524;525; SI-GISEL-LABEL: s_log2_v3f32:526; SI-GISEL: ; %bb.0:527; SI-GISEL-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0xd528; SI-GISEL-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x9529; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000530; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x42000000531; SI-GISEL-NEXT: s_mov_b32 s6, -1532; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)533; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s8, v1534; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc535; SI-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0536; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, s8, v0537; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s9, v1538; SI-GISEL-NEXT: v_log_f32_e32 v0, v0539; SI-GISEL-NEXT: v_cndmask_b32_e64 v3, 0, 1, s[0:1]540; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v2, vcc541; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s10, v1542; SI-GISEL-NEXT: v_lshlrev_b32_e32 v3, 5, v3543; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc544; SI-GISEL-NEXT: v_ldexp_f32_e32 v3, s9, v3545; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1546; SI-GISEL-NEXT: v_log_f32_e32 v3, v3547; SI-GISEL-NEXT: v_ldexp_f32_e32 v1, s10, v1548; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v4549; SI-GISEL-NEXT: v_log_f32_e32 v4, v1550; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, v2, s[0:1]551; SI-GISEL-NEXT: v_sub_f32_e32 v1, v3, v1552; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc553; SI-GISEL-NEXT: s_mov_b32 s7, 0xf000554; SI-GISEL-NEXT: v_sub_f32_e32 v2, v4, v2555; SI-GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 0556; SI-GISEL-NEXT: buffer_store_dword v2, off, s[4:7], 0 offset:8557; SI-GISEL-NEXT: s_endpgm558;559; VI-SDAG-LABEL: s_log2_v3f32:560; VI-SDAG: ; %bb.0:561; VI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x34562; VI-SDAG-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x24563; VI-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000564; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x42000000565; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0)566; VI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s2, v0567; VI-SDAG-NEXT: s_and_b64 s[6:7], vcc, exec568; VI-SDAG-NEXT: s_cselect_b32 s3, 32, 0569; VI-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v1, vcc570; VI-SDAG-NEXT: v_mov_b32_e32 v3, s3571; VI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s1, v0572; VI-SDAG-NEXT: v_ldexp_f32 v3, s2, v3573; VI-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec574; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v1, vcc575; VI-SDAG-NEXT: s_cselect_b32 s2, 32, 0576; VI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s0, v0577; VI-SDAG-NEXT: v_mov_b32_e32 v5, s2578; VI-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec579; VI-SDAG-NEXT: v_ldexp_f32 v5, s1, v5580; VI-SDAG-NEXT: s_cselect_b32 s1, 32, 0581; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc582; VI-SDAG-NEXT: v_mov_b32_e32 v1, s1583; VI-SDAG-NEXT: v_log_f32_e32 v3, v3584; VI-SDAG-NEXT: v_log_f32_e32 v5, v5585; VI-SDAG-NEXT: v_ldexp_f32 v1, s0, v1586; VI-SDAG-NEXT: v_log_f32_e32 v6, v1587; VI-SDAG-NEXT: v_sub_f32_e32 v2, v3, v2588; VI-SDAG-NEXT: v_sub_f32_e32 v1, v5, v4589; VI-SDAG-NEXT: v_mov_b32_e32 v3, s4590; VI-SDAG-NEXT: v_sub_f32_e32 v0, v6, v0591; VI-SDAG-NEXT: v_mov_b32_e32 v4, s5592; VI-SDAG-NEXT: flat_store_dwordx3 v[3:4], v[0:2]593; VI-SDAG-NEXT: s_endpgm594;595; VI-GISEL-LABEL: s_log2_v3f32:596; VI-GISEL: ; %bb.0:597; VI-GISEL-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x34598; VI-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x24599; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000600; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x42000000601; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)602; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s8, v1603; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc604; VI-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0605; VI-GISEL-NEXT: v_ldexp_f32 v0, s8, v0606; VI-GISEL-NEXT: v_log_f32_e32 v0, v0607; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s9, v1608; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v2, vcc609; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s10, v1610; VI-GISEL-NEXT: v_cndmask_b32_e64 v3, 0, 1, s[0:1]611; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc612; VI-GISEL-NEXT: v_lshlrev_b32_e32 v3, 5, v3613; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1614; VI-GISEL-NEXT: v_ldexp_f32 v3, s9, v3615; VI-GISEL-NEXT: v_ldexp_f32 v1, s10, v1616; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v4617; VI-GISEL-NEXT: v_log_f32_e32 v3, v3618; VI-GISEL-NEXT: v_log_f32_e32 v4, v1619; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, v2, s[0:1]620; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc621; VI-GISEL-NEXT: v_sub_f32_e32 v1, v3, v1622; VI-GISEL-NEXT: v_sub_f32_e32 v2, v4, v2623; VI-GISEL-NEXT: v_mov_b32_e32 v4, s3624; VI-GISEL-NEXT: v_mov_b32_e32 v3, s2625; VI-GISEL-NEXT: flat_store_dwordx3 v[3:4], v[0:2]626; VI-GISEL-NEXT: s_endpgm627;628; GFX900-SDAG-LABEL: s_log2_v3f32:629; GFX900-SDAG: ; %bb.0:630; GFX900-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x34631; GFX900-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x24632; GFX900-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000633; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x42000000634; GFX900-SDAG-NEXT: v_mov_b32_e32 v7, 0635; GFX900-SDAG-NEXT: s_waitcnt lgkmcnt(0)636; GFX900-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s2, v0637; GFX900-SDAG-NEXT: s_and_b64 s[4:5], vcc, exec638; GFX900-SDAG-NEXT: s_cselect_b32 s3, 32, 0639; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v1, vcc640; GFX900-SDAG-NEXT: v_mov_b32_e32 v3, s3641; GFX900-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s1, v0642; GFX900-SDAG-NEXT: v_ldexp_f32 v3, s2, v3643; GFX900-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec644; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v1, vcc645; GFX900-SDAG-NEXT: s_cselect_b32 s2, 32, 0646; GFX900-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s0, v0647; GFX900-SDAG-NEXT: v_mov_b32_e32 v5, s2648; GFX900-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec649; GFX900-SDAG-NEXT: v_ldexp_f32 v5, s1, v5650; GFX900-SDAG-NEXT: s_cselect_b32 s1, 32, 0651; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc652; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, s1653; GFX900-SDAG-NEXT: v_ldexp_f32 v1, s0, v1654; GFX900-SDAG-NEXT: v_log_f32_e32 v3, v3655; GFX900-SDAG-NEXT: v_log_f32_e32 v5, v5656; GFX900-SDAG-NEXT: v_log_f32_e32 v6, v1657; GFX900-SDAG-NEXT: v_sub_f32_e32 v2, v3, v2658; GFX900-SDAG-NEXT: v_sub_f32_e32 v1, v5, v4659; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v6, v0660; GFX900-SDAG-NEXT: global_store_dwordx3 v7, v[0:2], s[6:7]661; GFX900-SDAG-NEXT: s_endpgm662;663; GFX900-GISEL-LABEL: s_log2_v3f32:664; GFX900-GISEL: ; %bb.0:665; GFX900-GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x34666; GFX900-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x24667; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000668; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x42000000669; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0670; GFX900-GISEL-NEXT: s_waitcnt lgkmcnt(0)671; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s0, v1672; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc673; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0674; GFX900-GISEL-NEXT: v_ldexp_f32 v0, s0, v0675; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0676; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v2, vcc677; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s1, v1678; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v4679; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc680; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v4, 5, v4681; GFX900-GISEL-NEXT: v_ldexp_f32 v4, s1, v4682; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s2, v1683; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s[0:1]684; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1685; GFX900-GISEL-NEXT: v_ldexp_f32 v1, s2, v1686; GFX900-GISEL-NEXT: v_log_f32_e32 v4, v4687; GFX900-GISEL-NEXT: v_log_f32_e32 v5, v1688; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v2, vcc689; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, v2, s[0:1]690; GFX900-GISEL-NEXT: v_sub_f32_e32 v1, v4, v1691; GFX900-GISEL-NEXT: v_sub_f32_e32 v2, v5, v2692; GFX900-GISEL-NEXT: global_store_dwordx3 v3, v[0:2], s[6:7]693; GFX900-GISEL-NEXT: s_endpgm694;695; GFX1100-SDAG-LABEL: s_log2_v3f32:696; GFX1100-SDAG: ; %bb.0:697; GFX1100-SDAG-NEXT: s_clause 0x1698; GFX1100-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x34699; GFX1100-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x24700; GFX1100-SDAG-NEXT: s_waitcnt lgkmcnt(0)701; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s3, 0x800000, s2702; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s6, 0x800000, s1703; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s7, 0x800000, s0704; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3)705; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 0x42000000, s3706; GFX1100-SDAG-NEXT: s_and_b32 s3, s3, exec_lo707; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, s6708; GFX1100-SDAG-NEXT: s_cselect_b32 s3, 32, 0709; GFX1100-SDAG-NEXT: s_and_b32 s6, s6, exec_lo710; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v3, 0, 0x42000000, s7711; GFX1100-SDAG-NEXT: s_cselect_b32 s6, 32, 0712; GFX1100-SDAG-NEXT: s_and_b32 s7, s7, exec_lo713; GFX1100-SDAG-NEXT: v_ldexp_f32 v2, s2, s3714; GFX1100-SDAG-NEXT: s_cselect_b32 s2, 32, 0715; GFX1100-SDAG-NEXT: v_ldexp_f32 v4, s1, s6716; GFX1100-SDAG-NEXT: v_ldexp_f32 v5, s0, s2717; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)718; GFX1100-SDAG-NEXT: v_log_f32_e32 v2, v2719; GFX1100-SDAG-NEXT: v_log_f32_e32 v4, v4720; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)721; GFX1100-SDAG-NEXT: v_log_f32_e32 v5, v5722; GFX1100-SDAG-NEXT: v_mov_b32_e32 v6, 0723; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)724; GFX1100-SDAG-NEXT: v_dual_sub_f32 v2, v2, v0 :: v_dual_sub_f32 v1, v4, v1725; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v5, v3726; GFX1100-SDAG-NEXT: global_store_b96 v6, v[0:2], s[4:5]727; GFX1100-SDAG-NEXT: s_endpgm728;729; GFX1100-GISEL-LABEL: s_log2_v3f32:730; GFX1100-GISEL: ; %bb.0:731; GFX1100-GISEL-NEXT: s_clause 0x1732; GFX1100-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x34733; GFX1100-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x24734; GFX1100-GISEL-NEXT: v_mov_b32_e32 v6, 0735; GFX1100-GISEL-NEXT: s_waitcnt lgkmcnt(0)736; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s6, 0x800000, s1737; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s3, 0x800000, s0738; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s7, 0x800000, s2739; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)740; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s6741; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s3742; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_3)743; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, s7744; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, 0x42000000, s6745; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v3, 0, 0x42000000, s3746; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1747; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0748; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v5, 0, 0x42000000, s7749; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)750; GFX1100-GISEL-NEXT: v_ldexp_f32 v1, s1, v1751; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, s0, v0752; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)753; GFX1100-GISEL-NEXT: v_log_f32_e32 v1, v1754; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v2, 5, v2755; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0756; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)757; GFX1100-GISEL-NEXT: v_sub_f32_e32 v1, v1, v4758; GFX1100-GISEL-NEXT: v_ldexp_f32 v2, s2, v2759; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v3760; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)761; GFX1100-GISEL-NEXT: v_log_f32_e32 v2, v2762; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)763; GFX1100-GISEL-NEXT: v_sub_f32_e32 v2, v2, v5764; GFX1100-GISEL-NEXT: global_store_b96 v6, v[0:2], s[4:5]765; GFX1100-GISEL-NEXT: s_endpgm766;767; R600-LABEL: s_log2_v3f32:768; R600: ; %bb.0:769; R600-NEXT: ALU 29, @4, KC0[CB0:0-32], KC1[]770; R600-NEXT: MEM_RAT_CACHELESS STORE_RAW T2.X, T3.X, 0771; R600-NEXT: MEM_RAT_CACHELESS STORE_RAW T1.XY, T0.X, 1772; R600-NEXT: CF_END773; R600-NEXT: ALU clause starting at 4:774; R600-NEXT: SETGT T0.W, literal.x, KC0[3].Z,775; R600-NEXT: SETGT * T1.W, literal.x, KC0[3].Y,776; R600-NEXT: 8388608(1.175494e-38), 0(0.000000e+00)777; R600-NEXT: CNDE * T2.W, PV.W, 1.0, literal.x,778; R600-NEXT: 1333788672(4.294967e+09), 0(0.000000e+00)779; R600-NEXT: MUL_IEEE T2.W, KC0[3].Z, PV.W,780; R600-NEXT: CNDE * T3.W, T1.W, 1.0, literal.x,781; R600-NEXT: 1333788672(4.294967e+09), 0(0.000000e+00)782; R600-NEXT: MUL_IEEE T0.Y, KC0[3].Y, PS,783; R600-NEXT: SETGT T0.Z, literal.x, KC0[3].W,784; R600-NEXT: CNDE T0.W, T0.W, 0.0, literal.y,785; R600-NEXT: LOG_IEEE * T0.X, PV.W,786; R600-NEXT: 8388608(1.175494e-38), 1107296256(3.200000e+01)787; R600-NEXT: ADD T1.Y, PS, -PV.W,788; R600-NEXT: CNDE T1.Z, PV.Z, 1.0, literal.x,789; R600-NEXT: CNDE T0.W, T1.W, 0.0, literal.y,790; R600-NEXT: LOG_IEEE * T0.X, PV.Y,791; R600-NEXT: 1333788672(4.294967e+09), 1107296256(3.200000e+01)792; R600-NEXT: ADD T1.X, PS, -PV.W,793; R600-NEXT: MUL_IEEE T0.W, KC0[3].W, PV.Z,794; R600-NEXT: LSHR * T0.X, KC0[2].Y, literal.x,795; R600-NEXT: 2(2.802597e-45), 0(0.000000e+00)796; R600-NEXT: CNDE T1.W, T0.Z, 0.0, literal.x,797; R600-NEXT: LOG_IEEE * T0.Y, PV.W,798; R600-NEXT: 1107296256(3.200000e+01), 0(0.000000e+00)799; R600-NEXT: ADD T2.X, PS, -PV.W,800; R600-NEXT: ADD_INT * T0.W, KC0[2].Y, literal.x,801; R600-NEXT: 8(1.121039e-44), 0(0.000000e+00)802; R600-NEXT: LSHR * T3.X, PV.W, literal.x,803; R600-NEXT: 2(2.802597e-45), 0(0.000000e+00)804;805; CM-LABEL: s_log2_v3f32:806; CM: ; %bb.0:807; CM-NEXT: ALU 35, @4, KC0[CB0:0-32], KC1[]808; CM-NEXT: MEM_RAT_CACHELESS STORE_DWORD T0, T3.X809; CM-NEXT: MEM_RAT_CACHELESS STORE_DWORD T1.X, T2.X810; CM-NEXT: CF_END811; CM-NEXT: ALU clause starting at 4:812; CM-NEXT: SETGT * T0.W, literal.x, KC0[3].W,813; CM-NEXT: 8388608(1.175494e-38), 0(0.000000e+00)814; CM-NEXT: CNDE T0.Y, PV.W, 1.0, literal.x,815; CM-NEXT: SETGT T0.Z, literal.y, KC0[3].Z,816; CM-NEXT: SETGT * T1.W, literal.y, KC0[3].Y,817; CM-NEXT: 1333788672(4.294967e+09), 8388608(1.175494e-38)818; CM-NEXT: CNDE T0.X, PV.W, 1.0, literal.x,819; CM-NEXT: CNDE T1.Y, PV.Z, 1.0, literal.x,820; CM-NEXT: CNDE T1.Z, T0.W, 0.0, literal.y,821; CM-NEXT: MUL_IEEE * T0.W, KC0[3].W, PV.Y,822; CM-NEXT: 1333788672(4.294967e+09), 1107296256(3.200000e+01)823; CM-NEXT: LOG_IEEE T0.X (MASKED), T0.W,824; CM-NEXT: LOG_IEEE T0.Y, T0.W,825; CM-NEXT: LOG_IEEE T0.Z (MASKED), T0.W,826; CM-NEXT: LOG_IEEE * T0.W (MASKED), T0.W,827; CM-NEXT: ADD T1.X, PV.Y, -T1.Z,828; CM-NEXT: CNDE T0.Y, T0.Z, 0.0, literal.x,829; CM-NEXT: ADD_INT T0.Z, KC0[2].Y, literal.y,830; CM-NEXT: MUL_IEEE * T0.W, KC0[3].Z, T1.Y,831; CM-NEXT: 1107296256(3.200000e+01), 8(1.121039e-44)832; CM-NEXT: LOG_IEEE T0.X (MASKED), T0.W,833; CM-NEXT: LOG_IEEE T0.Y (MASKED), T0.W,834; CM-NEXT: LOG_IEEE T0.Z (MASKED), T0.W,835; CM-NEXT: LOG_IEEE * T0.W, T0.W,836; CM-NEXT: LSHR T2.X, T0.Z, literal.x,837; CM-NEXT: ADD T0.Y, PV.W, -T0.Y,838; CM-NEXT: CNDE T0.Z, T1.W, 0.0, literal.y,839; CM-NEXT: MUL_IEEE * T0.W, KC0[3].Y, T0.X,840; CM-NEXT: 2(2.802597e-45), 1107296256(3.200000e+01)841; CM-NEXT: LOG_IEEE T0.X, T0.W,842; CM-NEXT: LOG_IEEE T0.Y (MASKED), T0.W,843; CM-NEXT: LOG_IEEE T0.Z (MASKED), T0.W,844; CM-NEXT: LOG_IEEE * T0.W (MASKED), T0.W,845; CM-NEXT: ADD * T0.X, PV.X, -T0.Z,846; CM-NEXT: LSHR * T3.X, KC0[2].Y, literal.x,847; CM-NEXT: 2(2.802597e-45), 0(0.000000e+00)848 %result = call <3 x float> @llvm.log2.v3f32(<3 x float> %in)849 store <3 x float> %result, ptr addrspace(1) %out850 ret void851}852 853; FIXME: We should be able to merge these packets together on Cayman so we854; have a maximum of 4 instructions.855define amdgpu_kernel void @s_log2_v4f32(ptr addrspace(1) %out, <4 x float> %in) {856; SI-SDAG-LABEL: s_log2_v4f32:857; SI-SDAG: ; %bb.0:858; SI-SDAG-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x9859; SI-SDAG-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0xd860; SI-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000861; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x42000000862; SI-SDAG-NEXT: s_mov_b32 s3, 0xf000863; SI-SDAG-NEXT: s_mov_b32 s2, -1864; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0)865; SI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s7, v0866; SI-SDAG-NEXT: s_and_b64 s[8:9], vcc, exec867; SI-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v1, vcc868; SI-SDAG-NEXT: s_cselect_b32 s8, 32, 0869; SI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s6, v0870; SI-SDAG-NEXT: v_mov_b32_e32 v3, s8871; SI-SDAG-NEXT: s_and_b64 s[8:9], vcc, exec872; SI-SDAG-NEXT: v_ldexp_f32_e32 v3, s7, v3873; SI-SDAG-NEXT: s_cselect_b32 s7, 32, 0874; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v1, vcc875; SI-SDAG-NEXT: v_mov_b32_e32 v5, s7876; SI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s5, v0877; SI-SDAG-NEXT: v_ldexp_f32_e32 v5, s6, v5878; SI-SDAG-NEXT: s_and_b64 s[6:7], vcc, exec879; SI-SDAG-NEXT: v_cndmask_b32_e32 v6, 0, v1, vcc880; SI-SDAG-NEXT: s_cselect_b32 s6, 32, 0881; SI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s4, v0882; SI-SDAG-NEXT: v_mov_b32_e32 v7, s6883; SI-SDAG-NEXT: s_and_b64 s[6:7], vcc, exec884; SI-SDAG-NEXT: v_ldexp_f32_e32 v7, s5, v7885; SI-SDAG-NEXT: s_cselect_b32 s5, 32, 0886; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc887; SI-SDAG-NEXT: v_mov_b32_e32 v1, s5888; SI-SDAG-NEXT: v_ldexp_f32_e32 v1, s4, v1889; SI-SDAG-NEXT: v_log_f32_e32 v3, v3890; SI-SDAG-NEXT: v_log_f32_e32 v5, v5891; SI-SDAG-NEXT: v_log_f32_e32 v7, v7892; SI-SDAG-NEXT: v_log_f32_e32 v8, v1893; SI-SDAG-NEXT: v_sub_f32_e32 v3, v3, v2894; SI-SDAG-NEXT: v_sub_f32_e32 v2, v5, v4895; SI-SDAG-NEXT: v_sub_f32_e32 v1, v7, v6896; SI-SDAG-NEXT: v_sub_f32_e32 v0, v8, v0897; SI-SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[0:3], 0898; SI-SDAG-NEXT: s_endpgm899;900; SI-GISEL-LABEL: s_log2_v4f32:901; SI-GISEL: ; %bb.0:902; SI-GISEL-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0xd903; SI-GISEL-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x9904; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x800000905; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x42000000906; SI-GISEL-NEXT: s_mov_b32 s6, -1907; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0)908; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s8, v2909; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc910; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s9, v2911; SI-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0912; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s[0:1]913; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, s8, v0914; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1915; SI-GISEL-NEXT: v_log_f32_e32 v0, v0916; SI-GISEL-NEXT: v_ldexp_f32_e32 v1, s9, v1917; SI-GISEL-NEXT: v_log_f32_e32 v1, v1918; SI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v3, vcc919; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v4920; SI-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, v3, s[0:1]921; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s10, v2922; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s11, v2923; SI-GISEL-NEXT: v_sub_f32_e32 v1, v1, v4924; SI-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc925; SI-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, s[0:1]926; SI-GISEL-NEXT: v_lshlrev_b32_e32 v4, 5, v4927; SI-GISEL-NEXT: v_lshlrev_b32_e32 v2, 5, v2928; SI-GISEL-NEXT: v_ldexp_f32_e32 v4, s10, v4929; SI-GISEL-NEXT: v_ldexp_f32_e32 v2, s11, v2930; SI-GISEL-NEXT: v_log_f32_e32 v4, v4931; SI-GISEL-NEXT: v_log_f32_e32 v5, v2932; SI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v3, vcc933; SI-GISEL-NEXT: v_cndmask_b32_e64 v3, 0, v3, s[0:1]934; SI-GISEL-NEXT: v_sub_f32_e32 v2, v4, v2935; SI-GISEL-NEXT: v_sub_f32_e32 v3, v5, v3936; SI-GISEL-NEXT: s_mov_b32 s7, 0xf000937; SI-GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[4:7], 0938; SI-GISEL-NEXT: s_endpgm939;940; VI-SDAG-LABEL: s_log2_v4f32:941; VI-SDAG: ; %bb.0:942; VI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x34943; VI-SDAG-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x24944; VI-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000945; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x42000000946; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0)947; VI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s3, v0948; VI-SDAG-NEXT: s_and_b64 s[6:7], vcc, exec949; VI-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v1, vcc950; VI-SDAG-NEXT: s_cselect_b32 s6, 32, 0951; VI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s2, v0952; VI-SDAG-NEXT: v_mov_b32_e32 v3, s6953; VI-SDAG-NEXT: s_and_b64 s[6:7], vcc, exec954; VI-SDAG-NEXT: v_ldexp_f32 v3, s3, v3955; VI-SDAG-NEXT: s_cselect_b32 s3, 32, 0956; VI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v1, vcc957; VI-SDAG-NEXT: v_mov_b32_e32 v5, s3958; VI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s1, v0959; VI-SDAG-NEXT: v_ldexp_f32 v5, s2, v5960; VI-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec961; VI-SDAG-NEXT: v_cndmask_b32_e32 v6, 0, v1, vcc962; VI-SDAG-NEXT: s_cselect_b32 s2, 32, 0963; VI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s0, v0964; VI-SDAG-NEXT: v_mov_b32_e32 v7, s2965; VI-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec966; VI-SDAG-NEXT: v_ldexp_f32 v7, s1, v7967; VI-SDAG-NEXT: s_cselect_b32 s1, 32, 0968; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc969; VI-SDAG-NEXT: v_mov_b32_e32 v1, s1970; VI-SDAG-NEXT: v_log_f32_e32 v3, v3971; VI-SDAG-NEXT: v_log_f32_e32 v5, v5972; VI-SDAG-NEXT: v_ldexp_f32 v1, s0, v1973; VI-SDAG-NEXT: v_log_f32_e32 v7, v7974; VI-SDAG-NEXT: v_log_f32_e32 v8, v1975; VI-SDAG-NEXT: v_sub_f32_e32 v3, v3, v2976; VI-SDAG-NEXT: v_sub_f32_e32 v2, v5, v4977; VI-SDAG-NEXT: v_mov_b32_e32 v4, s4978; VI-SDAG-NEXT: v_sub_f32_e32 v1, v7, v6979; VI-SDAG-NEXT: v_sub_f32_e32 v0, v8, v0980; VI-SDAG-NEXT: v_mov_b32_e32 v5, s5981; VI-SDAG-NEXT: flat_store_dwordx4 v[4:5], v[0:3]982; VI-SDAG-NEXT: s_endpgm983;984; VI-GISEL-LABEL: s_log2_v4f32:985; VI-GISEL: ; %bb.0:986; VI-GISEL-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x34987; VI-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x24988; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x800000989; VI-GISEL-NEXT: v_mov_b32_e32 v3, 0x42000000990; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0)991; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s8, v2992; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc993; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s9, v2994; VI-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0995; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s[0:1]996; VI-GISEL-NEXT: v_ldexp_f32 v0, s8, v0997; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1998; VI-GISEL-NEXT: v_log_f32_e32 v0, v0999; VI-GISEL-NEXT: v_ldexp_f32 v1, s9, v11000; VI-GISEL-NEXT: v_log_f32_e32 v1, v11001; VI-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v3, vcc1002; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v41003; VI-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, v3, s[0:1]1004; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s10, v21005; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s11, v21006; VI-GISEL-NEXT: v_sub_f32_e32 v1, v1, v41007; VI-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, 1, vcc1008; VI-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, s[0:1]1009; VI-GISEL-NEXT: v_lshlrev_b32_e32 v4, 5, v41010; VI-GISEL-NEXT: v_lshlrev_b32_e32 v2, 5, v21011; VI-GISEL-NEXT: v_ldexp_f32 v4, s10, v41012; VI-GISEL-NEXT: v_ldexp_f32 v2, s11, v21013; VI-GISEL-NEXT: v_log_f32_e32 v4, v41014; VI-GISEL-NEXT: v_log_f32_e32 v5, v21015; VI-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v3, vcc1016; VI-GISEL-NEXT: v_cndmask_b32_e64 v3, 0, v3, s[0:1]1017; VI-GISEL-NEXT: v_sub_f32_e32 v2, v4, v21018; VI-GISEL-NEXT: v_sub_f32_e32 v3, v5, v31019; VI-GISEL-NEXT: v_mov_b32_e32 v5, s31020; VI-GISEL-NEXT: v_mov_b32_e32 v4, s21021; VI-GISEL-NEXT: flat_store_dwordx4 v[4:5], v[0:3]1022; VI-GISEL-NEXT: s_endpgm1023;1024; GFX900-SDAG-LABEL: s_log2_v4f32:1025; GFX900-SDAG: ; %bb.0:1026; GFX900-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x341027; GFX900-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x241028; GFX900-SDAG-NEXT: v_mov_b32_e32 v0, 0x8000001029; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001030; GFX900-SDAG-NEXT: v_mov_b32_e32 v4, 01031; GFX900-SDAG-NEXT: s_waitcnt lgkmcnt(0)1032; GFX900-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s3, v01033; GFX900-SDAG-NEXT: s_and_b64 s[4:5], vcc, exec1034; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v1, vcc1035; GFX900-SDAG-NEXT: s_cselect_b32 s4, 32, 01036; GFX900-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s2, v01037; GFX900-SDAG-NEXT: v_mov_b32_e32 v3, s41038; GFX900-SDAG-NEXT: s_and_b64 s[4:5], vcc, exec1039; GFX900-SDAG-NEXT: v_ldexp_f32 v3, s3, v31040; GFX900-SDAG-NEXT: s_cselect_b32 s3, 32, 01041; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v5, 0, v1, vcc1042; GFX900-SDAG-NEXT: v_mov_b32_e32 v6, s31043; GFX900-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s1, v01044; GFX900-SDAG-NEXT: v_ldexp_f32 v6, s2, v61045; GFX900-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec1046; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v7, 0, v1, vcc1047; GFX900-SDAG-NEXT: s_cselect_b32 s2, 32, 01048; GFX900-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s0, v01049; GFX900-SDAG-NEXT: v_mov_b32_e32 v8, s21050; GFX900-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec1051; GFX900-SDAG-NEXT: v_ldexp_f32 v8, s1, v81052; GFX900-SDAG-NEXT: s_cselect_b32 s1, 32, 01053; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v0, 0, v1, vcc1054; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, s11055; GFX900-SDAG-NEXT: v_ldexp_f32 v1, s0, v11056; GFX900-SDAG-NEXT: v_log_f32_e32 v3, v31057; GFX900-SDAG-NEXT: v_log_f32_e32 v6, v61058; GFX900-SDAG-NEXT: v_log_f32_e32 v8, v81059; GFX900-SDAG-NEXT: v_log_f32_e32 v9, v11060; GFX900-SDAG-NEXT: v_sub_f32_e32 v3, v3, v21061; GFX900-SDAG-NEXT: v_sub_f32_e32 v2, v6, v51062; GFX900-SDAG-NEXT: v_sub_f32_e32 v1, v8, v71063; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v9, v01064; GFX900-SDAG-NEXT: global_store_dwordx4 v4, v[0:3], s[6:7]1065; GFX900-SDAG-NEXT: s_endpgm1066;1067; GFX900-GISEL-LABEL: s_log2_v4f32:1068; GFX900-GISEL: ; %bb.0:1069; GFX900-GISEL-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x341070; GFX900-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x241071; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x8000001072; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x420000001073; GFX900-GISEL-NEXT: v_mov_b32_e32 v4, 01074; GFX900-GISEL-NEXT: s_waitcnt lgkmcnt(0)1075; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s8, v21076; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1077; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s9, v21078; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v01079; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s[0:1]1080; GFX900-GISEL-NEXT: v_ldexp_f32 v0, s8, v01081; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11082; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v01083; GFX900-GISEL-NEXT: v_ldexp_f32 v1, s9, v11084; GFX900-GISEL-NEXT: v_log_f32_e32 v1, v11085; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v5, 0, v3, vcc1086; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v51087; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v5, 0, v3, s[0:1]1088; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s10, v21089; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s11, v21090; GFX900-GISEL-NEXT: v_sub_f32_e32 v1, v1, v51091; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v5, 0, 1, vcc1092; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, s[0:1]1093; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v5, 5, v51094; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v2, 5, v21095; GFX900-GISEL-NEXT: v_ldexp_f32 v5, s10, v51096; GFX900-GISEL-NEXT: v_ldexp_f32 v2, s11, v21097; GFX900-GISEL-NEXT: v_log_f32_e32 v5, v51098; GFX900-GISEL-NEXT: v_log_f32_e32 v6, v21099; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v3, vcc1100; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v3, 0, v3, s[0:1]1101; GFX900-GISEL-NEXT: v_sub_f32_e32 v2, v5, v21102; GFX900-GISEL-NEXT: v_sub_f32_e32 v3, v6, v31103; GFX900-GISEL-NEXT: global_store_dwordx4 v4, v[0:3], s[2:3]1104; GFX900-GISEL-NEXT: s_endpgm1105;1106; GFX1100-SDAG-LABEL: s_log2_v4f32:1107; GFX1100-SDAG: ; %bb.0:1108; GFX1100-SDAG-NEXT: s_clause 0x11109; GFX1100-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x341110; GFX1100-SDAG-NEXT: s_load_b64 s[4:5], s[4:5], 0x241111; GFX1100-SDAG-NEXT: s_waitcnt lgkmcnt(0)1112; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s6, 0x800000, s31113; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s7, 0x800000, s21114; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s8, 0x800000, s11115; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s9, 0x800000, s01116; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_4)1117; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 0x42000000, s61118; GFX1100-SDAG-NEXT: s_and_b32 s6, s6, exec_lo1119; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, s71120; GFX1100-SDAG-NEXT: s_cselect_b32 s6, 32, 01121; GFX1100-SDAG-NEXT: s_and_b32 s7, s7, exec_lo1122; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 0x42000000, s81123; GFX1100-SDAG-NEXT: s_cselect_b32 s7, 32, 01124; GFX1100-SDAG-NEXT: s_and_b32 s8, s8, exec_lo1125; GFX1100-SDAG-NEXT: v_ldexp_f32 v2, s3, s61126; GFX1100-SDAG-NEXT: s_cselect_b32 s3, 32, 01127; GFX1100-SDAG-NEXT: s_and_b32 s6, s9, exec_lo1128; GFX1100-SDAG-NEXT: v_ldexp_f32 v3, s2, s71129; GFX1100-SDAG-NEXT: s_cselect_b32 s2, 32, 01130; GFX1100-SDAG-NEXT: v_ldexp_f32 v6, s1, s31131; GFX1100-SDAG-NEXT: v_ldexp_f32 v7, s0, s21132; GFX1100-SDAG-NEXT: v_log_f32_e32 v2, v21133; GFX1100-SDAG-NEXT: v_log_f32_e32 v8, v31134; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v5, 0, 0x42000000, s91135; GFX1100-SDAG-NEXT: v_log_f32_e32 v6, v61136; GFX1100-SDAG-NEXT: v_log_f32_e32 v7, v71137; GFX1100-SDAG-NEXT: v_mov_b32_e32 v9, 01138; GFX1100-SDAG-NEXT: s_delay_alu instid0(TRANS32_DEP_3)1139; GFX1100-SDAG-NEXT: v_dual_sub_f32 v3, v2, v0 :: v_dual_sub_f32 v2, v8, v11140; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)1141; GFX1100-SDAG-NEXT: v_dual_sub_f32 v1, v6, v4 :: v_dual_sub_f32 v0, v7, v51142; GFX1100-SDAG-NEXT: global_store_b128 v9, v[0:3], s[4:5]1143; GFX1100-SDAG-NEXT: s_endpgm1144;1145; GFX1100-GISEL-LABEL: s_log2_v4f32:1146; GFX1100-GISEL: ; %bb.0:1147; GFX1100-GISEL-NEXT: s_clause 0x11148; GFX1100-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x341149; GFX1100-GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x241150; GFX1100-GISEL-NEXT: v_mov_b32_e32 v8, 01151; GFX1100-GISEL-NEXT: s_waitcnt lgkmcnt(0)1152; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s7, 0x800000, s11153; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s6, 0x800000, s01154; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s9, 0x800000, s31155; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s8, 0x800000, s21156; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1157; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s71158; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s61159; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v5, 0, 0x42000000, s71160; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v3, 0, 1, s91161; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, 0x42000000, s61162; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11163; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, s81164; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v7, 0, 0x42000000, s91165; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, 0x42000000, s81166; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_1)1167; GFX1100-GISEL-NEXT: v_ldexp_f32 v1, s1, v11168; GFX1100-GISEL-NEXT: v_log_f32_e32 v1, v11169; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)1170; GFX1100-GISEL-NEXT: v_dual_sub_f32 v1, v1, v5 :: v_dual_lshlrev_b32 v0, 5, v01171; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1172; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, s0, v01173; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v01174; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)1175; GFX1100-GISEL-NEXT: v_dual_sub_f32 v0, v0, v4 :: v_dual_lshlrev_b32 v3, 5, v31176; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1177; GFX1100-GISEL-NEXT: v_ldexp_f32 v3, s3, v31178; GFX1100-GISEL-NEXT: v_log_f32_e32 v3, v31179; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)1180; GFX1100-GISEL-NEXT: v_dual_sub_f32 v3, v3, v7 :: v_dual_lshlrev_b32 v2, 5, v21181; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1182; GFX1100-GISEL-NEXT: v_ldexp_f32 v2, s2, v21183; GFX1100-GISEL-NEXT: v_log_f32_e32 v2, v21184; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)1185; GFX1100-GISEL-NEXT: v_sub_f32_e32 v2, v2, v61186; GFX1100-GISEL-NEXT: global_store_b128 v8, v[0:3], s[4:5]1187; GFX1100-GISEL-NEXT: s_endpgm1188;1189; R600-LABEL: s_log2_v4f32:1190; R600: ; %bb.0:1191; R600-NEXT: ALU 33, @4, KC0[CB0:0-32], KC1[]1192; R600-NEXT: MEM_RAT_CACHELESS STORE_RAW T0.XYZW, T1.X, 11193; R600-NEXT: CF_END1194; R600-NEXT: PAD1195; R600-NEXT: ALU clause starting at 4:1196; R600-NEXT: SETGT T0.W, literal.x, KC0[4].X,1197; R600-NEXT: SETGT * T1.W, literal.x, KC0[3].W,1198; R600-NEXT: 8388608(1.175494e-38), 0(0.000000e+00)1199; R600-NEXT: CNDE * T2.W, PV.W, 1.0, literal.x,1200; R600-NEXT: 1333788672(4.294967e+09), 0(0.000000e+00)1201; R600-NEXT: MUL_IEEE T0.Z, KC0[4].X, PV.W,1202; R600-NEXT: SETGT T2.W, literal.x, KC0[3].Z,1203; R600-NEXT: CNDE * T3.W, T1.W, 1.0, literal.y,1204; R600-NEXT: 8388608(1.175494e-38), 1333788672(4.294967e+09)1205; R600-NEXT: MUL_IEEE T0.X, KC0[3].W, PS,1206; R600-NEXT: CNDE T0.Y, T0.W, 0.0, literal.x,1207; R600-NEXT: SETGT T1.Z, literal.y, KC0[3].Y,1208; R600-NEXT: CNDE T0.W, PV.W, 1.0, literal.z,1209; R600-NEXT: LOG_IEEE * T0.Z, PV.Z,1210; R600-NEXT: 1107296256(3.200000e+01), 8388608(1.175494e-38)1211; R600-NEXT: 1333788672(4.294967e+09), 0(0.000000e+00)1212; R600-NEXT: MUL_IEEE T1.X, KC0[3].Z, PV.W,1213; R600-NEXT: CNDE T1.Y, T1.W, 0.0, literal.x,1214; R600-NEXT: CNDE T2.Z, PV.Z, 1.0, literal.y,1215; R600-NEXT: ADD T0.W, PS, -PV.Y,1216; R600-NEXT: LOG_IEEE * T0.X, PV.X,1217; R600-NEXT: 1107296256(3.200000e+01), 1333788672(4.294967e+09)1218; R600-NEXT: MUL_IEEE T2.Y, KC0[3].Y, PV.Z,1219; R600-NEXT: ADD T0.Z, PS, -PV.Y,1220; R600-NEXT: CNDE T1.W, T2.W, 0.0, literal.x,1221; R600-NEXT: LOG_IEEE * T0.X, PV.X,1222; R600-NEXT: 1107296256(3.200000e+01), 0(0.000000e+00)1223; R600-NEXT: ADD T0.Y, PS, -PV.W,1224; R600-NEXT: CNDE T1.W, T1.Z, 0.0, literal.x,1225; R600-NEXT: LOG_IEEE * T0.X, PV.Y,1226; R600-NEXT: 1107296256(3.200000e+01), 0(0.000000e+00)1227; R600-NEXT: ADD T0.X, PS, -PV.W,1228; R600-NEXT: LSHR * T1.X, KC0[2].Y, literal.x,1229; R600-NEXT: 2(2.802597e-45), 0(0.000000e+00)1230;1231; CM-LABEL: s_log2_v4f32:1232; CM: ; %bb.0:1233; CM-NEXT: ALU 43, @4, KC0[CB0:0-32], KC1[]1234; CM-NEXT: MEM_RAT_CACHELESS STORE_DWORD T0, T1.X1235; CM-NEXT: CF_END1236; CM-NEXT: PAD1237; CM-NEXT: ALU clause starting at 4:1238; CM-NEXT: SETGT * T0.W, literal.x, KC0[4].X,1239; CM-NEXT: 8388608(1.175494e-38), 0(0.000000e+00)1240; CM-NEXT: CNDE T0.Y, PV.W, 1.0, literal.x,1241; CM-NEXT: SETGT T0.Z, literal.y, KC0[3].W,1242; CM-NEXT: SETGT * T1.W, literal.y, KC0[3].Z,1243; CM-NEXT: 1333788672(4.294967e+09), 8388608(1.175494e-38)1244; CM-NEXT: CNDE T0.X, PV.W, 1.0, literal.x,1245; CM-NEXT: CNDE T1.Y, T0.W, 0.0, literal.y,1246; CM-NEXT: CNDE T1.Z, PV.Z, 1.0, literal.x,1247; CM-NEXT: MUL_IEEE * T0.W, KC0[4].X, PV.Y,1248; CM-NEXT: 1333788672(4.294967e+09), 1107296256(3.200000e+01)1249; CM-NEXT: LOG_IEEE T0.X (MASKED), T0.W,1250; CM-NEXT: LOG_IEEE T0.Y, T0.W,1251; CM-NEXT: LOG_IEEE T0.Z (MASKED), T0.W,1252; CM-NEXT: LOG_IEEE * T0.W (MASKED), T0.W,1253; CM-NEXT: CNDE T1.X, T0.Z, 0.0, literal.x,1254; CM-NEXT: SETGT T2.Y, literal.y, KC0[3].Y,1255; CM-NEXT: MUL_IEEE T0.Z, KC0[3].W, T1.Z,1256; CM-NEXT: ADD * T0.W, PV.Y, -T1.Y,1257; CM-NEXT: 1107296256(3.200000e+01), 8388608(1.175494e-38)1258; CM-NEXT: LOG_IEEE T0.X (MASKED), T0.Z,1259; CM-NEXT: LOG_IEEE T0.Y, T0.Z,1260; CM-NEXT: LOG_IEEE T0.Z (MASKED), T0.Z,1261; CM-NEXT: LOG_IEEE * T0.W (MASKED), T0.Z,1262; CM-NEXT: CNDE T2.X, T2.Y, 1.0, literal.x,1263; CM-NEXT: CNDE T1.Y, T1.W, 0.0, literal.y,1264; CM-NEXT: ADD T0.Z, PV.Y, -T1.X,1265; CM-NEXT: MUL_IEEE * T1.W, KC0[3].Z, T0.X, BS:VEC_021/SCL_1221266; CM-NEXT: 1333788672(4.294967e+09), 1107296256(3.200000e+01)1267; CM-NEXT: LOG_IEEE T0.X, T1.W,1268; CM-NEXT: LOG_IEEE T0.Y (MASKED), T1.W,1269; CM-NEXT: LOG_IEEE T0.Z (MASKED), T1.W,1270; CM-NEXT: LOG_IEEE * T0.W (MASKED), T1.W,1271; CM-NEXT: ADD T0.Y, PV.X, -T1.Y,1272; CM-NEXT: CNDE T1.Z, T2.Y, 0.0, literal.x,1273; CM-NEXT: MUL_IEEE * T1.W, KC0[3].Y, T2.X,1274; CM-NEXT: 1107296256(3.200000e+01), 0(0.000000e+00)1275; CM-NEXT: LOG_IEEE T0.X, T1.W,1276; CM-NEXT: LOG_IEEE T0.Y (MASKED), T1.W,1277; CM-NEXT: LOG_IEEE T0.Z (MASKED), T1.W,1278; CM-NEXT: LOG_IEEE * T0.W (MASKED), T1.W,1279; CM-NEXT: ADD * T0.X, PV.X, -T1.Z,1280; CM-NEXT: LSHR * T1.X, KC0[2].Y, literal.x,1281; CM-NEXT: 2(2.802597e-45), 0(0.000000e+00)1282 %result = call <4 x float> @llvm.log2.v4f32(<4 x float> %in)1283 store <4 x float> %result, ptr addrspace(1) %out1284 ret void1285}1286 1287define float @v_log2_f32(float %in) {1288; SI-SDAG-LABEL: v_log2_f32:1289; SI-SDAG: ; %bb.0:1290; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1291; SI-SDAG-NEXT: s_mov_b32 s4, 0x8000001292; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v01293; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc1294; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v21295; SI-SDAG-NEXT: v_log_f32_e32 v0, v01296; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001297; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1298; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11299; SI-SDAG-NEXT: s_setpc_b64 s[30:31]1300;1301; SI-GISEL-LABEL: v_log2_f32:1302; SI-GISEL: ; %bb.0:1303; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1304; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000001305; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v11306; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1307; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11308; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v11309; SI-GISEL-NEXT: v_log_f32_e32 v0, v01310; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000001311; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1312; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11313; SI-GISEL-NEXT: s_setpc_b64 s[30:31]1314;1315; VI-SDAG-LABEL: v_log2_f32:1316; VI-SDAG: ; %bb.0:1317; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1318; VI-SDAG-NEXT: s_mov_b32 s4, 0x8000001319; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v01320; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc1321; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v21322; VI-SDAG-NEXT: v_log_f32_e32 v0, v01323; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001324; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1325; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11326; VI-SDAG-NEXT: s_setpc_b64 s[30:31]1327;1328; VI-GISEL-LABEL: v_log2_f32:1329; VI-GISEL: ; %bb.0:1330; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1331; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000001332; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v11333; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1334; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11335; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v11336; VI-GISEL-NEXT: v_log_f32_e32 v0, v01337; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000001338; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1339; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11340; VI-GISEL-NEXT: s_setpc_b64 s[30:31]1341;1342; GFX900-SDAG-LABEL: v_log2_f32:1343; GFX900-SDAG: ; %bb.0:1344; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1345; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x8000001346; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v01347; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc1348; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v21349; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v01350; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001351; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1352; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11353; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]1354;1355; GFX900-GISEL-LABEL: v_log2_f32:1356; GFX900-GISEL: ; %bb.0:1357; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1358; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000001359; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v11360; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1361; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11362; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v11363; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v01364; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000001365; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1366; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11367; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]1368;1369; GFX1100-SDAG-LABEL: v_log2_f32:1370; GFX1100-SDAG: ; %bb.0:1371; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1372; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v01373; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc_lo1374; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo1375; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1376; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v21377; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v01378; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)1379; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11380; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]1381;1382; GFX1100-GISEL-LABEL: v_log2_f32:1383; GFX1100-GISEL: ; %bb.0:1384; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1385; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v01386; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo1387; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1388; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11389; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v11390; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo1391; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)1392; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v01393; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)1394; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11395; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31]1396;1397; R600-LABEL: v_log2_f32:1398; R600: ; %bb.0:1399; R600-NEXT: CF_END1400; R600-NEXT: PAD1401;1402; CM-LABEL: v_log2_f32:1403; CM: ; %bb.0:1404; CM-NEXT: CF_END1405; CM-NEXT: PAD1406 %result = call float @llvm.log2.f32(float %in)1407 ret float %result1408}1409 1410define float @v_log2_fabs_f32(float %in) {1411; SI-SDAG-LABEL: v_log2_fabs_f32:1412; SI-SDAG: ; %bb.0:1413; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1414; SI-SDAG-NEXT: s_mov_b32 s4, 0x8000001415; SI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s41416; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc1417; SI-SDAG-NEXT: v_ldexp_f32_e64 v0, |v0|, v21418; SI-SDAG-NEXT: v_log_f32_e32 v0, v01419; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001420; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1421; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11422; SI-SDAG-NEXT: s_setpc_b64 s[30:31]1423;1424; SI-GISEL-LABEL: v_log2_fabs_f32:1425; SI-GISEL: ; %bb.0:1426; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1427; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000001428; SI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v11429; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1430; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11431; SI-GISEL-NEXT: v_ldexp_f32_e64 v0, |v0|, v11432; SI-GISEL-NEXT: v_log_f32_e32 v0, v01433; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000001434; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1435; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11436; SI-GISEL-NEXT: s_setpc_b64 s[30:31]1437;1438; VI-SDAG-LABEL: v_log2_fabs_f32:1439; VI-SDAG: ; %bb.0:1440; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1441; VI-SDAG-NEXT: s_mov_b32 s4, 0x8000001442; VI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s41443; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc1444; VI-SDAG-NEXT: v_ldexp_f32 v0, |v0|, v21445; VI-SDAG-NEXT: v_log_f32_e32 v0, v01446; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001447; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1448; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11449; VI-SDAG-NEXT: s_setpc_b64 s[30:31]1450;1451; VI-GISEL-LABEL: v_log2_fabs_f32:1452; VI-GISEL: ; %bb.0:1453; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1454; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000001455; VI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v11456; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1457; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11458; VI-GISEL-NEXT: v_ldexp_f32 v0, |v0|, v11459; VI-GISEL-NEXT: v_log_f32_e32 v0, v01460; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000001461; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1462; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11463; VI-GISEL-NEXT: s_setpc_b64 s[30:31]1464;1465; GFX900-SDAG-LABEL: v_log2_fabs_f32:1466; GFX900-SDAG: ; %bb.0:1467; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1468; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x8000001469; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s41470; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc1471; GFX900-SDAG-NEXT: v_ldexp_f32 v0, |v0|, v21472; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v01473; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001474; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1475; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11476; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]1477;1478; GFX900-GISEL-LABEL: v_log2_fabs_f32:1479; GFX900-GISEL: ; %bb.0:1480; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1481; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000001482; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v11483; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1484; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11485; GFX900-GISEL-NEXT: v_ldexp_f32 v0, |v0|, v11486; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v01487; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000001488; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1489; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11490; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]1491;1492; GFX1100-SDAG-LABEL: v_log2_fabs_f32:1493; GFX1100-SDAG: ; %bb.0:1494; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1495; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s0, 0x800000, |v0|1496; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)1497; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, s01498; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, s01499; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, |v0|, v21500; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)1501; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v01502; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)1503; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11504; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]1505;1506; GFX1100-GISEL-LABEL: v_log2_fabs_f32:1507; GFX1100-GISEL: ; %bb.0:1508; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1509; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s0, 0x800000, |v0|1510; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1511; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s01512; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11513; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)1514; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, |v0|, v11515; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, s01516; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v01517; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)1518; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11519; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31]1520;1521; R600-LABEL: v_log2_fabs_f32:1522; R600: ; %bb.0:1523; R600-NEXT: CF_END1524; R600-NEXT: PAD1525;1526; CM-LABEL: v_log2_fabs_f32:1527; CM: ; %bb.0:1528; CM-NEXT: CF_END1529; CM-NEXT: PAD1530 %fabs = call float @llvm.fabs.f32(float %in)1531 %result = call float @llvm.log2.f32(float %fabs)1532 ret float %result1533}1534 1535define float @v_log2_fneg_fabs_f32(float %in) {1536; SI-SDAG-LABEL: v_log2_fneg_fabs_f32:1537; SI-SDAG: ; %bb.0:1538; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1539; SI-SDAG-NEXT: s_mov_b32 s4, 0x808000001540; SI-SDAG-NEXT: v_cmp_gt_f32_e64 vcc, |v0|, s41541; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc1542; SI-SDAG-NEXT: v_ldexp_f32_e64 v0, -|v0|, v21543; SI-SDAG-NEXT: v_log_f32_e32 v0, v01544; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001545; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1546; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11547; SI-SDAG-NEXT: s_setpc_b64 s[30:31]1548;1549; SI-GISEL-LABEL: v_log2_fneg_fabs_f32:1550; SI-GISEL: ; %bb.0:1551; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1552; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000001553; SI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, -|v0|, v11554; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1555; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11556; SI-GISEL-NEXT: v_ldexp_f32_e64 v0, -|v0|, v11557; SI-GISEL-NEXT: v_log_f32_e32 v0, v01558; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000001559; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1560; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11561; SI-GISEL-NEXT: s_setpc_b64 s[30:31]1562;1563; VI-SDAG-LABEL: v_log2_fneg_fabs_f32:1564; VI-SDAG: ; %bb.0:1565; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1566; VI-SDAG-NEXT: s_mov_b32 s4, 0x808000001567; VI-SDAG-NEXT: v_cmp_gt_f32_e64 vcc, |v0|, s41568; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc1569; VI-SDAG-NEXT: v_ldexp_f32 v0, -|v0|, v21570; VI-SDAG-NEXT: v_log_f32_e32 v0, v01571; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001572; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1573; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11574; VI-SDAG-NEXT: s_setpc_b64 s[30:31]1575;1576; VI-GISEL-LABEL: v_log2_fneg_fabs_f32:1577; VI-GISEL: ; %bb.0:1578; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1579; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000001580; VI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, -|v0|, v11581; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1582; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11583; VI-GISEL-NEXT: v_ldexp_f32 v0, -|v0|, v11584; VI-GISEL-NEXT: v_log_f32_e32 v0, v01585; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000001586; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1587; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11588; VI-GISEL-NEXT: s_setpc_b64 s[30:31]1589;1590; GFX900-SDAG-LABEL: v_log2_fneg_fabs_f32:1591; GFX900-SDAG: ; %bb.0:1592; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1593; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x808000001594; GFX900-SDAG-NEXT: v_cmp_gt_f32_e64 vcc, |v0|, s41595; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc1596; GFX900-SDAG-NEXT: v_ldexp_f32 v0, -|v0|, v21597; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v01598; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001599; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1600; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11601; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]1602;1603; GFX900-GISEL-LABEL: v_log2_fneg_fabs_f32:1604; GFX900-GISEL: ; %bb.0:1605; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1606; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000001607; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, -|v0|, v11608; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1609; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11610; GFX900-GISEL-NEXT: v_ldexp_f32 v0, -|v0|, v11611; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v01612; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000001613; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1614; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11615; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]1616;1617; GFX1100-SDAG-LABEL: v_log2_fneg_fabs_f32:1618; GFX1100-SDAG: ; %bb.0:1619; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1620; GFX1100-SDAG-NEXT: v_cmp_lt_f32_e64 s0, 0x80800000, |v0|1621; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)1622; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, s01623; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, s01624; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, -|v0|, v21625; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)1626; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v01627; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)1628; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11629; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]1630;1631; GFX1100-GISEL-LABEL: v_log2_fneg_fabs_f32:1632; GFX1100-GISEL: ; %bb.0:1633; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1634; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s0, 0x800000, -|v0|1635; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1636; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s01637; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11638; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)1639; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, -|v0|, v11640; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, s01641; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v01642; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)1643; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11644; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31]1645;1646; R600-LABEL: v_log2_fneg_fabs_f32:1647; R600: ; %bb.0:1648; R600-NEXT: CF_END1649; R600-NEXT: PAD1650;1651; CM-LABEL: v_log2_fneg_fabs_f32:1652; CM: ; %bb.0:1653; CM-NEXT: CF_END1654; CM-NEXT: PAD1655 %fabs = call float @llvm.fabs.f32(float %in)1656 %fneg.fabs = fneg float %fabs1657 %result = call float @llvm.log2.f32(float %fneg.fabs)1658 ret float %result1659}1660 1661define float @v_log2_fneg_f32(float %in) {1662; SI-SDAG-LABEL: v_log2_fneg_f32:1663; SI-SDAG: ; %bb.0:1664; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1665; SI-SDAG-NEXT: s_mov_b32 s4, 0x808000001666; SI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s4, v01667; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc1668; SI-SDAG-NEXT: v_ldexp_f32_e64 v0, -v0, v21669; SI-SDAG-NEXT: v_log_f32_e32 v0, v01670; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001671; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1672; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11673; SI-SDAG-NEXT: s_setpc_b64 s[30:31]1674;1675; SI-GISEL-LABEL: v_log2_fneg_f32:1676; SI-GISEL: ; %bb.0:1677; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1678; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000001679; SI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, -v0, v11680; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1681; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11682; SI-GISEL-NEXT: v_ldexp_f32_e64 v0, -v0, v11683; SI-GISEL-NEXT: v_log_f32_e32 v0, v01684; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000001685; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1686; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11687; SI-GISEL-NEXT: s_setpc_b64 s[30:31]1688;1689; VI-SDAG-LABEL: v_log2_fneg_f32:1690; VI-SDAG: ; %bb.0:1691; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1692; VI-SDAG-NEXT: s_mov_b32 s4, 0x808000001693; VI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s4, v01694; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc1695; VI-SDAG-NEXT: v_ldexp_f32 v0, -v0, v21696; VI-SDAG-NEXT: v_log_f32_e32 v0, v01697; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001698; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1699; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11700; VI-SDAG-NEXT: s_setpc_b64 s[30:31]1701;1702; VI-GISEL-LABEL: v_log2_fneg_f32:1703; VI-GISEL: ; %bb.0:1704; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1705; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000001706; VI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, -v0, v11707; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1708; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11709; VI-GISEL-NEXT: v_ldexp_f32 v0, -v0, v11710; VI-GISEL-NEXT: v_log_f32_e32 v0, v01711; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000001712; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1713; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11714; VI-GISEL-NEXT: s_setpc_b64 s[30:31]1715;1716; GFX900-SDAG-LABEL: v_log2_fneg_f32:1717; GFX900-SDAG: ; %bb.0:1718; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1719; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x808000001720; GFX900-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s4, v01721; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc1722; GFX900-SDAG-NEXT: v_ldexp_f32 v0, -v0, v21723; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v01724; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001725; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1726; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11727; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]1728;1729; GFX900-GISEL-LABEL: v_log2_fneg_f32:1730; GFX900-GISEL: ; %bb.0:1731; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1732; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000001733; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, -v0, v11734; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1735; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11736; GFX900-GISEL-NEXT: v_ldexp_f32 v0, -v0, v11737; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v01738; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000001739; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1740; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11741; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]1742;1743; GFX1100-SDAG-LABEL: v_log2_fneg_f32:1744; GFX1100-SDAG: ; %bb.0:1745; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1746; GFX1100-SDAG-NEXT: v_cmp_lt_f32_e32 vcc_lo, 0x80800000, v01747; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc_lo1748; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo1749; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1750; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, -v0, v21751; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v01752; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)1753; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11754; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]1755;1756; GFX1100-GISEL-LABEL: v_log2_fneg_f32:1757; GFX1100-GISEL: ; %bb.0:1758; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1759; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s0, 0x800000, -v01760; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1761; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s01762; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11763; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)1764; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, -v0, v11765; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, s01766; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v01767; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)1768; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11769; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31]1770;1771; R600-LABEL: v_log2_fneg_f32:1772; R600: ; %bb.0:1773; R600-NEXT: CF_END1774; R600-NEXT: PAD1775;1776; CM-LABEL: v_log2_fneg_f32:1777; CM: ; %bb.0:1778; CM-NEXT: CF_END1779; CM-NEXT: PAD1780 %fneg = fneg float %in1781 %result = call float @llvm.log2.f32(float %fneg)1782 ret float %result1783}1784 1785define float @v_log2_f32_fast(float %in) {1786; SI-SDAG-LABEL: v_log2_f32_fast:1787; SI-SDAG: ; %bb.0:1788; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1789; SI-SDAG-NEXT: s_mov_b32 s4, 0x8000001790; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v01791; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc1792; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v21793; SI-SDAG-NEXT: v_log_f32_e32 v0, v01794; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001795; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1796; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11797; SI-SDAG-NEXT: s_setpc_b64 s[30:31]1798;1799; SI-GISEL-LABEL: v_log2_f32_fast:1800; SI-GISEL: ; %bb.0:1801; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1802; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000001803; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v11804; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1805; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11806; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v11807; SI-GISEL-NEXT: v_log_f32_e32 v0, v01808; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000001809; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1810; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11811; SI-GISEL-NEXT: s_setpc_b64 s[30:31]1812;1813; VI-SDAG-LABEL: v_log2_f32_fast:1814; VI-SDAG: ; %bb.0:1815; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1816; VI-SDAG-NEXT: s_mov_b32 s4, 0x8000001817; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v01818; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc1819; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v21820; VI-SDAG-NEXT: v_log_f32_e32 v0, v01821; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001822; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1823; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11824; VI-SDAG-NEXT: s_setpc_b64 s[30:31]1825;1826; VI-GISEL-LABEL: v_log2_f32_fast:1827; VI-GISEL: ; %bb.0:1828; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1829; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000001830; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v11831; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1832; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11833; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v11834; VI-GISEL-NEXT: v_log_f32_e32 v0, v01835; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000001836; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1837; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11838; VI-GISEL-NEXT: s_setpc_b64 s[30:31]1839;1840; GFX900-SDAG-LABEL: v_log2_f32_fast:1841; GFX900-SDAG: ; %bb.0:1842; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1843; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x8000001844; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v01845; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc1846; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v21847; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v01848; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001849; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1850; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11851; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]1852;1853; GFX900-GISEL-LABEL: v_log2_f32_fast:1854; GFX900-GISEL: ; %bb.0:1855; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1856; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000001857; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v11858; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1859; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11860; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v11861; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v01862; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000001863; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1864; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11865; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]1866;1867; GFX1100-SDAG-LABEL: v_log2_f32_fast:1868; GFX1100-SDAG: ; %bb.0:1869; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1870; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v01871; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc_lo1872; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo1873; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1874; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v21875; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v01876; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)1877; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11878; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]1879;1880; GFX1100-GISEL-LABEL: v_log2_f32_fast:1881; GFX1100-GISEL: ; %bb.0:1882; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1883; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v01884; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo1885; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1886; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11887; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v11888; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo1889; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)1890; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v01891; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)1892; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11893; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31]1894;1895; R600-LABEL: v_log2_f32_fast:1896; R600: ; %bb.0:1897; R600-NEXT: CF_END1898; R600-NEXT: PAD1899;1900; CM-LABEL: v_log2_f32_fast:1901; CM: ; %bb.0:1902; CM-NEXT: CF_END1903; CM-NEXT: PAD1904 %result = call fast float @llvm.log2.f32(float %in)1905 ret float %result1906}1907 1908define float @v_log2_f32_unsafe_math_attr(float %in) {1909; SI-SDAG-LABEL: v_log2_f32_unsafe_math_attr:1910; SI-SDAG: ; %bb.0:1911; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1912; SI-SDAG-NEXT: s_mov_b32 s4, 0x8000001913; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v01914; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc1915; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v21916; SI-SDAG-NEXT: v_log_f32_e32 v0, v01917; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001918; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1919; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11920; SI-SDAG-NEXT: s_setpc_b64 s[30:31]1921;1922; SI-GISEL-LABEL: v_log2_f32_unsafe_math_attr:1923; SI-GISEL: ; %bb.0:1924; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1925; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000001926; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v11927; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1928; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11929; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v11930; SI-GISEL-NEXT: v_log_f32_e32 v0, v01931; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000001932; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1933; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11934; SI-GISEL-NEXT: s_setpc_b64 s[30:31]1935;1936; VI-SDAG-LABEL: v_log2_f32_unsafe_math_attr:1937; VI-SDAG: ; %bb.0:1938; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1939; VI-SDAG-NEXT: s_mov_b32 s4, 0x8000001940; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v01941; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc1942; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v21943; VI-SDAG-NEXT: v_log_f32_e32 v0, v01944; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001945; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1946; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11947; VI-SDAG-NEXT: s_setpc_b64 s[30:31]1948;1949; VI-GISEL-LABEL: v_log2_f32_unsafe_math_attr:1950; VI-GISEL: ; %bb.0:1951; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1952; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000001953; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v11954; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1955; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11956; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v11957; VI-GISEL-NEXT: v_log_f32_e32 v0, v01958; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000001959; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1960; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11961; VI-GISEL-NEXT: s_setpc_b64 s[30:31]1962;1963; GFX900-SDAG-LABEL: v_log2_f32_unsafe_math_attr:1964; GFX900-SDAG: ; %bb.0:1965; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1966; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x8000001967; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v01968; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc1969; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v21970; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v01971; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000001972; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1973; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v11974; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]1975;1976; GFX900-GISEL-LABEL: v_log2_f32_unsafe_math_attr:1977; GFX900-GISEL: ; %bb.0:1978; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1979; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000001980; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v11981; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc1982; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v11983; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v11984; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v01985; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000001986; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc1987; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v11988; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]1989;1990; GFX1100-SDAG-LABEL: v_log2_f32_unsafe_math_attr:1991; GFX1100-SDAG: ; %bb.0:1992; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1993; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v01994; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc_lo1995; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo1996; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1997; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v21998; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v01999; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)2000; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12001; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]2002;2003; GFX1100-GISEL-LABEL: v_log2_f32_unsafe_math_attr:2004; GFX1100-GISEL: ; %bb.0:2005; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2006; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v02007; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo2008; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2009; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12010; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v12011; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo2012; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)2013; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v02014; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)2015; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12016; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31]2017;2018; R600-LABEL: v_log2_f32_unsafe_math_attr:2019; R600: ; %bb.0:2020; R600-NEXT: CF_END2021; R600-NEXT: PAD2022;2023; CM-LABEL: v_log2_f32_unsafe_math_attr:2024; CM: ; %bb.0:2025; CM-NEXT: CF_END2026; CM-NEXT: PAD2027 %result = call float @llvm.log2.f32(float %in)2028 ret float %result2029}2030 2031define float @v_log2_f32_ninf(float %in) {2032; SI-SDAG-LABEL: v_log2_f32_ninf:2033; SI-SDAG: ; %bb.0:2034; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2035; SI-SDAG-NEXT: s_mov_b32 s4, 0x8000002036; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v02037; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2038; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v22039; SI-SDAG-NEXT: v_log_f32_e32 v0, v02040; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002041; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2042; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12043; SI-SDAG-NEXT: s_setpc_b64 s[30:31]2044;2045; SI-GISEL-LABEL: v_log2_f32_ninf:2046; SI-GISEL: ; %bb.0:2047; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2048; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002049; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v12050; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2051; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12052; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v12053; SI-GISEL-NEXT: v_log_f32_e32 v0, v02054; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002055; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2056; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12057; SI-GISEL-NEXT: s_setpc_b64 s[30:31]2058;2059; VI-SDAG-LABEL: v_log2_f32_ninf:2060; VI-SDAG: ; %bb.0:2061; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2062; VI-SDAG-NEXT: s_mov_b32 s4, 0x8000002063; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v02064; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2065; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v22066; VI-SDAG-NEXT: v_log_f32_e32 v0, v02067; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002068; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2069; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12070; VI-SDAG-NEXT: s_setpc_b64 s[30:31]2071;2072; VI-GISEL-LABEL: v_log2_f32_ninf:2073; VI-GISEL: ; %bb.0:2074; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2075; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002076; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v12077; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2078; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12079; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v12080; VI-GISEL-NEXT: v_log_f32_e32 v0, v02081; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002082; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2083; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12084; VI-GISEL-NEXT: s_setpc_b64 s[30:31]2085;2086; GFX900-SDAG-LABEL: v_log2_f32_ninf:2087; GFX900-SDAG: ; %bb.0:2088; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2089; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x8000002090; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v02091; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2092; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v22093; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v02094; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002095; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2096; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12097; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]2098;2099; GFX900-GISEL-LABEL: v_log2_f32_ninf:2100; GFX900-GISEL: ; %bb.0:2101; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2102; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002103; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v12104; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2105; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12106; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v12107; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v02108; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002109; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2110; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12111; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]2112;2113; GFX1100-SDAG-LABEL: v_log2_f32_ninf:2114; GFX1100-SDAG: ; %bb.0:2115; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2116; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v02117; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc_lo2118; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo2119; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2120; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v22121; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v02122; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)2123; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12124; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]2125;2126; GFX1100-GISEL-LABEL: v_log2_f32_ninf:2127; GFX1100-GISEL: ; %bb.0:2128; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2129; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v02130; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo2131; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2132; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12133; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v12134; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo2135; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)2136; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v02137; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)2138; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12139; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31]2140;2141; R600-LABEL: v_log2_f32_ninf:2142; R600: ; %bb.0:2143; R600-NEXT: CF_END2144; R600-NEXT: PAD2145;2146; CM-LABEL: v_log2_f32_ninf:2147; CM: ; %bb.0:2148; CM-NEXT: CF_END2149; CM-NEXT: PAD2150 %result = call ninf float @llvm.log2.f32(float %in)2151 ret float %result2152}2153 2154define float @v_log2_f32_afn(float %in) {2155; SI-SDAG-LABEL: v_log2_f32_afn:2156; SI-SDAG: ; %bb.0:2157; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2158; SI-SDAG-NEXT: s_mov_b32 s4, 0x8000002159; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v02160; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2161; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v22162; SI-SDAG-NEXT: v_log_f32_e32 v0, v02163; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002164; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2165; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12166; SI-SDAG-NEXT: s_setpc_b64 s[30:31]2167;2168; SI-GISEL-LABEL: v_log2_f32_afn:2169; SI-GISEL: ; %bb.0:2170; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2171; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002172; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v12173; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2174; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12175; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v12176; SI-GISEL-NEXT: v_log_f32_e32 v0, v02177; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002178; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2179; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12180; SI-GISEL-NEXT: s_setpc_b64 s[30:31]2181;2182; VI-SDAG-LABEL: v_log2_f32_afn:2183; VI-SDAG: ; %bb.0:2184; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2185; VI-SDAG-NEXT: s_mov_b32 s4, 0x8000002186; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v02187; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2188; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v22189; VI-SDAG-NEXT: v_log_f32_e32 v0, v02190; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002191; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2192; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12193; VI-SDAG-NEXT: s_setpc_b64 s[30:31]2194;2195; VI-GISEL-LABEL: v_log2_f32_afn:2196; VI-GISEL: ; %bb.0:2197; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2198; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002199; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v12200; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2201; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12202; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v12203; VI-GISEL-NEXT: v_log_f32_e32 v0, v02204; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002205; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2206; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12207; VI-GISEL-NEXT: s_setpc_b64 s[30:31]2208;2209; GFX900-SDAG-LABEL: v_log2_f32_afn:2210; GFX900-SDAG: ; %bb.0:2211; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2212; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x8000002213; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v02214; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2215; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v22216; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v02217; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002218; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2219; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12220; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]2221;2222; GFX900-GISEL-LABEL: v_log2_f32_afn:2223; GFX900-GISEL: ; %bb.0:2224; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2225; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002226; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v12227; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2228; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12229; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v12230; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v02231; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002232; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2233; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12234; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]2235;2236; GFX1100-SDAG-LABEL: v_log2_f32_afn:2237; GFX1100-SDAG: ; %bb.0:2238; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2239; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v02240; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc_lo2241; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo2242; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2243; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v22244; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v02245; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)2246; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12247; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]2248;2249; GFX1100-GISEL-LABEL: v_log2_f32_afn:2250; GFX1100-GISEL: ; %bb.0:2251; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2252; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v02253; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo2254; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2255; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12256; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v12257; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo2258; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)2259; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v02260; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)2261; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12262; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31]2263;2264; R600-LABEL: v_log2_f32_afn:2265; R600: ; %bb.0:2266; R600-NEXT: CF_END2267; R600-NEXT: PAD2268;2269; CM-LABEL: v_log2_f32_afn:2270; CM: ; %bb.0:2271; CM-NEXT: CF_END2272; CM-NEXT: PAD2273 %result = call afn float @llvm.log2.f32(float %in)2274 ret float %result2275}2276 2277define float @v_log2_f32_afn_daz(float %in) #0 {2278; GFX689-LABEL: v_log2_f32_afn_daz:2279; GFX689: ; %bb.0:2280; GFX689-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2281; GFX689-NEXT: v_log_f32_e32 v0, v02282; GFX689-NEXT: s_setpc_b64 s[30:31]2283;2284; GFX1100-LABEL: v_log2_f32_afn_daz:2285; GFX1100: ; %bb.0:2286; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2287; GFX1100-NEXT: v_log_f32_e32 v0, v02288; GFX1100-NEXT: s_setpc_b64 s[30:31]2289;2290; R600-LABEL: v_log2_f32_afn_daz:2291; R600: ; %bb.0:2292; R600-NEXT: CF_END2293; R600-NEXT: PAD2294;2295; CM-LABEL: v_log2_f32_afn_daz:2296; CM: ; %bb.0:2297; CM-NEXT: CF_END2298; CM-NEXT: PAD2299 %result = call afn float @llvm.log2.f32(float %in)2300 ret float %result2301}2302 2303define float @v_log2_f32_afn_dynamic(float %in) #1 {2304; SI-SDAG-LABEL: v_log2_f32_afn_dynamic:2305; SI-SDAG: ; %bb.0:2306; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2307; SI-SDAG-NEXT: s_mov_b32 s4, 0x8000002308; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v02309; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2310; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v22311; SI-SDAG-NEXT: v_log_f32_e32 v0, v02312; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002313; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2314; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12315; SI-SDAG-NEXT: s_setpc_b64 s[30:31]2316;2317; SI-GISEL-LABEL: v_log2_f32_afn_dynamic:2318; SI-GISEL: ; %bb.0:2319; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2320; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002321; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v12322; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2323; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12324; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v12325; SI-GISEL-NEXT: v_log_f32_e32 v0, v02326; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002327; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2328; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12329; SI-GISEL-NEXT: s_setpc_b64 s[30:31]2330;2331; VI-SDAG-LABEL: v_log2_f32_afn_dynamic:2332; VI-SDAG: ; %bb.0:2333; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2334; VI-SDAG-NEXT: s_mov_b32 s4, 0x8000002335; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v02336; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2337; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v22338; VI-SDAG-NEXT: v_log_f32_e32 v0, v02339; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002340; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2341; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12342; VI-SDAG-NEXT: s_setpc_b64 s[30:31]2343;2344; VI-GISEL-LABEL: v_log2_f32_afn_dynamic:2345; VI-GISEL: ; %bb.0:2346; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2347; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002348; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v12349; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2350; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12351; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v12352; VI-GISEL-NEXT: v_log_f32_e32 v0, v02353; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002354; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2355; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12356; VI-GISEL-NEXT: s_setpc_b64 s[30:31]2357;2358; GFX900-SDAG-LABEL: v_log2_f32_afn_dynamic:2359; GFX900-SDAG: ; %bb.0:2360; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2361; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x8000002362; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v02363; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2364; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v22365; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v02366; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002367; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2368; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12369; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]2370;2371; GFX900-GISEL-LABEL: v_log2_f32_afn_dynamic:2372; GFX900-GISEL: ; %bb.0:2373; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2374; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002375; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v12376; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2377; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12378; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v12379; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v02380; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002381; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2382; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12383; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]2384;2385; GFX1100-SDAG-LABEL: v_log2_f32_afn_dynamic:2386; GFX1100-SDAG: ; %bb.0:2387; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2388; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v02389; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc_lo2390; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo2391; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2392; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v22393; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v02394; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)2395; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12396; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]2397;2398; GFX1100-GISEL-LABEL: v_log2_f32_afn_dynamic:2399; GFX1100-GISEL: ; %bb.0:2400; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2401; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v02402; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo2403; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2404; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12405; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v12406; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo2407; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)2408; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v02409; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)2410; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12411; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31]2412;2413; R600-LABEL: v_log2_f32_afn_dynamic:2414; R600: ; %bb.0:2415; R600-NEXT: CF_END2416; R600-NEXT: PAD2417;2418; CM-LABEL: v_log2_f32_afn_dynamic:2419; CM: ; %bb.0:2420; CM-NEXT: CF_END2421; CM-NEXT: PAD2422 %result = call afn float @llvm.log2.f32(float %in)2423 ret float %result2424}2425 2426define float @v_fabs_log2_f32_afn(float %in) {2427; SI-SDAG-LABEL: v_fabs_log2_f32_afn:2428; SI-SDAG: ; %bb.0:2429; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2430; SI-SDAG-NEXT: s_mov_b32 s4, 0x8000002431; SI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s42432; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2433; SI-SDAG-NEXT: v_ldexp_f32_e64 v0, |v0|, v22434; SI-SDAG-NEXT: v_log_f32_e32 v0, v02435; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002436; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2437; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12438; SI-SDAG-NEXT: s_setpc_b64 s[30:31]2439;2440; SI-GISEL-LABEL: v_fabs_log2_f32_afn:2441; SI-GISEL: ; %bb.0:2442; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2443; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002444; SI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v12445; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2446; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12447; SI-GISEL-NEXT: v_ldexp_f32_e64 v0, |v0|, v12448; SI-GISEL-NEXT: v_log_f32_e32 v0, v02449; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002450; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2451; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12452; SI-GISEL-NEXT: s_setpc_b64 s[30:31]2453;2454; VI-SDAG-LABEL: v_fabs_log2_f32_afn:2455; VI-SDAG: ; %bb.0:2456; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2457; VI-SDAG-NEXT: s_mov_b32 s4, 0x8000002458; VI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s42459; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2460; VI-SDAG-NEXT: v_ldexp_f32 v0, |v0|, v22461; VI-SDAG-NEXT: v_log_f32_e32 v0, v02462; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002463; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2464; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12465; VI-SDAG-NEXT: s_setpc_b64 s[30:31]2466;2467; VI-GISEL-LABEL: v_fabs_log2_f32_afn:2468; VI-GISEL: ; %bb.0:2469; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2470; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002471; VI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v12472; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2473; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12474; VI-GISEL-NEXT: v_ldexp_f32 v0, |v0|, v12475; VI-GISEL-NEXT: v_log_f32_e32 v0, v02476; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002477; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2478; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12479; VI-GISEL-NEXT: s_setpc_b64 s[30:31]2480;2481; GFX900-SDAG-LABEL: v_fabs_log2_f32_afn:2482; GFX900-SDAG: ; %bb.0:2483; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2484; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x8000002485; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s42486; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2487; GFX900-SDAG-NEXT: v_ldexp_f32 v0, |v0|, v22488; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v02489; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002490; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2491; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12492; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]2493;2494; GFX900-GISEL-LABEL: v_fabs_log2_f32_afn:2495; GFX900-GISEL: ; %bb.0:2496; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2497; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002498; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v12499; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2500; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12501; GFX900-GISEL-NEXT: v_ldexp_f32 v0, |v0|, v12502; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v02503; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002504; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2505; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12506; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]2507;2508; GFX1100-SDAG-LABEL: v_fabs_log2_f32_afn:2509; GFX1100-SDAG: ; %bb.0:2510; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2511; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s0, 0x800000, |v0|2512; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2513; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, s02514; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, s02515; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, |v0|, v22516; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1)2517; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v02518; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)2519; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12520; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]2521;2522; GFX1100-GISEL-LABEL: v_fabs_log2_f32_afn:2523; GFX1100-GISEL: ; %bb.0:2524; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2525; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s0, 0x800000, |v0|2526; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2527; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s02528; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12529; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2530; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, |v0|, v12531; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, s02532; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v02533; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)2534; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12535; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31]2536;2537; R600-LABEL: v_fabs_log2_f32_afn:2538; R600: ; %bb.0:2539; R600-NEXT: CF_END2540; R600-NEXT: PAD2541;2542; CM-LABEL: v_fabs_log2_f32_afn:2543; CM: ; %bb.0:2544; CM-NEXT: CF_END2545; CM-NEXT: PAD2546 %fabs = call float @llvm.fabs.f32(float %in)2547 %result = call afn float @llvm.log2.f32(float %fabs)2548 ret float %result2549}2550 2551define float @v_log2_f32_daz(float %in) #0 {2552; GFX689-LABEL: v_log2_f32_daz:2553; GFX689: ; %bb.0:2554; GFX689-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2555; GFX689-NEXT: v_log_f32_e32 v0, v02556; GFX689-NEXT: s_setpc_b64 s[30:31]2557;2558; GFX1100-LABEL: v_log2_f32_daz:2559; GFX1100: ; %bb.0:2560; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2561; GFX1100-NEXT: v_log_f32_e32 v0, v02562; GFX1100-NEXT: s_setpc_b64 s[30:31]2563;2564; R600-LABEL: v_log2_f32_daz:2565; R600: ; %bb.0:2566; R600-NEXT: CF_END2567; R600-NEXT: PAD2568;2569; CM-LABEL: v_log2_f32_daz:2570; CM: ; %bb.0:2571; CM-NEXT: CF_END2572; CM-NEXT: PAD2573 %result = call float @llvm.log2.f32(float %in)2574 ret float %result2575}2576 2577define float @v_log2_f32_nnan(float %in) {2578; SI-SDAG-LABEL: v_log2_f32_nnan:2579; SI-SDAG: ; %bb.0:2580; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2581; SI-SDAG-NEXT: s_mov_b32 s4, 0x8000002582; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v02583; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2584; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v22585; SI-SDAG-NEXT: v_log_f32_e32 v0, v02586; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002587; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2588; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12589; SI-SDAG-NEXT: s_setpc_b64 s[30:31]2590;2591; SI-GISEL-LABEL: v_log2_f32_nnan:2592; SI-GISEL: ; %bb.0:2593; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2594; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002595; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v12596; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2597; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12598; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v12599; SI-GISEL-NEXT: v_log_f32_e32 v0, v02600; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002601; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2602; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12603; SI-GISEL-NEXT: s_setpc_b64 s[30:31]2604;2605; VI-SDAG-LABEL: v_log2_f32_nnan:2606; VI-SDAG: ; %bb.0:2607; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2608; VI-SDAG-NEXT: s_mov_b32 s4, 0x8000002609; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v02610; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2611; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v22612; VI-SDAG-NEXT: v_log_f32_e32 v0, v02613; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002614; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2615; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12616; VI-SDAG-NEXT: s_setpc_b64 s[30:31]2617;2618; VI-GISEL-LABEL: v_log2_f32_nnan:2619; VI-GISEL: ; %bb.0:2620; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2621; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002622; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v12623; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2624; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12625; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v12626; VI-GISEL-NEXT: v_log_f32_e32 v0, v02627; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002628; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2629; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12630; VI-GISEL-NEXT: s_setpc_b64 s[30:31]2631;2632; GFX900-SDAG-LABEL: v_log2_f32_nnan:2633; GFX900-SDAG: ; %bb.0:2634; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2635; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x8000002636; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v02637; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2638; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v22639; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v02640; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002641; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2642; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12643; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]2644;2645; GFX900-GISEL-LABEL: v_log2_f32_nnan:2646; GFX900-GISEL: ; %bb.0:2647; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2648; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002649; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v12650; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2651; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12652; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v12653; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v02654; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002655; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2656; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12657; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]2658;2659; GFX1100-SDAG-LABEL: v_log2_f32_nnan:2660; GFX1100-SDAG: ; %bb.0:2661; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2662; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v02663; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc_lo2664; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo2665; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2666; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v22667; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v02668; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)2669; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12670; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]2671;2672; GFX1100-GISEL-LABEL: v_log2_f32_nnan:2673; GFX1100-GISEL: ; %bb.0:2674; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2675; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v02676; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo2677; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2678; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12679; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v12680; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo2681; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)2682; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v02683; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)2684; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12685; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31]2686;2687; R600-LABEL: v_log2_f32_nnan:2688; R600: ; %bb.0:2689; R600-NEXT: CF_END2690; R600-NEXT: PAD2691;2692; CM-LABEL: v_log2_f32_nnan:2693; CM: ; %bb.0:2694; CM-NEXT: CF_END2695; CM-NEXT: PAD2696 %result = call nnan float @llvm.log2.f32(float %in)2697 ret float %result2698}2699 2700define float @v_log2_f32_nnan_daz(float %in) #0 {2701; GFX689-LABEL: v_log2_f32_nnan_daz:2702; GFX689: ; %bb.0:2703; GFX689-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2704; GFX689-NEXT: v_log_f32_e32 v0, v02705; GFX689-NEXT: s_setpc_b64 s[30:31]2706;2707; GFX1100-LABEL: v_log2_f32_nnan_daz:2708; GFX1100: ; %bb.0:2709; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2710; GFX1100-NEXT: v_log_f32_e32 v0, v02711; GFX1100-NEXT: s_setpc_b64 s[30:31]2712;2713; R600-LABEL: v_log2_f32_nnan_daz:2714; R600: ; %bb.0:2715; R600-NEXT: CF_END2716; R600-NEXT: PAD2717;2718; CM-LABEL: v_log2_f32_nnan_daz:2719; CM: ; %bb.0:2720; CM-NEXT: CF_END2721; CM-NEXT: PAD2722 %result = call nnan float @llvm.log2.f32(float %in)2723 ret float %result2724}2725 2726define float @v_log2_f32_nnan_dynamic(float %in) #1 {2727; SI-SDAG-LABEL: v_log2_f32_nnan_dynamic:2728; SI-SDAG: ; %bb.0:2729; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2730; SI-SDAG-NEXT: s_mov_b32 s4, 0x8000002731; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v02732; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2733; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v22734; SI-SDAG-NEXT: v_log_f32_e32 v0, v02735; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002736; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2737; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12738; SI-SDAG-NEXT: s_setpc_b64 s[30:31]2739;2740; SI-GISEL-LABEL: v_log2_f32_nnan_dynamic:2741; SI-GISEL: ; %bb.0:2742; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2743; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002744; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v12745; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2746; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12747; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v12748; SI-GISEL-NEXT: v_log_f32_e32 v0, v02749; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002750; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2751; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12752; SI-GISEL-NEXT: s_setpc_b64 s[30:31]2753;2754; VI-SDAG-LABEL: v_log2_f32_nnan_dynamic:2755; VI-SDAG: ; %bb.0:2756; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2757; VI-SDAG-NEXT: s_mov_b32 s4, 0x8000002758; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v02759; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2760; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v22761; VI-SDAG-NEXT: v_log_f32_e32 v0, v02762; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002763; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2764; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12765; VI-SDAG-NEXT: s_setpc_b64 s[30:31]2766;2767; VI-GISEL-LABEL: v_log2_f32_nnan_dynamic:2768; VI-GISEL: ; %bb.0:2769; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2770; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002771; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v12772; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2773; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12774; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v12775; VI-GISEL-NEXT: v_log_f32_e32 v0, v02776; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002777; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2778; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12779; VI-GISEL-NEXT: s_setpc_b64 s[30:31]2780;2781; GFX900-SDAG-LABEL: v_log2_f32_nnan_dynamic:2782; GFX900-SDAG: ; %bb.0:2783; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2784; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x8000002785; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v02786; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2787; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v22788; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v02789; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002790; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2791; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12792; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]2793;2794; GFX900-GISEL-LABEL: v_log2_f32_nnan_dynamic:2795; GFX900-GISEL: ; %bb.0:2796; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2797; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002798; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v12799; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2800; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12801; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v12802; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v02803; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002804; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2805; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12806; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]2807;2808; GFX1100-SDAG-LABEL: v_log2_f32_nnan_dynamic:2809; GFX1100-SDAG: ; %bb.0:2810; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2811; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v02812; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc_lo2813; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo2814; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2815; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v22816; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v02817; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)2818; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12819; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]2820;2821; GFX1100-GISEL-LABEL: v_log2_f32_nnan_dynamic:2822; GFX1100-GISEL: ; %bb.0:2823; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2824; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v02825; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo2826; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2827; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12828; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v12829; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo2830; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)2831; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v02832; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)2833; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12834; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31]2835;2836; R600-LABEL: v_log2_f32_nnan_dynamic:2837; R600: ; %bb.0:2838; R600-NEXT: CF_END2839; R600-NEXT: PAD2840;2841; CM-LABEL: v_log2_f32_nnan_dynamic:2842; CM: ; %bb.0:2843; CM-NEXT: CF_END2844; CM-NEXT: PAD2845 %result = call nnan float @llvm.log2.f32(float %in)2846 ret float %result2847}2848 2849define float @v_log2_f32_ninf_daz(float %in) #0 {2850; GFX689-LABEL: v_log2_f32_ninf_daz:2851; GFX689: ; %bb.0:2852; GFX689-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2853; GFX689-NEXT: v_log_f32_e32 v0, v02854; GFX689-NEXT: s_setpc_b64 s[30:31]2855;2856; GFX1100-LABEL: v_log2_f32_ninf_daz:2857; GFX1100: ; %bb.0:2858; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2859; GFX1100-NEXT: v_log_f32_e32 v0, v02860; GFX1100-NEXT: s_setpc_b64 s[30:31]2861;2862; R600-LABEL: v_log2_f32_ninf_daz:2863; R600: ; %bb.0:2864; R600-NEXT: CF_END2865; R600-NEXT: PAD2866;2867; CM-LABEL: v_log2_f32_ninf_daz:2868; CM: ; %bb.0:2869; CM-NEXT: CF_END2870; CM-NEXT: PAD2871 %result = call ninf float @llvm.log2.f32(float %in)2872 ret float %result2873}2874 2875define float @v_log2_f32_ninf_dynamic(float %in) #1 {2876; SI-SDAG-LABEL: v_log2_f32_ninf_dynamic:2877; SI-SDAG: ; %bb.0:2878; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2879; SI-SDAG-NEXT: s_mov_b32 s4, 0x8000002880; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v02881; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2882; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v22883; SI-SDAG-NEXT: v_log_f32_e32 v0, v02884; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002885; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2886; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12887; SI-SDAG-NEXT: s_setpc_b64 s[30:31]2888;2889; SI-GISEL-LABEL: v_log2_f32_ninf_dynamic:2890; SI-GISEL: ; %bb.0:2891; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2892; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002893; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v12894; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2895; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12896; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v12897; SI-GISEL-NEXT: v_log_f32_e32 v0, v02898; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002899; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2900; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12901; SI-GISEL-NEXT: s_setpc_b64 s[30:31]2902;2903; VI-SDAG-LABEL: v_log2_f32_ninf_dynamic:2904; VI-SDAG: ; %bb.0:2905; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2906; VI-SDAG-NEXT: s_mov_b32 s4, 0x8000002907; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v02908; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2909; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v22910; VI-SDAG-NEXT: v_log_f32_e32 v0, v02911; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002912; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2913; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12914; VI-SDAG-NEXT: s_setpc_b64 s[30:31]2915;2916; VI-GISEL-LABEL: v_log2_f32_ninf_dynamic:2917; VI-GISEL: ; %bb.0:2918; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2919; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002920; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v12921; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2922; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12923; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v12924; VI-GISEL-NEXT: v_log_f32_e32 v0, v02925; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002926; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2927; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12928; VI-GISEL-NEXT: s_setpc_b64 s[30:31]2929;2930; GFX900-SDAG-LABEL: v_log2_f32_ninf_dynamic:2931; GFX900-SDAG: ; %bb.0:2932; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2933; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x8000002934; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v02935; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc2936; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v22937; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v02938; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000002939; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2940; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12941; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]2942;2943; GFX900-GISEL-LABEL: v_log2_f32_ninf_dynamic:2944; GFX900-GISEL: ; %bb.0:2945; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2946; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000002947; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v12948; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc2949; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12950; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v12951; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v02952; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000002953; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc2954; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12955; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]2956;2957; GFX1100-SDAG-LABEL: v_log2_f32_ninf_dynamic:2958; GFX1100-SDAG: ; %bb.0:2959; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2960; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v02961; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc_lo2962; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo2963; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2964; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v22965; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v02966; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)2967; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v12968; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]2969;2970; GFX1100-GISEL-LABEL: v_log2_f32_ninf_dynamic:2971; GFX1100-GISEL: ; %bb.0:2972; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2973; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v02974; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo2975; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2976; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v12977; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v12978; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo2979; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)2980; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v02981; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)2982; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v12983; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31]2984;2985; R600-LABEL: v_log2_f32_ninf_dynamic:2986; R600: ; %bb.0:2987; R600-NEXT: CF_END2988; R600-NEXT: PAD2989;2990; CM-LABEL: v_log2_f32_ninf_dynamic:2991; CM: ; %bb.0:2992; CM-NEXT: CF_END2993; CM-NEXT: PAD2994 %result = call ninf float @llvm.log2.f32(float %in)2995 ret float %result2996}2997 2998define float @v_log2_f32_nnan_ninf(float %in) {2999; SI-SDAG-LABEL: v_log2_f32_nnan_ninf:3000; SI-SDAG: ; %bb.0:3001; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3002; SI-SDAG-NEXT: s_mov_b32 s4, 0x8000003003; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v03004; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc3005; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v23006; SI-SDAG-NEXT: v_log_f32_e32 v0, v03007; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000003008; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3009; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v13010; SI-SDAG-NEXT: s_setpc_b64 s[30:31]3011;3012; SI-GISEL-LABEL: v_log2_f32_nnan_ninf:3013; SI-GISEL: ; %bb.0:3014; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3015; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000003016; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v13017; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc3018; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v13019; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v13020; SI-GISEL-NEXT: v_log_f32_e32 v0, v03021; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000003022; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3023; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v13024; SI-GISEL-NEXT: s_setpc_b64 s[30:31]3025;3026; VI-SDAG-LABEL: v_log2_f32_nnan_ninf:3027; VI-SDAG: ; %bb.0:3028; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3029; VI-SDAG-NEXT: s_mov_b32 s4, 0x8000003030; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v03031; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc3032; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v23033; VI-SDAG-NEXT: v_log_f32_e32 v0, v03034; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000003035; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3036; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v13037; VI-SDAG-NEXT: s_setpc_b64 s[30:31]3038;3039; VI-GISEL-LABEL: v_log2_f32_nnan_ninf:3040; VI-GISEL: ; %bb.0:3041; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3042; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000003043; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v13044; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc3045; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v13046; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v13047; VI-GISEL-NEXT: v_log_f32_e32 v0, v03048; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000003049; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3050; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v13051; VI-GISEL-NEXT: s_setpc_b64 s[30:31]3052;3053; GFX900-SDAG-LABEL: v_log2_f32_nnan_ninf:3054; GFX900-SDAG: ; %bb.0:3055; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3056; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x8000003057; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v03058; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc3059; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v23060; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v03061; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000003062; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3063; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v13064; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]3065;3066; GFX900-GISEL-LABEL: v_log2_f32_nnan_ninf:3067; GFX900-GISEL: ; %bb.0:3068; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3069; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000003070; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v13071; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc3072; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v13073; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v13074; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v03075; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000003076; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3077; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v13078; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]3079;3080; GFX1100-SDAG-LABEL: v_log2_f32_nnan_ninf:3081; GFX1100-SDAG: ; %bb.0:3082; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3083; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v03084; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc_lo3085; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo3086; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)3087; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v23088; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v03089; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)3090; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v13091; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]3092;3093; GFX1100-GISEL-LABEL: v_log2_f32_nnan_ninf:3094; GFX1100-GISEL: ; %bb.0:3095; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3096; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v03097; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo3098; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)3099; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v13100; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v13101; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo3102; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)3103; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v03104; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)3105; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v13106; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31]3107;3108; R600-LABEL: v_log2_f32_nnan_ninf:3109; R600: ; %bb.0:3110; R600-NEXT: CF_END3111; R600-NEXT: PAD3112;3113; CM-LABEL: v_log2_f32_nnan_ninf:3114; CM: ; %bb.0:3115; CM-NEXT: CF_END3116; CM-NEXT: PAD3117 %result = call nnan ninf float @llvm.log2.f32(float %in)3118 ret float %result3119}3120 3121define float @v_log2_f32_nnan_ninf_daz(float %in) #0 {3122; GFX689-LABEL: v_log2_f32_nnan_ninf_daz:3123; GFX689: ; %bb.0:3124; GFX689-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3125; GFX689-NEXT: v_log_f32_e32 v0, v03126; GFX689-NEXT: s_setpc_b64 s[30:31]3127;3128; GFX1100-LABEL: v_log2_f32_nnan_ninf_daz:3129; GFX1100: ; %bb.0:3130; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3131; GFX1100-NEXT: v_log_f32_e32 v0, v03132; GFX1100-NEXT: s_setpc_b64 s[30:31]3133;3134; R600-LABEL: v_log2_f32_nnan_ninf_daz:3135; R600: ; %bb.0:3136; R600-NEXT: CF_END3137; R600-NEXT: PAD3138;3139; CM-LABEL: v_log2_f32_nnan_ninf_daz:3140; CM: ; %bb.0:3141; CM-NEXT: CF_END3142; CM-NEXT: PAD3143 %result = call nnan ninf float @llvm.log2.f32(float %in)3144 ret float %result3145}3146 3147define float @v_log2_f32_nnan_ninf_dynamic(float %in) #1 {3148; SI-SDAG-LABEL: v_log2_f32_nnan_ninf_dynamic:3149; SI-SDAG: ; %bb.0:3150; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3151; SI-SDAG-NEXT: s_mov_b32 s4, 0x8000003152; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v03153; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc3154; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v23155; SI-SDAG-NEXT: v_log_f32_e32 v0, v03156; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000003157; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3158; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v13159; SI-SDAG-NEXT: s_setpc_b64 s[30:31]3160;3161; SI-GISEL-LABEL: v_log2_f32_nnan_ninf_dynamic:3162; SI-GISEL: ; %bb.0:3163; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3164; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000003165; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v13166; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc3167; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v13168; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v13169; SI-GISEL-NEXT: v_log_f32_e32 v0, v03170; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000003171; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3172; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v13173; SI-GISEL-NEXT: s_setpc_b64 s[30:31]3174;3175; VI-SDAG-LABEL: v_log2_f32_nnan_ninf_dynamic:3176; VI-SDAG: ; %bb.0:3177; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3178; VI-SDAG-NEXT: s_mov_b32 s4, 0x8000003179; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v03180; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc3181; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v23182; VI-SDAG-NEXT: v_log_f32_e32 v0, v03183; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000003184; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3185; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v13186; VI-SDAG-NEXT: s_setpc_b64 s[30:31]3187;3188; VI-GISEL-LABEL: v_log2_f32_nnan_ninf_dynamic:3189; VI-GISEL: ; %bb.0:3190; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3191; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000003192; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v13193; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc3194; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v13195; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v13196; VI-GISEL-NEXT: v_log_f32_e32 v0, v03197; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000003198; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3199; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v13200; VI-GISEL-NEXT: s_setpc_b64 s[30:31]3201;3202; GFX900-SDAG-LABEL: v_log2_f32_nnan_ninf_dynamic:3203; GFX900-SDAG: ; %bb.0:3204; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3205; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x8000003206; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v03207; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc3208; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v23209; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v03210; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000003211; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3212; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v13213; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]3214;3215; GFX900-GISEL-LABEL: v_log2_f32_nnan_ninf_dynamic:3216; GFX900-GISEL: ; %bb.0:3217; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3218; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000003219; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v13220; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc3221; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v13222; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v13223; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v03224; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000003225; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3226; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v13227; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]3228;3229; GFX1100-SDAG-LABEL: v_log2_f32_nnan_ninf_dynamic:3230; GFX1100-SDAG: ; %bb.0:3231; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3232; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v03233; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc_lo3234; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo3235; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)3236; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v23237; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v03238; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)3239; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v13240; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]3241;3242; GFX1100-GISEL-LABEL: v_log2_f32_nnan_ninf_dynamic:3243; GFX1100-GISEL: ; %bb.0:3244; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3245; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v03246; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo3247; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)3248; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v13249; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v13250; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo3251; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)3252; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v03253; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)3254; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v13255; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31]3256;3257; R600-LABEL: v_log2_f32_nnan_ninf_dynamic:3258; R600: ; %bb.0:3259; R600-NEXT: CF_END3260; R600-NEXT: PAD3261;3262; CM-LABEL: v_log2_f32_nnan_ninf_dynamic:3263; CM: ; %bb.0:3264; CM-NEXT: CF_END3265; CM-NEXT: PAD3266 %result = call nnan ninf float @llvm.log2.f32(float %in)3267 ret float %result3268}3269 3270define float @v_log2_f32_fast_daz(float %in) #0 {3271; GFX689-LABEL: v_log2_f32_fast_daz:3272; GFX689: ; %bb.0:3273; GFX689-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3274; GFX689-NEXT: v_log_f32_e32 v0, v03275; GFX689-NEXT: s_setpc_b64 s[30:31]3276;3277; GFX1100-LABEL: v_log2_f32_fast_daz:3278; GFX1100: ; %bb.0:3279; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3280; GFX1100-NEXT: v_log_f32_e32 v0, v03281; GFX1100-NEXT: s_setpc_b64 s[30:31]3282;3283; R600-LABEL: v_log2_f32_fast_daz:3284; R600: ; %bb.0:3285; R600-NEXT: CF_END3286; R600-NEXT: PAD3287;3288; CM-LABEL: v_log2_f32_fast_daz:3289; CM: ; %bb.0:3290; CM-NEXT: CF_END3291; CM-NEXT: PAD3292 %result = call fast float @llvm.log2.f32(float %in)3293 ret float %result3294}3295 3296define float @v_log2_f32_dynamic_mode(float %in) #1 {3297; SI-SDAG-LABEL: v_log2_f32_dynamic_mode:3298; SI-SDAG: ; %bb.0:3299; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3300; SI-SDAG-NEXT: s_mov_b32 s4, 0x8000003301; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v03302; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc3303; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v23304; SI-SDAG-NEXT: v_log_f32_e32 v0, v03305; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000003306; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3307; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v13308; SI-SDAG-NEXT: s_setpc_b64 s[30:31]3309;3310; SI-GISEL-LABEL: v_log2_f32_dynamic_mode:3311; SI-GISEL: ; %bb.0:3312; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3313; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000003314; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v13315; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc3316; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v13317; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v13318; SI-GISEL-NEXT: v_log_f32_e32 v0, v03319; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000003320; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3321; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v13322; SI-GISEL-NEXT: s_setpc_b64 s[30:31]3323;3324; VI-SDAG-LABEL: v_log2_f32_dynamic_mode:3325; VI-SDAG: ; %bb.0:3326; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3327; VI-SDAG-NEXT: s_mov_b32 s4, 0x8000003328; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v03329; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc3330; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v23331; VI-SDAG-NEXT: v_log_f32_e32 v0, v03332; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000003333; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3334; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v13335; VI-SDAG-NEXT: s_setpc_b64 s[30:31]3336;3337; VI-GISEL-LABEL: v_log2_f32_dynamic_mode:3338; VI-GISEL: ; %bb.0:3339; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3340; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000003341; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v13342; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc3343; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v13344; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v13345; VI-GISEL-NEXT: v_log_f32_e32 v0, v03346; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000003347; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3348; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v13349; VI-GISEL-NEXT: s_setpc_b64 s[30:31]3350;3351; GFX900-SDAG-LABEL: v_log2_f32_dynamic_mode:3352; GFX900-SDAG: ; %bb.0:3353; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3354; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x8000003355; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v03356; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc3357; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v23358; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v03359; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000003360; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3361; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v13362; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]3363;3364; GFX900-GISEL-LABEL: v_log2_f32_dynamic_mode:3365; GFX900-GISEL: ; %bb.0:3366; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3367; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x8000003368; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v13369; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc3370; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v13371; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v13372; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v03373; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x420000003374; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3375; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v13376; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]3377;3378; GFX1100-SDAG-LABEL: v_log2_f32_dynamic_mode:3379; GFX1100-SDAG: ; %bb.0:3380; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3381; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v03382; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc_lo3383; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo3384; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)3385; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v23386; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v03387; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)3388; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v13389; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]3390;3391; GFX1100-GISEL-LABEL: v_log2_f32_dynamic_mode:3392; GFX1100-GISEL: ; %bb.0:3393; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3394; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v03395; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo3396; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)3397; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v13398; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v13399; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo3400; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2)3401; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v03402; GFX1100-GISEL-NEXT: s_waitcnt_depctr depctr_va_vdst(0)3403; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v13404; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31]3405;3406; R600-LABEL: v_log2_f32_dynamic_mode:3407; R600: ; %bb.0:3408; R600-NEXT: CF_END3409; R600-NEXT: PAD3410;3411; CM-LABEL: v_log2_f32_dynamic_mode:3412; CM: ; %bb.0:3413; CM-NEXT: CF_END3414; CM-NEXT: PAD3415 %result = call float @llvm.log2.f32(float %in)3416 ret float %result3417}3418 3419define float @v_log2_f32_undef() {3420; GFX689-LABEL: v_log2_f32_undef:3421; GFX689: ; %bb.0:3422; GFX689-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3423; GFX689-NEXT: s_setpc_b64 s[30:31]3424;3425; GFX1100-LABEL: v_log2_f32_undef:3426; GFX1100: ; %bb.0:3427; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3428; GFX1100-NEXT: s_setpc_b64 s[30:31]3429;3430; R600-LABEL: v_log2_f32_undef:3431; R600: ; %bb.0:3432; R600-NEXT: CF_END3433; R600-NEXT: PAD3434;3435; CM-LABEL: v_log2_f32_undef:3436; CM: ; %bb.0:3437; CM-NEXT: CF_END3438; CM-NEXT: PAD3439 %result = call float @llvm.log2.f32(float poison)3440 ret float %result3441}3442 3443define float @v_log2_f32_0() {3444; GFX689-SDAG-LABEL: v_log2_f32_0:3445; GFX689-SDAG: ; %bb.0:3446; GFX689-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3447; GFX689-SDAG-NEXT: v_log_f32_e32 v0, 03448; GFX689-SDAG-NEXT: v_add_f32_e32 v0, 0xc2000000, v03449; GFX689-SDAG-NEXT: s_setpc_b64 s[30:31]3450;3451; GFX689-GISEL-LABEL: v_log2_f32_0:3452; GFX689-GISEL: ; %bb.0:3453; GFX689-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3454; GFX689-GISEL-NEXT: v_mov_b32_e32 v0, 0xff8000003455; GFX689-GISEL-NEXT: s_setpc_b64 s[30:31]3456;3457; GFX1100-SDAG-LABEL: v_log2_f32_0:3458; GFX1100-SDAG: ; %bb.0:3459; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3460; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, 03461; GFX1100-SDAG-NEXT: s_waitcnt_depctr depctr_va_vdst(0)3462; GFX1100-SDAG-NEXT: v_add_f32_e32 v0, 0xc2000000, v03463; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31]3464;3465; GFX1100-GISEL-LABEL: v_log2_f32_0:3466; GFX1100-GISEL: ; %bb.0:3467; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3468; GFX1100-GISEL-NEXT: v_mov_b32_e32 v0, 0xff8000003469; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31]3470;3471; R600-LABEL: v_log2_f32_0:3472; R600: ; %bb.0:3473; R600-NEXT: CF_END3474; R600-NEXT: PAD3475;3476; CM-LABEL: v_log2_f32_0:3477; CM: ; %bb.0:3478; CM-NEXT: CF_END3479; CM-NEXT: PAD3480 %result = call float @llvm.log2.f32(float 0.0)3481 ret float %result3482}3483 3484define float @v_log2_f32_from_fpext_f16(i16 %src.i) {3485; GFX689-LABEL: v_log2_f32_from_fpext_f16:3486; GFX689: ; %bb.0:3487; GFX689-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3488; GFX689-NEXT: v_cvt_f32_f16_e32 v0, v03489; GFX689-NEXT: v_log_f32_e32 v0, v03490; GFX689-NEXT: s_setpc_b64 s[30:31]3491;3492; GFX1100-SDAG-TRUE16-LABEL: v_log2_f32_from_fpext_f16:3493; GFX1100-SDAG-TRUE16: ; %bb.0:3494; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3495; GFX1100-SDAG-TRUE16-NEXT: v_cvt_f32_f16_e32 v0, v0.l3496; GFX1100-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)3497; GFX1100-SDAG-TRUE16-NEXT: v_log_f32_e32 v0, v03498; GFX1100-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]3499;3500; GFX1100-SDAG-FAKE16-LABEL: v_log2_f32_from_fpext_f16:3501; GFX1100-SDAG-FAKE16: ; %bb.0:3502; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3503; GFX1100-SDAG-FAKE16-NEXT: v_cvt_f32_f16_e32 v0, v03504; GFX1100-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)3505; GFX1100-SDAG-FAKE16-NEXT: v_log_f32_e32 v0, v03506; GFX1100-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]3507;3508; GFX1100-GISEL-TRUE16-LABEL: v_log2_f32_from_fpext_f16:3509; GFX1100-GISEL-TRUE16: ; %bb.0:3510; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3511; GFX1100-GISEL-TRUE16-NEXT: v_cvt_f32_f16_e32 v0, v0.l3512; GFX1100-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)3513; GFX1100-GISEL-TRUE16-NEXT: v_log_f32_e32 v0, v03514; GFX1100-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]3515;3516; GFX1100-GISEL-FAKE16-LABEL: v_log2_f32_from_fpext_f16:3517; GFX1100-GISEL-FAKE16: ; %bb.0:3518; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3519; GFX1100-GISEL-FAKE16-NEXT: v_cvt_f32_f16_e32 v0, v03520; GFX1100-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)3521; GFX1100-GISEL-FAKE16-NEXT: v_log_f32_e32 v0, v03522; GFX1100-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]3523;3524; R600-LABEL: v_log2_f32_from_fpext_f16:3525; R600: ; %bb.0:3526; R600-NEXT: CF_END3527; R600-NEXT: PAD3528;3529; CM-LABEL: v_log2_f32_from_fpext_f16:3530; CM: ; %bb.0:3531; CM-NEXT: CF_END3532; CM-NEXT: PAD3533 %src = bitcast i16 %src.i to half3534 %fpext = fpext half %src to float3535 %result = call float @llvm.log2.f32(float %fpext)3536 ret float %result3537}3538 3539define float @v_log2_f32_from_fpext_math_f16(i16 %src0.i, i16 %src1.i) {3540; SI-SDAG-LABEL: v_log2_f32_from_fpext_math_f16:3541; SI-SDAG: ; %bb.0:3542; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3543; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v03544; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v13545; SI-SDAG-NEXT: s_mov_b32 s4, 0x8000003546; SI-SDAG-NEXT: v_add_f32_e32 v0, v0, v13547; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v03548; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 32, vcc3549; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v13550; SI-SDAG-NEXT: v_log_f32_e32 v0, v03551; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x420000003552; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3553; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v13554; SI-SDAG-NEXT: s_setpc_b64 s[30:31]3555;3556; SI-GISEL-LABEL: v_log2_f32_from_fpext_math_f16:3557; SI-GISEL: ; %bb.0:3558; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3559; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v03560; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v13561; SI-GISEL-NEXT: v_add_f32_e32 v0, v0, v13562; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v03563; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v03564; SI-GISEL-NEXT: v_log_f32_e32 v0, v03565; SI-GISEL-NEXT: s_setpc_b64 s[30:31]3566;3567; VI-LABEL: v_log2_f32_from_fpext_math_f16:3568; VI: ; %bb.0:3569; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3570; VI-NEXT: v_add_f16_e32 v0, v0, v13571; VI-NEXT: v_cvt_f32_f16_e32 v0, v03572; VI-NEXT: v_log_f32_e32 v0, v03573; VI-NEXT: s_setpc_b64 s[30:31]3574;3575; GFX900-LABEL: v_log2_f32_from_fpext_math_f16:3576; GFX900: ; %bb.0:3577; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3578; GFX900-NEXT: v_add_f16_e32 v0, v0, v13579; GFX900-NEXT: v_cvt_f32_f16_e32 v0, v03580; GFX900-NEXT: v_log_f32_e32 v0, v03581; GFX900-NEXT: s_setpc_b64 s[30:31]3582;3583; GFX1100-SDAG-TRUE16-LABEL: v_log2_f32_from_fpext_math_f16:3584; GFX1100-SDAG-TRUE16: ; %bb.0:3585; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3586; GFX1100-SDAG-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v1.l3587; GFX1100-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)3588; GFX1100-SDAG-TRUE16-NEXT: v_cvt_f32_f16_e32 v0, v0.l3589; GFX1100-SDAG-TRUE16-NEXT: v_log_f32_e32 v0, v03590; GFX1100-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]3591;3592; GFX1100-SDAG-FAKE16-LABEL: v_log2_f32_from_fpext_math_f16:3593; GFX1100-SDAG-FAKE16: ; %bb.0:3594; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3595; GFX1100-SDAG-FAKE16-NEXT: v_add_f16_e32 v0, v0, v13596; GFX1100-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)3597; GFX1100-SDAG-FAKE16-NEXT: v_cvt_f32_f16_e32 v0, v03598; GFX1100-SDAG-FAKE16-NEXT: v_log_f32_e32 v0, v03599; GFX1100-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]3600;3601; GFX1100-GISEL-TRUE16-LABEL: v_log2_f32_from_fpext_math_f16:3602; GFX1100-GISEL-TRUE16: ; %bb.0:3603; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3604; GFX1100-GISEL-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v1.l3605; GFX1100-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)3606; GFX1100-GISEL-TRUE16-NEXT: v_cvt_f32_f16_e32 v0, v0.l3607; GFX1100-GISEL-TRUE16-NEXT: v_log_f32_e32 v0, v03608; GFX1100-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]3609;3610; GFX1100-GISEL-FAKE16-LABEL: v_log2_f32_from_fpext_math_f16:3611; GFX1100-GISEL-FAKE16: ; %bb.0:3612; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3613; GFX1100-GISEL-FAKE16-NEXT: v_add_f16_e32 v0, v0, v13614; GFX1100-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)3615; GFX1100-GISEL-FAKE16-NEXT: v_cvt_f32_f16_e32 v0, v03616; GFX1100-GISEL-FAKE16-NEXT: v_log_f32_e32 v0, v03617; GFX1100-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]3618;3619; R600-LABEL: v_log2_f32_from_fpext_math_f16:3620; R600: ; %bb.0:3621; R600-NEXT: CF_END3622; R600-NEXT: PAD3623;3624; CM-LABEL: v_log2_f32_from_fpext_math_f16:3625; CM: ; %bb.0:3626; CM-NEXT: CF_END3627; CM-NEXT: PAD3628 %src0 = bitcast i16 %src0.i to half3629 %src1 = bitcast i16 %src1.i to half3630 %fadd = fadd half %src0, %src13631 %fpext = fpext half %fadd to float3632 %result = call float @llvm.log2.f32(float %fpext)3633 ret float %result3634}3635 3636define float @v_log2_f32_from_fpext_bf16(bfloat %src) {3637; SI-LABEL: v_log2_f32_from_fpext_bf16:3638; SI: ; %bb.0:3639; SI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3640; SI-NEXT: s_mov_b32 s4, 0x8000003641; SI-NEXT: v_cmp_gt_f32_e32 vcc, s4, v03642; SI-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc3643; SI-NEXT: v_ldexp_f32_e32 v0, v0, v23644; SI-NEXT: v_log_f32_e32 v0, v03645; SI-NEXT: v_mov_b32_e32 v1, 0x420000003646; SI-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3647; SI-NEXT: v_sub_f32_e32 v0, v0, v13648; SI-NEXT: s_setpc_b64 s[30:31]3649;3650; VI-LABEL: v_log2_f32_from_fpext_bf16:3651; VI: ; %bb.0:3652; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3653; VI-NEXT: v_lshlrev_b32_e32 v0, 16, v03654; VI-NEXT: s_mov_b32 s4, 0x8000003655; VI-NEXT: v_cmp_gt_f32_e32 vcc, s4, v03656; VI-NEXT: v_cndmask_b32_e64 v1, 0, 32, vcc3657; VI-NEXT: v_ldexp_f32 v0, v0, v13658; VI-NEXT: v_log_f32_e32 v0, v03659; VI-NEXT: v_mov_b32_e32 v1, 0x420000003660; VI-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3661; VI-NEXT: v_sub_f32_e32 v0, v0, v13662; VI-NEXT: s_setpc_b64 s[30:31]3663;3664; GFX900-LABEL: v_log2_f32_from_fpext_bf16:3665; GFX900: ; %bb.0:3666; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3667; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v03668; GFX900-NEXT: s_mov_b32 s4, 0x8000003669; GFX900-NEXT: v_cmp_gt_f32_e32 vcc, s4, v03670; GFX900-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc3671; GFX900-NEXT: v_ldexp_f32 v0, v0, v23672; GFX900-NEXT: v_log_f32_e32 v0, v03673; GFX900-NEXT: v_mov_b32_e32 v1, 0x420000003674; GFX900-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc3675; GFX900-NEXT: v_sub_f32_e32 v0, v0, v13676; GFX900-NEXT: s_setpc_b64 s[30:31]3677;3678; GFX1100-SDAG-TRUE16-LABEL: v_log2_f32_from_fpext_bf16:3679; GFX1100-SDAG-TRUE16: ; %bb.0:3680; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3681; GFX1100-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.l, 03682; GFX1100-SDAG-TRUE16-NEXT: v_mov_b16_e32 v1.h, v0.l3683; GFX1100-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)3684; GFX1100-SDAG-TRUE16-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v13685; GFX1100-SDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 32, vcc_lo3686; GFX1100-SDAG-TRUE16-NEXT: v_ldexp_f32 v0, v1, v03687; GFX1100-SDAG-TRUE16-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo3688; GFX1100-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)3689; GFX1100-SDAG-TRUE16-NEXT: v_log_f32_e32 v0, v03690; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)3691; GFX1100-SDAG-TRUE16-NEXT: v_sub_f32_e32 v0, v0, v13692; GFX1100-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]3693;3694; GFX1100-SDAG-FAKE16-LABEL: v_log2_f32_from_fpext_bf16:3695; GFX1100-SDAG-FAKE16: ; %bb.0:3696; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3697; GFX1100-SDAG-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 16, v03698; GFX1100-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)3699; GFX1100-SDAG-FAKE16-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v03700; GFX1100-SDAG-FAKE16-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc_lo3701; GFX1100-SDAG-FAKE16-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo3702; GFX1100-SDAG-FAKE16-NEXT: v_ldexp_f32 v0, v0, v23703; GFX1100-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)3704; GFX1100-SDAG-FAKE16-NEXT: v_log_f32_e32 v0, v03705; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)3706; GFX1100-SDAG-FAKE16-NEXT: v_sub_f32_e32 v0, v0, v13707; GFX1100-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]3708;3709; GFX1100-GISEL-TRUE16-LABEL: v_log2_f32_from_fpext_bf16:3710; GFX1100-GISEL-TRUE16: ; %bb.0:3711; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3712; GFX1100-GISEL-TRUE16-NEXT: v_mov_b16_e32 v1.l, 03713; GFX1100-GISEL-TRUE16-NEXT: v_mov_b16_e32 v1.h, v0.l3714; GFX1100-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)3715; GFX1100-GISEL-TRUE16-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v13716; GFX1100-GISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 32, vcc_lo3717; GFX1100-GISEL-TRUE16-NEXT: v_ldexp_f32 v0, v1, v03718; GFX1100-GISEL-TRUE16-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo3719; GFX1100-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)3720; GFX1100-GISEL-TRUE16-NEXT: v_log_f32_e32 v0, v03721; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)3722; GFX1100-GISEL-TRUE16-NEXT: v_sub_f32_e32 v0, v0, v13723; GFX1100-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]3724;3725; GFX1100-GISEL-FAKE16-LABEL: v_log2_f32_from_fpext_bf16:3726; GFX1100-GISEL-FAKE16: ; %bb.0:3727; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3728; GFX1100-GISEL-FAKE16-NEXT: v_lshlrev_b32_e32 v0, 16, v03729; GFX1100-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)3730; GFX1100-GISEL-FAKE16-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v03731; GFX1100-GISEL-FAKE16-NEXT: v_cndmask_b32_e64 v2, 0, 32, vcc_lo3732; GFX1100-GISEL-FAKE16-NEXT: v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo3733; GFX1100-GISEL-FAKE16-NEXT: v_ldexp_f32 v0, v0, v23734; GFX1100-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)3735; GFX1100-GISEL-FAKE16-NEXT: v_log_f32_e32 v0, v03736; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)3737; GFX1100-GISEL-FAKE16-NEXT: v_sub_f32_e32 v0, v0, v13738; GFX1100-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]3739;3740; R600-LABEL: v_log2_f32_from_fpext_bf16:3741; R600: ; %bb.0:3742; R600-NEXT: CF_END3743; R600-NEXT: PAD3744;3745; CM-LABEL: v_log2_f32_from_fpext_bf16:3746; CM: ; %bb.0:3747; CM-NEXT: CF_END3748; CM-NEXT: PAD3749 %fpext = fpext bfloat %src to float3750 %result = call float @llvm.log2.f32(float %fpext)3751 ret float %result3752}3753 3754define half @v_log2_f16(half %in) {3755; SI-SDAG-LABEL: v_log2_f16:3756; SI-SDAG: ; %bb.0:3757; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3758; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v03759; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v03760; SI-SDAG-NEXT: v_log_f32_e32 v0, v03761; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v03762; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v03763; SI-SDAG-NEXT: s_setpc_b64 s[30:31]3764;3765; SI-GISEL-LABEL: v_log2_f16:3766; SI-GISEL: ; %bb.0:3767; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3768; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v03769; SI-GISEL-NEXT: v_log_f32_e32 v0, v03770; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v03771; SI-GISEL-NEXT: s_setpc_b64 s[30:31]3772;3773; VI-LABEL: v_log2_f16:3774; VI: ; %bb.0:3775; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3776; VI-NEXT: v_log_f16_e32 v0, v03777; VI-NEXT: s_setpc_b64 s[30:31]3778;3779; GFX900-LABEL: v_log2_f16:3780; GFX900: ; %bb.0:3781; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3782; GFX900-NEXT: v_log_f16_e32 v0, v03783; GFX900-NEXT: s_setpc_b64 s[30:31]3784;3785; GFX1100-SDAG-TRUE16-LABEL: v_log2_f16:3786; GFX1100-SDAG-TRUE16: ; %bb.0:3787; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3788; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l3789; GFX1100-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]3790;3791; GFX1100-SDAG-FAKE16-LABEL: v_log2_f16:3792; GFX1100-SDAG-FAKE16: ; %bb.0:3793; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3794; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v0, v03795; GFX1100-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]3796;3797; GFX1100-GISEL-TRUE16-LABEL: v_log2_f16:3798; GFX1100-GISEL-TRUE16: ; %bb.0:3799; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3800; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l3801; GFX1100-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]3802;3803; GFX1100-GISEL-FAKE16-LABEL: v_log2_f16:3804; GFX1100-GISEL-FAKE16: ; %bb.0:3805; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3806; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v0, v03807; GFX1100-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]3808;3809; R600-LABEL: v_log2_f16:3810; R600: ; %bb.0:3811; R600-NEXT: CF_END3812; R600-NEXT: PAD3813;3814; CM-LABEL: v_log2_f16:3815; CM: ; %bb.0:3816; CM-NEXT: CF_END3817; CM-NEXT: PAD3818 %result = call half @llvm.log2.f16(half %in)3819 ret half %result3820}3821 3822define half @v_log2_fabs_f16(half %in) {3823; SI-SDAG-LABEL: v_log2_fabs_f16:3824; SI-SDAG: ; %bb.0:3825; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3826; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v03827; SI-SDAG-NEXT: v_cvt_f32_f16_e64 v0, |v0|3828; SI-SDAG-NEXT: v_log_f32_e32 v0, v03829; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v03830; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v03831; SI-SDAG-NEXT: s_setpc_b64 s[30:31]3832;3833; SI-GISEL-LABEL: v_log2_fabs_f16:3834; SI-GISEL: ; %bb.0:3835; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3836; SI-GISEL-NEXT: v_cvt_f32_f16_e64 v0, |v0|3837; SI-GISEL-NEXT: v_log_f32_e32 v0, v03838; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v03839; SI-GISEL-NEXT: s_setpc_b64 s[30:31]3840;3841; VI-LABEL: v_log2_fabs_f16:3842; VI: ; %bb.0:3843; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3844; VI-NEXT: v_log_f16_e64 v0, |v0|3845; VI-NEXT: s_setpc_b64 s[30:31]3846;3847; GFX900-LABEL: v_log2_fabs_f16:3848; GFX900: ; %bb.0:3849; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3850; GFX900-NEXT: v_log_f16_e64 v0, |v0|3851; GFX900-NEXT: s_setpc_b64 s[30:31]3852;3853; GFX1100-SDAG-TRUE16-LABEL: v_log2_fabs_f16:3854; GFX1100-SDAG-TRUE16: ; %bb.0:3855; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3856; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e64 v0.l, |v0.l|3857; GFX1100-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]3858;3859; GFX1100-SDAG-FAKE16-LABEL: v_log2_fabs_f16:3860; GFX1100-SDAG-FAKE16: ; %bb.0:3861; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3862; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e64 v0, |v0|3863; GFX1100-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]3864;3865; GFX1100-GISEL-TRUE16-LABEL: v_log2_fabs_f16:3866; GFX1100-GISEL-TRUE16: ; %bb.0:3867; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3868; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e64 v0.l, |v0.l|3869; GFX1100-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]3870;3871; GFX1100-GISEL-FAKE16-LABEL: v_log2_fabs_f16:3872; GFX1100-GISEL-FAKE16: ; %bb.0:3873; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3874; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e64 v0, |v0|3875; GFX1100-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]3876;3877; R600-LABEL: v_log2_fabs_f16:3878; R600: ; %bb.0:3879; R600-NEXT: CF_END3880; R600-NEXT: PAD3881;3882; CM-LABEL: v_log2_fabs_f16:3883; CM: ; %bb.0:3884; CM-NEXT: CF_END3885; CM-NEXT: PAD3886 %fabs = call half @llvm.fabs.f16(half %in)3887 %result = call half @llvm.log2.f16(half %fabs)3888 ret half %result3889}3890 3891define half @v_log2_fneg_fabs_f16(half %in) {3892; SI-SDAG-LABEL: v_log2_fneg_fabs_f16:3893; SI-SDAG: ; %bb.0:3894; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3895; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v03896; SI-SDAG-NEXT: v_cvt_f32_f16_e64 v0, -|v0|3897; SI-SDAG-NEXT: v_log_f32_e32 v0, v03898; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v03899; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v03900; SI-SDAG-NEXT: s_setpc_b64 s[30:31]3901;3902; SI-GISEL-LABEL: v_log2_fneg_fabs_f16:3903; SI-GISEL: ; %bb.0:3904; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3905; SI-GISEL-NEXT: v_cvt_f32_f16_e64 v0, -|v0|3906; SI-GISEL-NEXT: v_log_f32_e32 v0, v03907; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v03908; SI-GISEL-NEXT: s_setpc_b64 s[30:31]3909;3910; VI-LABEL: v_log2_fneg_fabs_f16:3911; VI: ; %bb.0:3912; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3913; VI-NEXT: v_log_f16_e64 v0, -|v0|3914; VI-NEXT: s_setpc_b64 s[30:31]3915;3916; GFX900-LABEL: v_log2_fneg_fabs_f16:3917; GFX900: ; %bb.0:3918; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3919; GFX900-NEXT: v_log_f16_e64 v0, -|v0|3920; GFX900-NEXT: s_setpc_b64 s[30:31]3921;3922; GFX1100-SDAG-TRUE16-LABEL: v_log2_fneg_fabs_f16:3923; GFX1100-SDAG-TRUE16: ; %bb.0:3924; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3925; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e64 v0.l, -|v0.l|3926; GFX1100-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]3927;3928; GFX1100-SDAG-FAKE16-LABEL: v_log2_fneg_fabs_f16:3929; GFX1100-SDAG-FAKE16: ; %bb.0:3930; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3931; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e64 v0, -|v0|3932; GFX1100-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]3933;3934; GFX1100-GISEL-TRUE16-LABEL: v_log2_fneg_fabs_f16:3935; GFX1100-GISEL-TRUE16: ; %bb.0:3936; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3937; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e64 v0.l, -|v0.l|3938; GFX1100-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]3939;3940; GFX1100-GISEL-FAKE16-LABEL: v_log2_fneg_fabs_f16:3941; GFX1100-GISEL-FAKE16: ; %bb.0:3942; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3943; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e64 v0, -|v0|3944; GFX1100-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]3945;3946; R600-LABEL: v_log2_fneg_fabs_f16:3947; R600: ; %bb.0:3948; R600-NEXT: CF_END3949; R600-NEXT: PAD3950;3951; CM-LABEL: v_log2_fneg_fabs_f16:3952; CM: ; %bb.0:3953; CM-NEXT: CF_END3954; CM-NEXT: PAD3955 %fabs = call half @llvm.fabs.f16(half %in)3956 %fneg.fabs = fneg half %fabs3957 %result = call half @llvm.log2.f16(half %fneg.fabs)3958 ret half %result3959}3960 3961define half @v_log2_fneg_f16(half %in) {3962; SI-SDAG-LABEL: v_log2_fneg_f16:3963; SI-SDAG: ; %bb.0:3964; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3965; SI-SDAG-NEXT: v_cvt_f16_f32_e64 v0, -v03966; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v03967; SI-SDAG-NEXT: v_log_f32_e32 v0, v03968; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v03969; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v03970; SI-SDAG-NEXT: s_setpc_b64 s[30:31]3971;3972; SI-GISEL-LABEL: v_log2_fneg_f16:3973; SI-GISEL: ; %bb.0:3974; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3975; SI-GISEL-NEXT: v_cvt_f32_f16_e64 v0, -v03976; SI-GISEL-NEXT: v_log_f32_e32 v0, v03977; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v03978; SI-GISEL-NEXT: s_setpc_b64 s[30:31]3979;3980; VI-LABEL: v_log2_fneg_f16:3981; VI: ; %bb.0:3982; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3983; VI-NEXT: v_log_f16_e64 v0, -v03984; VI-NEXT: s_setpc_b64 s[30:31]3985;3986; GFX900-LABEL: v_log2_fneg_f16:3987; GFX900: ; %bb.0:3988; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3989; GFX900-NEXT: v_log_f16_e64 v0, -v03990; GFX900-NEXT: s_setpc_b64 s[30:31]3991;3992; GFX1100-SDAG-TRUE16-LABEL: v_log2_fneg_f16:3993; GFX1100-SDAG-TRUE16: ; %bb.0:3994; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3995; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e64 v0.l, -v0.l3996; GFX1100-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]3997;3998; GFX1100-SDAG-FAKE16-LABEL: v_log2_fneg_f16:3999; GFX1100-SDAG-FAKE16: ; %bb.0:4000; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4001; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e64 v0, -v04002; GFX1100-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]4003;4004; GFX1100-GISEL-TRUE16-LABEL: v_log2_fneg_f16:4005; GFX1100-GISEL-TRUE16: ; %bb.0:4006; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4007; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e64 v0.l, -v0.l4008; GFX1100-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]4009;4010; GFX1100-GISEL-FAKE16-LABEL: v_log2_fneg_f16:4011; GFX1100-GISEL-FAKE16: ; %bb.0:4012; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4013; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e64 v0, -v04014; GFX1100-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]4015;4016; R600-LABEL: v_log2_fneg_f16:4017; R600: ; %bb.0:4018; R600-NEXT: CF_END4019; R600-NEXT: PAD4020;4021; CM-LABEL: v_log2_fneg_f16:4022; CM: ; %bb.0:4023; CM-NEXT: CF_END4024; CM-NEXT: PAD4025 %fneg = fneg half %in4026 %result = call half @llvm.log2.f16(half %fneg)4027 ret half %result4028}4029 4030define half @v_log2_f16_fast(half %in) {4031; SI-SDAG-LABEL: v_log2_f16_fast:4032; SI-SDAG: ; %bb.0:4033; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4034; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04035; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v04036; SI-SDAG-NEXT: v_log_f32_e32 v0, v04037; SI-SDAG-NEXT: s_setpc_b64 s[30:31]4038;4039; SI-GISEL-LABEL: v_log2_f16_fast:4040; SI-GISEL: ; %bb.0:4041; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4042; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v04043; SI-GISEL-NEXT: v_log_f32_e32 v0, v04044; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v04045; SI-GISEL-NEXT: s_setpc_b64 s[30:31]4046;4047; VI-LABEL: v_log2_f16_fast:4048; VI: ; %bb.0:4049; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4050; VI-NEXT: v_log_f16_e32 v0, v04051; VI-NEXT: s_setpc_b64 s[30:31]4052;4053; GFX900-LABEL: v_log2_f16_fast:4054; GFX900: ; %bb.0:4055; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4056; GFX900-NEXT: v_log_f16_e32 v0, v04057; GFX900-NEXT: s_setpc_b64 s[30:31]4058;4059; GFX1100-SDAG-TRUE16-LABEL: v_log2_f16_fast:4060; GFX1100-SDAG-TRUE16: ; %bb.0:4061; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4062; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l4063; GFX1100-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]4064;4065; GFX1100-SDAG-FAKE16-LABEL: v_log2_f16_fast:4066; GFX1100-SDAG-FAKE16: ; %bb.0:4067; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4068; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v0, v04069; GFX1100-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]4070;4071; GFX1100-GISEL-TRUE16-LABEL: v_log2_f16_fast:4072; GFX1100-GISEL-TRUE16: ; %bb.0:4073; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4074; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l4075; GFX1100-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]4076;4077; GFX1100-GISEL-FAKE16-LABEL: v_log2_f16_fast:4078; GFX1100-GISEL-FAKE16: ; %bb.0:4079; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4080; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v0, v04081; GFX1100-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]4082;4083; R600-LABEL: v_log2_f16_fast:4084; R600: ; %bb.0:4085; R600-NEXT: CF_END4086; R600-NEXT: PAD4087;4088; CM-LABEL: v_log2_f16_fast:4089; CM: ; %bb.0:4090; CM-NEXT: CF_END4091; CM-NEXT: PAD4092 %result = call fast half @llvm.log2.f16(half %in)4093 ret half %result4094}4095 4096define <2 x half> @v_log2_v2f16(<2 x half> %in) {4097; SI-SDAG-LABEL: v_log2_v2f16:4098; SI-SDAG: ; %bb.0:4099; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4100; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04101; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v14102; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v04103; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v14104; SI-SDAG-NEXT: v_log_f32_e32 v0, v04105; SI-SDAG-NEXT: v_log_f32_e32 v1, v14106; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04107; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v14108; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v04109; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v14110; SI-SDAG-NEXT: s_setpc_b64 s[30:31]4111;4112; SI-GISEL-LABEL: v_log2_v2f16:4113; SI-GISEL: ; %bb.0:4114; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4115; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v04116; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v14117; SI-GISEL-NEXT: v_log_f32_e32 v0, v04118; SI-GISEL-NEXT: v_log_f32_e32 v1, v14119; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v04120; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v14121; SI-GISEL-NEXT: s_setpc_b64 s[30:31]4122;4123; VI-SDAG-LABEL: v_log2_v2f16:4124; VI-SDAG: ; %bb.0:4125; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4126; VI-SDAG-NEXT: v_log_f16_sdwa v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_14127; VI-SDAG-NEXT: v_log_f16_e32 v0, v04128; VI-SDAG-NEXT: v_or_b32_e32 v0, v0, v14129; VI-SDAG-NEXT: s_setpc_b64 s[30:31]4130;4131; VI-GISEL-LABEL: v_log2_v2f16:4132; VI-GISEL: ; %bb.0:4133; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4134; VI-GISEL-NEXT: v_log_f16_e32 v1, v04135; VI-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_14136; VI-GISEL-NEXT: v_or_b32_e32 v0, v1, v04137; VI-GISEL-NEXT: s_setpc_b64 s[30:31]4138;4139; GFX900-SDAG-LABEL: v_log2_v2f16:4140; GFX900-SDAG: ; %bb.0:4141; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4142; GFX900-SDAG-NEXT: v_log_f16_sdwa v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_14143; GFX900-SDAG-NEXT: v_log_f16_e32 v0, v04144; GFX900-SDAG-NEXT: v_pack_b32_f16 v0, v0, v14145; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]4146;4147; GFX900-GISEL-LABEL: v_log2_v2f16:4148; GFX900-GISEL: ; %bb.0:4149; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4150; GFX900-GISEL-NEXT: v_log_f16_e32 v1, v04151; GFX900-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_14152; GFX900-GISEL-NEXT: v_pack_b32_f16 v0, v1, v04153; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]4154;4155; GFX1100-SDAG-TRUE16-LABEL: v_log2_v2f16:4156; GFX1100-SDAG-TRUE16: ; %bb.0:4157; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4158; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v0.h, v0.h4159; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l4160; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4161; GFX1100-SDAG-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h4162; GFX1100-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]4163;4164; GFX1100-SDAG-FAKE16-LABEL: v_log2_v2f16:4165; GFX1100-SDAG-FAKE16: ; %bb.0:4166; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4167; GFX1100-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v04168; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v0, v04169; GFX1100-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4170; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v1, v14171; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4172; GFX1100-SDAG-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v14173; GFX1100-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]4174;4175; GFX1100-GISEL-TRUE16-LABEL: v_log2_v2f16:4176; GFX1100-GISEL-TRUE16: ; %bb.0:4177; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4178; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l4179; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.h, v0.h4180; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4181; GFX1100-GISEL-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h4182; GFX1100-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]4183;4184; GFX1100-GISEL-FAKE16-LABEL: v_log2_v2f16:4185; GFX1100-GISEL-FAKE16: ; %bb.0:4186; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4187; GFX1100-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v04188; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v0, v04189; GFX1100-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4190; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v1, v14191; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4192; GFX1100-GISEL-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v14193; GFX1100-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]4194;4195; R600-LABEL: v_log2_v2f16:4196; R600: ; %bb.0:4197; R600-NEXT: CF_END4198; R600-NEXT: PAD4199;4200; CM-LABEL: v_log2_v2f16:4201; CM: ; %bb.0:4202; CM-NEXT: CF_END4203; CM-NEXT: PAD4204 %result = call <2 x half> @llvm.log2.v2f16(<2 x half> %in)4205 ret <2 x half> %result4206}4207 4208define <2 x half> @v_log2_fabs_v2f16(<2 x half> %in) {4209; SI-SDAG-LABEL: v_log2_fabs_v2f16:4210; SI-SDAG: ; %bb.0:4211; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4212; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04213; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v14214; SI-SDAG-NEXT: v_cvt_f32_f16_e64 v0, |v0|4215; SI-SDAG-NEXT: v_cvt_f32_f16_e64 v1, |v1|4216; SI-SDAG-NEXT: v_log_f32_e32 v0, v04217; SI-SDAG-NEXT: v_log_f32_e32 v1, v14218; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04219; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v14220; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v04221; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v14222; SI-SDAG-NEXT: s_setpc_b64 s[30:31]4223;4224; SI-GISEL-LABEL: v_log2_fabs_v2f16:4225; SI-GISEL: ; %bb.0:4226; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4227; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v14228; SI-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v04229; SI-GISEL-NEXT: v_or_b32_e32 v0, v1, v04230; SI-GISEL-NEXT: v_and_b32_e32 v0, 0x7fff7fff, v04231; SI-GISEL-NEXT: v_lshrrev_b32_e32 v1, 16, v04232; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v04233; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v14234; SI-GISEL-NEXT: v_log_f32_e32 v0, v04235; SI-GISEL-NEXT: v_log_f32_e32 v1, v14236; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v04237; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v14238; SI-GISEL-NEXT: s_setpc_b64 s[30:31]4239;4240; VI-SDAG-LABEL: v_log2_fabs_v2f16:4241; VI-SDAG: ; %bb.0:4242; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4243; VI-SDAG-NEXT: v_log_f16_sdwa v1, |v0| dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_14244; VI-SDAG-NEXT: v_log_f16_e64 v0, |v0|4245; VI-SDAG-NEXT: v_or_b32_e32 v0, v0, v14246; VI-SDAG-NEXT: s_setpc_b64 s[30:31]4247;4248; VI-GISEL-LABEL: v_log2_fabs_v2f16:4249; VI-GISEL: ; %bb.0:4250; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4251; VI-GISEL-NEXT: v_and_b32_e32 v0, 0x7fff7fff, v04252; VI-GISEL-NEXT: v_log_f16_e32 v1, v04253; VI-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_14254; VI-GISEL-NEXT: v_or_b32_e32 v0, v1, v04255; VI-GISEL-NEXT: s_setpc_b64 s[30:31]4256;4257; GFX900-SDAG-LABEL: v_log2_fabs_v2f16:4258; GFX900-SDAG: ; %bb.0:4259; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4260; GFX900-SDAG-NEXT: v_log_f16_sdwa v1, |v0| dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_14261; GFX900-SDAG-NEXT: v_log_f16_e64 v0, |v0|4262; GFX900-SDAG-NEXT: v_pack_b32_f16 v0, v0, v14263; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]4264;4265; GFX900-GISEL-LABEL: v_log2_fabs_v2f16:4266; GFX900-GISEL: ; %bb.0:4267; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4268; GFX900-GISEL-NEXT: v_and_b32_e32 v0, 0x7fff7fff, v04269; GFX900-GISEL-NEXT: v_log_f16_e32 v1, v04270; GFX900-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_14271; GFX900-GISEL-NEXT: v_pack_b32_f16 v0, v1, v04272; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]4273;4274; GFX1100-SDAG-TRUE16-LABEL: v_log2_fabs_v2f16:4275; GFX1100-SDAG-TRUE16: ; %bb.0:4276; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4277; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e64 v0.h, |v0.h|4278; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e64 v0.l, |v0.l|4279; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4280; GFX1100-SDAG-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h4281; GFX1100-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]4282;4283; GFX1100-SDAG-FAKE16-LABEL: v_log2_fabs_v2f16:4284; GFX1100-SDAG-FAKE16: ; %bb.0:4285; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4286; GFX1100-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v04287; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e64 v0, |v0|4288; GFX1100-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4289; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e64 v1, |v1|4290; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4291; GFX1100-SDAG-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v14292; GFX1100-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]4293;4294; GFX1100-GISEL-TRUE16-LABEL: v_log2_fabs_v2f16:4295; GFX1100-GISEL-TRUE16: ; %bb.0:4296; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4297; GFX1100-GISEL-TRUE16-NEXT: v_and_b32_e32 v0, 0x7fff7fff, v04298; GFX1100-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)4299; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l4300; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.h, v0.h4301; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4302; GFX1100-GISEL-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h4303; GFX1100-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]4304;4305; GFX1100-GISEL-FAKE16-LABEL: v_log2_fabs_v2f16:4306; GFX1100-GISEL-FAKE16: ; %bb.0:4307; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4308; GFX1100-GISEL-FAKE16-NEXT: v_and_b32_e32 v0, 0x7fff7fff, v04309; GFX1100-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)4310; GFX1100-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v04311; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v0, v04312; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v1, v14313; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4314; GFX1100-GISEL-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v14315; GFX1100-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]4316;4317; R600-LABEL: v_log2_fabs_v2f16:4318; R600: ; %bb.0:4319; R600-NEXT: CF_END4320; R600-NEXT: PAD4321;4322; CM-LABEL: v_log2_fabs_v2f16:4323; CM: ; %bb.0:4324; CM-NEXT: CF_END4325; CM-NEXT: PAD4326 %fabs = call <2 x half> @llvm.fabs.v2f16(<2 x half> %in)4327 %result = call <2 x half> @llvm.log2.v2f16(<2 x half> %fabs)4328 ret <2 x half> %result4329}4330 4331define <2 x half> @v_log2_fneg_fabs_v2f16(<2 x half> %in) {4332; SI-SDAG-LABEL: v_log2_fneg_fabs_v2f16:4333; SI-SDAG: ; %bb.0:4334; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4335; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v14336; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04337; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 16, v14338; SI-SDAG-NEXT: v_or_b32_e32 v0, v0, v14339; SI-SDAG-NEXT: v_or_b32_e32 v0, 0x80008000, v04340; SI-SDAG-NEXT: v_lshrrev_b32_e32 v1, 16, v04341; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v04342; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v14343; SI-SDAG-NEXT: v_log_f32_e32 v0, v04344; SI-SDAG-NEXT: v_log_f32_e32 v1, v14345; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04346; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v14347; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v04348; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v14349; SI-SDAG-NEXT: s_setpc_b64 s[30:31]4350;4351; SI-GISEL-LABEL: v_log2_fneg_fabs_v2f16:4352; SI-GISEL: ; %bb.0:4353; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4354; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v14355; SI-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v04356; SI-GISEL-NEXT: v_or_b32_e32 v0, v1, v04357; SI-GISEL-NEXT: v_or_b32_e32 v0, 0x80008000, v04358; SI-GISEL-NEXT: v_lshrrev_b32_e32 v1, 16, v04359; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v04360; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v14361; SI-GISEL-NEXT: v_log_f32_e32 v0, v04362; SI-GISEL-NEXT: v_log_f32_e32 v1, v14363; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v04364; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v14365; SI-GISEL-NEXT: s_setpc_b64 s[30:31]4366;4367; VI-SDAG-LABEL: v_log2_fneg_fabs_v2f16:4368; VI-SDAG: ; %bb.0:4369; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4370; VI-SDAG-NEXT: v_log_f16_sdwa v1, -|v0| dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_14371; VI-SDAG-NEXT: v_log_f16_e64 v0, -|v0|4372; VI-SDAG-NEXT: v_or_b32_e32 v0, v0, v14373; VI-SDAG-NEXT: s_setpc_b64 s[30:31]4374;4375; VI-GISEL-LABEL: v_log2_fneg_fabs_v2f16:4376; VI-GISEL: ; %bb.0:4377; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4378; VI-GISEL-NEXT: v_or_b32_e32 v0, 0x80008000, v04379; VI-GISEL-NEXT: v_log_f16_e32 v1, v04380; VI-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_14381; VI-GISEL-NEXT: v_or_b32_e32 v0, v1, v04382; VI-GISEL-NEXT: s_setpc_b64 s[30:31]4383;4384; GFX900-SDAG-LABEL: v_log2_fneg_fabs_v2f16:4385; GFX900-SDAG: ; %bb.0:4386; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4387; GFX900-SDAG-NEXT: v_log_f16_sdwa v1, -|v0| dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_14388; GFX900-SDAG-NEXT: v_log_f16_e64 v0, -|v0|4389; GFX900-SDAG-NEXT: v_pack_b32_f16 v0, v0, v14390; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]4391;4392; GFX900-GISEL-LABEL: v_log2_fneg_fabs_v2f16:4393; GFX900-GISEL: ; %bb.0:4394; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4395; GFX900-GISEL-NEXT: v_or_b32_e32 v0, 0x80008000, v04396; GFX900-GISEL-NEXT: v_log_f16_e32 v1, v04397; GFX900-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_14398; GFX900-GISEL-NEXT: v_pack_b32_f16 v0, v1, v04399; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]4400;4401; GFX1100-SDAG-TRUE16-LABEL: v_log2_fneg_fabs_v2f16:4402; GFX1100-SDAG-TRUE16: ; %bb.0:4403; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4404; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e64 v0.h, -|v0.h|4405; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e64 v0.l, -|v0.l|4406; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4407; GFX1100-SDAG-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h4408; GFX1100-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]4409;4410; GFX1100-SDAG-FAKE16-LABEL: v_log2_fneg_fabs_v2f16:4411; GFX1100-SDAG-FAKE16: ; %bb.0:4412; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4413; GFX1100-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v04414; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e64 v0, -|v0|4415; GFX1100-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4416; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e64 v1, -|v1|4417; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4418; GFX1100-SDAG-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v14419; GFX1100-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]4420;4421; GFX1100-GISEL-TRUE16-LABEL: v_log2_fneg_fabs_v2f16:4422; GFX1100-GISEL-TRUE16: ; %bb.0:4423; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4424; GFX1100-GISEL-TRUE16-NEXT: v_or_b32_e32 v0, 0x80008000, v04425; GFX1100-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)4426; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l4427; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.h, v0.h4428; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4429; GFX1100-GISEL-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h4430; GFX1100-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]4431;4432; GFX1100-GISEL-FAKE16-LABEL: v_log2_fneg_fabs_v2f16:4433; GFX1100-GISEL-FAKE16: ; %bb.0:4434; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4435; GFX1100-GISEL-FAKE16-NEXT: v_or_b32_e32 v0, 0x80008000, v04436; GFX1100-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)4437; GFX1100-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v04438; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v0, v04439; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v1, v14440; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4441; GFX1100-GISEL-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v14442; GFX1100-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]4443;4444; R600-LABEL: v_log2_fneg_fabs_v2f16:4445; R600: ; %bb.0:4446; R600-NEXT: CF_END4447; R600-NEXT: PAD4448;4449; CM-LABEL: v_log2_fneg_fabs_v2f16:4450; CM: ; %bb.0:4451; CM-NEXT: CF_END4452; CM-NEXT: PAD4453 %fabs = call <2 x half> @llvm.fabs.v2f16(<2 x half> %in)4454 %fneg.fabs = fneg <2 x half> %fabs4455 %result = call <2 x half> @llvm.log2.v2f16(<2 x half> %fneg.fabs)4456 ret <2 x half> %result4457}4458 4459define <2 x half> @v_log2_fneg_v2f16(<2 x half> %in) {4460; SI-SDAG-LABEL: v_log2_fneg_v2f16:4461; SI-SDAG: ; %bb.0:4462; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4463; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v14464; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04465; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 16, v14466; SI-SDAG-NEXT: v_or_b32_e32 v0, v0, v14467; SI-SDAG-NEXT: v_xor_b32_e32 v0, 0x80008000, v04468; SI-SDAG-NEXT: v_lshrrev_b32_e32 v1, 16, v04469; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v04470; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v14471; SI-SDAG-NEXT: v_log_f32_e32 v0, v04472; SI-SDAG-NEXT: v_log_f32_e32 v1, v14473; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04474; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v14475; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v04476; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v14477; SI-SDAG-NEXT: s_setpc_b64 s[30:31]4478;4479; SI-GISEL-LABEL: v_log2_fneg_v2f16:4480; SI-GISEL: ; %bb.0:4481; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4482; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v14483; SI-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v04484; SI-GISEL-NEXT: v_or_b32_e32 v0, v1, v04485; SI-GISEL-NEXT: v_xor_b32_e32 v0, 0x80008000, v04486; SI-GISEL-NEXT: v_lshrrev_b32_e32 v1, 16, v04487; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v04488; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v14489; SI-GISEL-NEXT: v_log_f32_e32 v0, v04490; SI-GISEL-NEXT: v_log_f32_e32 v1, v14491; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v04492; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v14493; SI-GISEL-NEXT: s_setpc_b64 s[30:31]4494;4495; VI-SDAG-LABEL: v_log2_fneg_v2f16:4496; VI-SDAG: ; %bb.0:4497; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4498; VI-SDAG-NEXT: v_log_f16_sdwa v1, -v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_14499; VI-SDAG-NEXT: v_log_f16_e64 v0, -v04500; VI-SDAG-NEXT: v_or_b32_e32 v0, v0, v14501; VI-SDAG-NEXT: s_setpc_b64 s[30:31]4502;4503; VI-GISEL-LABEL: v_log2_fneg_v2f16:4504; VI-GISEL: ; %bb.0:4505; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4506; VI-GISEL-NEXT: v_xor_b32_e32 v0, 0x80008000, v04507; VI-GISEL-NEXT: v_log_f16_e32 v1, v04508; VI-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_14509; VI-GISEL-NEXT: v_or_b32_e32 v0, v1, v04510; VI-GISEL-NEXT: s_setpc_b64 s[30:31]4511;4512; GFX900-SDAG-LABEL: v_log2_fneg_v2f16:4513; GFX900-SDAG: ; %bb.0:4514; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4515; GFX900-SDAG-NEXT: v_log_f16_sdwa v1, -v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_14516; GFX900-SDAG-NEXT: v_log_f16_e64 v0, -v04517; GFX900-SDAG-NEXT: v_pack_b32_f16 v0, v0, v14518; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]4519;4520; GFX900-GISEL-LABEL: v_log2_fneg_v2f16:4521; GFX900-GISEL: ; %bb.0:4522; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4523; GFX900-GISEL-NEXT: v_xor_b32_e32 v0, 0x80008000, v04524; GFX900-GISEL-NEXT: v_log_f16_e32 v1, v04525; GFX900-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_14526; GFX900-GISEL-NEXT: v_pack_b32_f16 v0, v1, v04527; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]4528;4529; GFX1100-SDAG-TRUE16-LABEL: v_log2_fneg_v2f16:4530; GFX1100-SDAG-TRUE16: ; %bb.0:4531; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4532; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e64 v0.h, -v0.h4533; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e64 v0.l, -v0.l4534; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4535; GFX1100-SDAG-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h4536; GFX1100-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]4537;4538; GFX1100-SDAG-FAKE16-LABEL: v_log2_fneg_v2f16:4539; GFX1100-SDAG-FAKE16: ; %bb.0:4540; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4541; GFX1100-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v04542; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e64 v0, -v04543; GFX1100-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4544; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e64 v1, -v14545; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4546; GFX1100-SDAG-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v14547; GFX1100-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]4548;4549; GFX1100-GISEL-TRUE16-LABEL: v_log2_fneg_v2f16:4550; GFX1100-GISEL-TRUE16: ; %bb.0:4551; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4552; GFX1100-GISEL-TRUE16-NEXT: v_xor_b32_e32 v0, 0x80008000, v04553; GFX1100-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)4554; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l4555; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.h, v0.h4556; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4557; GFX1100-GISEL-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h4558; GFX1100-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]4559;4560; GFX1100-GISEL-FAKE16-LABEL: v_log2_fneg_v2f16:4561; GFX1100-GISEL-FAKE16: ; %bb.0:4562; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4563; GFX1100-GISEL-FAKE16-NEXT: v_xor_b32_e32 v0, 0x80008000, v04564; GFX1100-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)4565; GFX1100-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v04566; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v0, v04567; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v1, v14568; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4569; GFX1100-GISEL-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v14570; GFX1100-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]4571;4572; R600-LABEL: v_log2_fneg_v2f16:4573; R600: ; %bb.0:4574; R600-NEXT: CF_END4575; R600-NEXT: PAD4576;4577; CM-LABEL: v_log2_fneg_v2f16:4578; CM: ; %bb.0:4579; CM-NEXT: CF_END4580; CM-NEXT: PAD4581 %fneg = fneg <2 x half> %in4582 %result = call <2 x half> @llvm.log2.v2f16(<2 x half> %fneg)4583 ret <2 x half> %result4584}4585 4586define <2 x half> @v_log2_v2f16_fast(<2 x half> %in) {4587; SI-SDAG-LABEL: v_log2_v2f16_fast:4588; SI-SDAG: ; %bb.0:4589; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4590; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04591; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v14592; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v04593; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v14594; SI-SDAG-NEXT: v_log_f32_e32 v0, v04595; SI-SDAG-NEXT: v_log_f32_e32 v1, v14596; SI-SDAG-NEXT: s_setpc_b64 s[30:31]4597;4598; SI-GISEL-LABEL: v_log2_v2f16_fast:4599; SI-GISEL: ; %bb.0:4600; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4601; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v04602; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v14603; SI-GISEL-NEXT: v_log_f32_e32 v0, v04604; SI-GISEL-NEXT: v_log_f32_e32 v1, v14605; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v04606; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v14607; SI-GISEL-NEXT: s_setpc_b64 s[30:31]4608;4609; VI-SDAG-LABEL: v_log2_v2f16_fast:4610; VI-SDAG: ; %bb.0:4611; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4612; VI-SDAG-NEXT: v_log_f16_sdwa v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_14613; VI-SDAG-NEXT: v_log_f16_e32 v0, v04614; VI-SDAG-NEXT: v_or_b32_e32 v0, v0, v14615; VI-SDAG-NEXT: s_setpc_b64 s[30:31]4616;4617; VI-GISEL-LABEL: v_log2_v2f16_fast:4618; VI-GISEL: ; %bb.0:4619; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4620; VI-GISEL-NEXT: v_log_f16_e32 v1, v04621; VI-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_14622; VI-GISEL-NEXT: v_or_b32_e32 v0, v1, v04623; VI-GISEL-NEXT: s_setpc_b64 s[30:31]4624;4625; GFX900-SDAG-LABEL: v_log2_v2f16_fast:4626; GFX900-SDAG: ; %bb.0:4627; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4628; GFX900-SDAG-NEXT: v_log_f16_sdwa v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_14629; GFX900-SDAG-NEXT: v_log_f16_e32 v0, v04630; GFX900-SDAG-NEXT: v_pack_b32_f16 v0, v0, v14631; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]4632;4633; GFX900-GISEL-LABEL: v_log2_v2f16_fast:4634; GFX900-GISEL: ; %bb.0:4635; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4636; GFX900-GISEL-NEXT: v_log_f16_e32 v1, v04637; GFX900-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_14638; GFX900-GISEL-NEXT: v_pack_b32_f16 v0, v1, v04639; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]4640;4641; GFX1100-SDAG-TRUE16-LABEL: v_log2_v2f16_fast:4642; GFX1100-SDAG-TRUE16: ; %bb.0:4643; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4644; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v0.h, v0.h4645; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l4646; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4647; GFX1100-SDAG-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h4648; GFX1100-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]4649;4650; GFX1100-SDAG-FAKE16-LABEL: v_log2_v2f16_fast:4651; GFX1100-SDAG-FAKE16: ; %bb.0:4652; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4653; GFX1100-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v04654; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v0, v04655; GFX1100-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4656; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v1, v14657; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4658; GFX1100-SDAG-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v14659; GFX1100-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]4660;4661; GFX1100-GISEL-TRUE16-LABEL: v_log2_v2f16_fast:4662; GFX1100-GISEL-TRUE16: ; %bb.0:4663; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4664; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l4665; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.h, v0.h4666; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4667; GFX1100-GISEL-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h4668; GFX1100-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]4669;4670; GFX1100-GISEL-FAKE16-LABEL: v_log2_v2f16_fast:4671; GFX1100-GISEL-FAKE16: ; %bb.0:4672; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4673; GFX1100-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v04674; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v0, v04675; GFX1100-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4676; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v1, v14677; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4678; GFX1100-GISEL-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v14679; GFX1100-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]4680;4681; R600-LABEL: v_log2_v2f16_fast:4682; R600: ; %bb.0:4683; R600-NEXT: CF_END4684; R600-NEXT: PAD4685;4686; CM-LABEL: v_log2_v2f16_fast:4687; CM: ; %bb.0:4688; CM-NEXT: CF_END4689; CM-NEXT: PAD4690 %result = call fast <2 x half> @llvm.log2.v2f16(<2 x half> %in)4691 ret <2 x half> %result4692}4693 4694define <3 x half> @v_log2_v3f16(<3 x half> %in) {4695; SI-SDAG-LABEL: v_log2_v3f16:4696; SI-SDAG: ; %bb.0:4697; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4698; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04699; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v14700; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v24701; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v04702; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v14703; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v2, v24704; SI-SDAG-NEXT: v_log_f32_e32 v0, v04705; SI-SDAG-NEXT: v_log_f32_e32 v1, v14706; SI-SDAG-NEXT: v_log_f32_e32 v2, v24707; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04708; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v14709; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v24710; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v04711; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v14712; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v2, v24713; SI-SDAG-NEXT: s_setpc_b64 s[30:31]4714;4715; SI-GISEL-LABEL: v_log2_v3f16:4716; SI-GISEL: ; %bb.0:4717; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4718; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v04719; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v14720; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v2, v24721; SI-GISEL-NEXT: v_log_f32_e32 v0, v04722; SI-GISEL-NEXT: v_log_f32_e32 v1, v14723; SI-GISEL-NEXT: v_log_f32_e32 v2, v24724; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v04725; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v14726; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v2, v24727; SI-GISEL-NEXT: s_setpc_b64 s[30:31]4728;4729; VI-SDAG-LABEL: v_log2_v3f16:4730; VI-SDAG: ; %bb.0:4731; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4732; VI-SDAG-NEXT: v_log_f16_sdwa v2, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_14733; VI-SDAG-NEXT: v_log_f16_e32 v0, v04734; VI-SDAG-NEXT: v_log_f16_e32 v1, v14735; VI-SDAG-NEXT: v_or_b32_e32 v0, v0, v24736; VI-SDAG-NEXT: s_setpc_b64 s[30:31]4737;4738; VI-GISEL-LABEL: v_log2_v3f16:4739; VI-GISEL: ; %bb.0:4740; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4741; VI-GISEL-NEXT: v_log_f16_e32 v2, v04742; VI-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_14743; VI-GISEL-NEXT: v_log_f16_e32 v1, v14744; VI-GISEL-NEXT: v_or_b32_e32 v0, v2, v04745; VI-GISEL-NEXT: s_setpc_b64 s[30:31]4746;4747; GFX900-SDAG-LABEL: v_log2_v3f16:4748; GFX900-SDAG: ; %bb.0:4749; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4750; GFX900-SDAG-NEXT: v_log_f16_sdwa v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_14751; GFX900-SDAG-NEXT: v_log_f16_e32 v0, v04752; GFX900-SDAG-NEXT: v_log_f16_e32 v1, v14753; GFX900-SDAG-NEXT: v_pack_b32_f16 v0, v0, v24754; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]4755;4756; GFX900-GISEL-LABEL: v_log2_v3f16:4757; GFX900-GISEL: ; %bb.0:4758; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4759; GFX900-GISEL-NEXT: v_log_f16_e32 v2, v04760; GFX900-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_14761; GFX900-GISEL-NEXT: v_log_f16_e32 v1, v14762; GFX900-GISEL-NEXT: v_pack_b32_f16 v0, v2, v04763; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]4764;4765; GFX1100-SDAG-TRUE16-LABEL: v_log2_v3f16:4766; GFX1100-SDAG-TRUE16: ; %bb.0:4767; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4768; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v0.h, v0.h4769; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l4770; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v1.l, v1.l4771; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4772; GFX1100-SDAG-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h4773; GFX1100-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]4774;4775; GFX1100-SDAG-FAKE16-LABEL: v_log2_v3f16:4776; GFX1100-SDAG-FAKE16: ; %bb.0:4777; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4778; GFX1100-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v2, 16, v04779; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v0, v04780; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v1, v14781; GFX1100-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4782; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v2, v24783; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4784; GFX1100-SDAG-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v24785; GFX1100-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]4786;4787; GFX1100-GISEL-TRUE16-LABEL: v_log2_v3f16:4788; GFX1100-GISEL-TRUE16: ; %bb.0:4789; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4790; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l4791; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.h, v0.h4792; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v1.l, v1.l4793; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4794; GFX1100-GISEL-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h4795; GFX1100-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]4796;4797; GFX1100-GISEL-FAKE16-LABEL: v_log2_v3f16:4798; GFX1100-GISEL-FAKE16: ; %bb.0:4799; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4800; GFX1100-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v2, 16, v04801; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v0, v04802; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v1, v14803; GFX1100-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4804; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v2, v24805; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4806; GFX1100-GISEL-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v24807; GFX1100-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]4808;4809; R600-LABEL: v_log2_v3f16:4810; R600: ; %bb.0:4811; R600-NEXT: CF_END4812; R600-NEXT: PAD4813;4814; CM-LABEL: v_log2_v3f16:4815; CM: ; %bb.0:4816; CM-NEXT: CF_END4817; CM-NEXT: PAD4818 %result = call <3 x half> @llvm.log2.v3f16(<3 x half> %in)4819 ret <3 x half> %result4820}4821 4822define <3 x half> @v_log2_v3f16_fast(<3 x half> %in) {4823; SI-SDAG-LABEL: v_log2_v3f16_fast:4824; SI-SDAG: ; %bb.0:4825; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4826; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04827; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v14828; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v24829; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v04830; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v14831; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v2, v24832; SI-SDAG-NEXT: v_log_f32_e32 v0, v04833; SI-SDAG-NEXT: v_log_f32_e32 v1, v14834; SI-SDAG-NEXT: v_log_f32_e32 v2, v24835; SI-SDAG-NEXT: s_setpc_b64 s[30:31]4836;4837; SI-GISEL-LABEL: v_log2_v3f16_fast:4838; SI-GISEL: ; %bb.0:4839; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4840; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v04841; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v14842; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v2, v24843; SI-GISEL-NEXT: v_log_f32_e32 v0, v04844; SI-GISEL-NEXT: v_log_f32_e32 v1, v14845; SI-GISEL-NEXT: v_log_f32_e32 v2, v24846; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v04847; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v14848; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v2, v24849; SI-GISEL-NEXT: s_setpc_b64 s[30:31]4850;4851; VI-SDAG-LABEL: v_log2_v3f16_fast:4852; VI-SDAG: ; %bb.0:4853; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4854; VI-SDAG-NEXT: v_log_f16_sdwa v2, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_14855; VI-SDAG-NEXT: v_log_f16_e32 v0, v04856; VI-SDAG-NEXT: v_log_f16_e32 v1, v14857; VI-SDAG-NEXT: v_or_b32_e32 v0, v0, v24858; VI-SDAG-NEXT: s_setpc_b64 s[30:31]4859;4860; VI-GISEL-LABEL: v_log2_v3f16_fast:4861; VI-GISEL: ; %bb.0:4862; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4863; VI-GISEL-NEXT: v_log_f16_e32 v2, v04864; VI-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_14865; VI-GISEL-NEXT: v_log_f16_e32 v1, v14866; VI-GISEL-NEXT: v_or_b32_e32 v0, v2, v04867; VI-GISEL-NEXT: s_setpc_b64 s[30:31]4868;4869; GFX900-SDAG-LABEL: v_log2_v3f16_fast:4870; GFX900-SDAG: ; %bb.0:4871; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4872; GFX900-SDAG-NEXT: v_log_f16_sdwa v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_14873; GFX900-SDAG-NEXT: v_log_f16_e32 v0, v04874; GFX900-SDAG-NEXT: v_log_f16_e32 v1, v14875; GFX900-SDAG-NEXT: v_pack_b32_f16 v0, v0, v24876; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]4877;4878; GFX900-GISEL-LABEL: v_log2_v3f16_fast:4879; GFX900-GISEL: ; %bb.0:4880; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4881; GFX900-GISEL-NEXT: v_log_f16_e32 v2, v04882; GFX900-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_14883; GFX900-GISEL-NEXT: v_log_f16_e32 v1, v14884; GFX900-GISEL-NEXT: v_pack_b32_f16 v0, v2, v04885; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]4886;4887; GFX1100-SDAG-TRUE16-LABEL: v_log2_v3f16_fast:4888; GFX1100-SDAG-TRUE16: ; %bb.0:4889; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4890; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v0.h, v0.h4891; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l4892; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v1.l, v1.l4893; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4894; GFX1100-SDAG-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h4895; GFX1100-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]4896;4897; GFX1100-SDAG-FAKE16-LABEL: v_log2_v3f16_fast:4898; GFX1100-SDAG-FAKE16: ; %bb.0:4899; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4900; GFX1100-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v2, 16, v04901; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v0, v04902; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v1, v14903; GFX1100-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4904; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v2, v24905; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4906; GFX1100-SDAG-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v24907; GFX1100-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]4908;4909; GFX1100-GISEL-TRUE16-LABEL: v_log2_v3f16_fast:4910; GFX1100-GISEL-TRUE16: ; %bb.0:4911; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4912; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l4913; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.h, v0.h4914; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v1.l, v1.l4915; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4916; GFX1100-GISEL-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h4917; GFX1100-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]4918;4919; GFX1100-GISEL-FAKE16-LABEL: v_log2_v3f16_fast:4920; GFX1100-GISEL-FAKE16: ; %bb.0:4921; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4922; GFX1100-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v2, 16, v04923; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v0, v04924; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v1, v14925; GFX1100-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)4926; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v2, v24927; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)4928; GFX1100-GISEL-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v24929; GFX1100-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]4930;4931; R600-LABEL: v_log2_v3f16_fast:4932; R600: ; %bb.0:4933; R600-NEXT: CF_END4934; R600-NEXT: PAD4935;4936; CM-LABEL: v_log2_v3f16_fast:4937; CM: ; %bb.0:4938; CM-NEXT: CF_END4939; CM-NEXT: PAD4940 %result = call fast <3 x half> @llvm.log2.v3f16(<3 x half> %in)4941 ret <3 x half> %result4942}4943 4944define <4 x half> @v_log2_v4f16(<4 x half> %in) {4945; SI-SDAG-LABEL: v_log2_v4f16:4946; SI-SDAG: ; %bb.0:4947; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4948; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04949; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v14950; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v24951; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v3, v34952; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v04953; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v14954; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v2, v24955; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v3, v34956; SI-SDAG-NEXT: v_log_f32_e32 v0, v04957; SI-SDAG-NEXT: v_log_f32_e32 v1, v14958; SI-SDAG-NEXT: v_log_f32_e32 v2, v24959; SI-SDAG-NEXT: v_log_f32_e32 v3, v34960; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v04961; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v14962; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v24963; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v3, v34964; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v04965; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v14966; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v2, v24967; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v3, v34968; SI-SDAG-NEXT: s_setpc_b64 s[30:31]4969;4970; SI-GISEL-LABEL: v_log2_v4f16:4971; SI-GISEL: ; %bb.0:4972; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4973; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v04974; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v14975; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v2, v24976; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v3, v34977; SI-GISEL-NEXT: v_log_f32_e32 v0, v04978; SI-GISEL-NEXT: v_log_f32_e32 v1, v14979; SI-GISEL-NEXT: v_log_f32_e32 v2, v24980; SI-GISEL-NEXT: v_log_f32_e32 v3, v34981; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v04982; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v14983; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v2, v24984; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v3, v34985; SI-GISEL-NEXT: s_setpc_b64 s[30:31]4986;4987; VI-SDAG-LABEL: v_log2_v4f16:4988; VI-SDAG: ; %bb.0:4989; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4990; VI-SDAG-NEXT: v_log_f16_sdwa v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_14991; VI-SDAG-NEXT: v_log_f16_sdwa v3, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_14992; VI-SDAG-NEXT: v_log_f16_e32 v0, v04993; VI-SDAG-NEXT: v_log_f16_e32 v1, v14994; VI-SDAG-NEXT: v_or_b32_e32 v0, v0, v34995; VI-SDAG-NEXT: v_or_b32_e32 v1, v1, v24996; VI-SDAG-NEXT: s_setpc_b64 s[30:31]4997;4998; VI-GISEL-LABEL: v_log2_v4f16:4999; VI-GISEL: ; %bb.0:5000; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5001; VI-GISEL-NEXT: v_log_f16_e32 v2, v05002; VI-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_15003; VI-GISEL-NEXT: v_log_f16_e32 v3, v15004; VI-GISEL-NEXT: v_log_f16_sdwa v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_15005; VI-GISEL-NEXT: v_or_b32_e32 v0, v2, v05006; VI-GISEL-NEXT: v_or_b32_e32 v1, v3, v15007; VI-GISEL-NEXT: s_setpc_b64 s[30:31]5008;5009; GFX900-SDAG-LABEL: v_log2_v4f16:5010; GFX900-SDAG: ; %bb.0:5011; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5012; GFX900-SDAG-NEXT: v_log_f16_sdwa v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_15013; GFX900-SDAG-NEXT: v_log_f16_sdwa v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_15014; GFX900-SDAG-NEXT: v_log_f16_e32 v0, v05015; GFX900-SDAG-NEXT: v_log_f16_e32 v1, v15016; GFX900-SDAG-NEXT: v_pack_b32_f16 v0, v0, v35017; GFX900-SDAG-NEXT: v_pack_b32_f16 v1, v1, v25018; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]5019;5020; GFX900-GISEL-LABEL: v_log2_v4f16:5021; GFX900-GISEL: ; %bb.0:5022; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5023; GFX900-GISEL-NEXT: v_log_f16_e32 v2, v05024; GFX900-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_15025; GFX900-GISEL-NEXT: v_log_f16_e32 v3, v15026; GFX900-GISEL-NEXT: v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_15027; GFX900-GISEL-NEXT: v_pack_b32_f16 v0, v2, v05028; GFX900-GISEL-NEXT: v_pack_b32_f16 v1, v3, v15029; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]5030;5031; GFX1100-SDAG-TRUE16-LABEL: v_log2_v4f16:5032; GFX1100-SDAG-TRUE16: ; %bb.0:5033; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5034; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v1.h, v1.h5035; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v0.h, v0.h5036; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l5037; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v1.l, v1.l5038; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)5039; GFX1100-SDAG-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h5040; GFX1100-SDAG-TRUE16-NEXT: v_pack_b32_f16 v1, v1.l, v1.h5041; GFX1100-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]5042;5043; GFX1100-SDAG-FAKE16-LABEL: v_log2_v4f16:5044; GFX1100-SDAG-FAKE16: ; %bb.0:5045; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5046; GFX1100-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v2, 16, v05047; GFX1100-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v3, 16, v15048; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v1, v15049; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v0, v05050; GFX1100-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)5051; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v2, v25052; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v3, v35053; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)5054; GFX1100-SDAG-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v25055; GFX1100-SDAG-FAKE16-NEXT: v_pack_b32_f16 v1, v1, v35056; GFX1100-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]5057;5058; GFX1100-GISEL-TRUE16-LABEL: v_log2_v4f16:5059; GFX1100-GISEL-TRUE16: ; %bb.0:5060; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5061; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l5062; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.h, v0.h5063; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v1.l, v1.l5064; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v1.h, v1.h5065; GFX1100-GISEL-TRUE16-NEXT: s_delay_alu instid0(TRANS32_DEP_3)5066; GFX1100-GISEL-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h5067; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)5068; GFX1100-GISEL-TRUE16-NEXT: v_pack_b32_f16 v1, v1.l, v1.h5069; GFX1100-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]5070;5071; GFX1100-GISEL-FAKE16-LABEL: v_log2_v4f16:5072; GFX1100-GISEL-FAKE16: ; %bb.0:5073; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5074; GFX1100-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v2, 16, v05075; GFX1100-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v3, 16, v15076; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v0, v05077; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v1, v15078; GFX1100-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)5079; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v2, v25080; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v3, v35081; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)5082; GFX1100-GISEL-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v25083; GFX1100-GISEL-FAKE16-NEXT: v_pack_b32_f16 v1, v1, v35084; GFX1100-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]5085;5086; R600-LABEL: v_log2_v4f16:5087; R600: ; %bb.0:5088; R600-NEXT: CF_END5089; R600-NEXT: PAD5090;5091; CM-LABEL: v_log2_v4f16:5092; CM: ; %bb.0:5093; CM-NEXT: CF_END5094; CM-NEXT: PAD5095 %result = call <4 x half> @llvm.log2.v4f16(<4 x half> %in)5096 ret <4 x half> %result5097}5098 5099define <4 x half> @v_log2_v4f16_fast(<4 x half> %in) {5100; SI-SDAG-LABEL: v_log2_v4f16_fast:5101; SI-SDAG: ; %bb.0:5102; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5103; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v05104; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v15105; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v25106; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v3, v35107; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v05108; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v15109; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v2, v25110; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v3, v35111; SI-SDAG-NEXT: v_log_f32_e32 v0, v05112; SI-SDAG-NEXT: v_log_f32_e32 v1, v15113; SI-SDAG-NEXT: v_log_f32_e32 v2, v25114; SI-SDAG-NEXT: v_log_f32_e32 v3, v35115; SI-SDAG-NEXT: s_setpc_b64 s[30:31]5116;5117; SI-GISEL-LABEL: v_log2_v4f16_fast:5118; SI-GISEL: ; %bb.0:5119; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5120; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v05121; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v15122; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v2, v25123; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v3, v35124; SI-GISEL-NEXT: v_log_f32_e32 v0, v05125; SI-GISEL-NEXT: v_log_f32_e32 v1, v15126; SI-GISEL-NEXT: v_log_f32_e32 v2, v25127; SI-GISEL-NEXT: v_log_f32_e32 v3, v35128; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v05129; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v15130; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v2, v25131; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v3, v35132; SI-GISEL-NEXT: s_setpc_b64 s[30:31]5133;5134; VI-SDAG-LABEL: v_log2_v4f16_fast:5135; VI-SDAG: ; %bb.0:5136; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5137; VI-SDAG-NEXT: v_log_f16_sdwa v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_15138; VI-SDAG-NEXT: v_log_f16_sdwa v3, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_15139; VI-SDAG-NEXT: v_log_f16_e32 v0, v05140; VI-SDAG-NEXT: v_log_f16_e32 v1, v15141; VI-SDAG-NEXT: v_or_b32_e32 v0, v0, v35142; VI-SDAG-NEXT: v_or_b32_e32 v1, v1, v25143; VI-SDAG-NEXT: s_setpc_b64 s[30:31]5144;5145; VI-GISEL-LABEL: v_log2_v4f16_fast:5146; VI-GISEL: ; %bb.0:5147; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5148; VI-GISEL-NEXT: v_log_f16_e32 v2, v05149; VI-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_15150; VI-GISEL-NEXT: v_log_f16_e32 v3, v15151; VI-GISEL-NEXT: v_log_f16_sdwa v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_15152; VI-GISEL-NEXT: v_or_b32_e32 v0, v2, v05153; VI-GISEL-NEXT: v_or_b32_e32 v1, v3, v15154; VI-GISEL-NEXT: s_setpc_b64 s[30:31]5155;5156; GFX900-SDAG-LABEL: v_log2_v4f16_fast:5157; GFX900-SDAG: ; %bb.0:5158; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5159; GFX900-SDAG-NEXT: v_log_f16_sdwa v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_15160; GFX900-SDAG-NEXT: v_log_f16_sdwa v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_15161; GFX900-SDAG-NEXT: v_log_f16_e32 v0, v05162; GFX900-SDAG-NEXT: v_log_f16_e32 v1, v15163; GFX900-SDAG-NEXT: v_pack_b32_f16 v0, v0, v35164; GFX900-SDAG-NEXT: v_pack_b32_f16 v1, v1, v25165; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]5166;5167; GFX900-GISEL-LABEL: v_log2_v4f16_fast:5168; GFX900-GISEL: ; %bb.0:5169; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5170; GFX900-GISEL-NEXT: v_log_f16_e32 v2, v05171; GFX900-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_15172; GFX900-GISEL-NEXT: v_log_f16_e32 v3, v15173; GFX900-GISEL-NEXT: v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_15174; GFX900-GISEL-NEXT: v_pack_b32_f16 v0, v2, v05175; GFX900-GISEL-NEXT: v_pack_b32_f16 v1, v3, v15176; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31]5177;5178; GFX1100-SDAG-TRUE16-LABEL: v_log2_v4f16_fast:5179; GFX1100-SDAG-TRUE16: ; %bb.0:5180; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5181; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v1.h, v1.h5182; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v0.h, v0.h5183; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l5184; GFX1100-SDAG-TRUE16-NEXT: v_log_f16_e32 v1.l, v1.l5185; GFX1100-SDAG-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)5186; GFX1100-SDAG-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h5187; GFX1100-SDAG-TRUE16-NEXT: v_pack_b32_f16 v1, v1.l, v1.h5188; GFX1100-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]5189;5190; GFX1100-SDAG-FAKE16-LABEL: v_log2_v4f16_fast:5191; GFX1100-SDAG-FAKE16: ; %bb.0:5192; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5193; GFX1100-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v2, 16, v05194; GFX1100-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v3, 16, v15195; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v1, v15196; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v0, v05197; GFX1100-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)5198; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v2, v25199; GFX1100-SDAG-FAKE16-NEXT: v_log_f16_e32 v3, v35200; GFX1100-SDAG-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)5201; GFX1100-SDAG-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v25202; GFX1100-SDAG-FAKE16-NEXT: v_pack_b32_f16 v1, v1, v35203; GFX1100-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]5204;5205; GFX1100-GISEL-TRUE16-LABEL: v_log2_v4f16_fast:5206; GFX1100-GISEL-TRUE16: ; %bb.0:5207; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5208; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.l, v0.l5209; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v0.h, v0.h5210; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v1.l, v1.l5211; GFX1100-GISEL-TRUE16-NEXT: v_log_f16_e32 v1.h, v1.h5212; GFX1100-GISEL-TRUE16-NEXT: s_delay_alu instid0(TRANS32_DEP_3)5213; GFX1100-GISEL-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h5214; GFX1100-GISEL-TRUE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)5215; GFX1100-GISEL-TRUE16-NEXT: v_pack_b32_f16 v1, v1.l, v1.h5216; GFX1100-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]5217;5218; GFX1100-GISEL-FAKE16-LABEL: v_log2_v4f16_fast:5219; GFX1100-GISEL-FAKE16: ; %bb.0:5220; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5221; GFX1100-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v2, 16, v05222; GFX1100-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v3, 16, v15223; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v0, v05224; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v1, v15225; GFX1100-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)5226; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v2, v25227; GFX1100-GISEL-FAKE16-NEXT: v_log_f16_e32 v3, v35228; GFX1100-GISEL-FAKE16-NEXT: s_waitcnt_depctr depctr_va_vdst(0)5229; GFX1100-GISEL-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v25230; GFX1100-GISEL-FAKE16-NEXT: v_pack_b32_f16 v1, v1, v35231; GFX1100-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]5232;5233; R600-LABEL: v_log2_v4f16_fast:5234; R600: ; %bb.0:5235; R600-NEXT: CF_END5236; R600-NEXT: PAD5237;5238; CM-LABEL: v_log2_v4f16_fast:5239; CM: ; %bb.0:5240; CM-NEXT: CF_END5241; CM-NEXT: PAD5242 %result = call fast <4 x half> @llvm.log2.v4f16(<4 x half> %in)5243 ret <4 x half> %result5244}5245 5246declare float @llvm.fabs.f32(float) #25247declare float @llvm.log2.f32(float) #25248declare <2 x float> @llvm.log2.v2f32(<2 x float>) #25249declare <3 x float> @llvm.log2.v3f32(<3 x float>) #25250declare <4 x float> @llvm.log2.v4f32(<4 x float>) #25251declare half @llvm.fabs.f16(half) #25252declare half @llvm.log2.f16(half) #25253declare <2 x half> @llvm.log2.v2f16(<2 x half>) #25254declare <3 x half> @llvm.log2.v3f16(<3 x half>) #25255declare <4 x half> @llvm.log2.v4f16(<4 x half>) #25256declare <2 x half> @llvm.fabs.v2f16(<2 x half>) #25257 5258attributes #0 = { "denormal-fp-math-f32"="ieee,preserve-sign" }5259attributes #1 = { "denormal-fp-math-f32"="dynamic,dynamic" }5260attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }5261