1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GFX689,SI,GFX689-SDAG,SI-SDAG %s 3; RUN: llc -global-isel=1 -global-isel-abort=2 -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GFX689,SI,GFX689-GISEL,SI-GISEL %s 4; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GFX689,VI,GFX689-SDAG,VI-SDAG %s 5; RUN: llc -global-isel=1 -global-isel-abort=2 -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GFX689,VI,GFX689-GISEL,VI-GISEL %s 6; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX689,GFX900,GFX689-SDAG,GFX900-SDAG %s 7; RUN: llc -global-isel=1 -global-isel-abort=2 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX689,GFX900,GFX689-GISEL,GFX900-GISEL %s 8; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GFX1100,GFX1100-SDAG %s 9; RUN: llc -global-isel=1 -global-isel-abort=2 -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GFX1100,GFX1100-GISEL %s 10 11; RUN: llc -mtriple=r600 -mcpu=redwood < %s | FileCheck -check-prefix=R600 %s 12; RUN: llc -mtriple=r600 -mcpu=cayman < %s | FileCheck -check-prefix=CM %s 13 14define amdgpu_kernel void @s_log_f32(ptr addrspace(1) %out, float %in) { 15; SI-SDAG-LABEL: s_log_f32: 16; SI-SDAG: ; %bb.0: 17; SI-SDAG-NEXT: s_load_dword s0, s[4:5], 0xb 18; SI-SDAG-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x9 19; SI-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000 20; SI-SDAG-NEXT: s_mov_b32 s1, 0x3377d1cf 21; SI-SDAG-NEXT: s_mov_b32 s7, 0xf000 22; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0) 23; SI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s0, v0 24; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 25; SI-SDAG-NEXT: v_lshlrev_b32_e32 v0, 5, v0 26; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, s0, v0 27; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 28; SI-SDAG-NEXT: s_mov_b32 s0, 0x3f317217 29; SI-SDAG-NEXT: s_mov_b32 s6, -1 30; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 31; SI-SDAG-NEXT: v_fma_f32 v2, v0, s0, -v1 32; SI-SDAG-NEXT: v_fma_f32 v2, v0, s1, v2 33; SI-SDAG-NEXT: s_mov_b32 s0, 0x7f800000 34; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 35; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], |v0|, s0 36; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[0:1] 37; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 38; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 39; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 40; SI-SDAG-NEXT: buffer_store_dword v0, off, s[4:7], 0 41; SI-SDAG-NEXT: s_endpgm 42; 43; SI-GISEL-LABEL: s_log_f32: 44; SI-GISEL: ; %bb.0: 45; SI-GISEL-NEXT: s_load_dword s0, s[4:5], 0xb 46; SI-GISEL-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x9 47; SI-GISEL-NEXT: v_mov_b32_e32 v0, 0x800000 48; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 49; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x3377d1cf 50; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0) 51; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s0, v0 52; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 53; SI-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0 54; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, s0, v0 55; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 56; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x7f800000 57; SI-GISEL-NEXT: s_mov_b32 s6, -1 58; SI-GISEL-NEXT: s_mov_b32 s7, 0xf000 59; SI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3f317217, v0 60; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v4 61; SI-GISEL-NEXT: v_fma_f32 v1, v0, v2, v1 62; SI-GISEL-NEXT: v_add_f32_e32 v1, v4, v1 63; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], |v0|, v3 64; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[0:1] 65; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 66; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 67; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 68; SI-GISEL-NEXT: buffer_store_dword v0, off, s[4:7], 0 69; SI-GISEL-NEXT: s_endpgm 70; 71; VI-SDAG-LABEL: s_log_f32: 72; VI-SDAG: ; %bb.0: 73; VI-SDAG-NEXT: s_load_dword s0, s[4:5], 0x2c 74; VI-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x24 75; VI-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000 76; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0) 77; VI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s0, v0 78; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 79; VI-SDAG-NEXT: v_lshlrev_b32_e32 v0, 5, v0 80; VI-SDAG-NEXT: v_ldexp_f32 v0, s0, v0 81; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 82; VI-SDAG-NEXT: s_mov_b32 s0, 0x7f800000 83; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 84; VI-SDAG-NEXT: v_sub_f32_e32 v2, v0, v1 85; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v1 86; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3f317000, v2 87; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v2 88; VI-SDAG-NEXT: v_add_f32_e32 v2, v3, v2 89; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 90; VI-SDAG-NEXT: v_add_f32_e32 v2, v4, v2 91; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 92; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], |v0|, s0 93; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[0:1] 94; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 95; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 96; VI-SDAG-NEXT: v_sub_f32_e32 v2, v0, v1 97; VI-SDAG-NEXT: v_mov_b32_e32 v0, s2 98; VI-SDAG-NEXT: v_mov_b32_e32 v1, s3 99; VI-SDAG-NEXT: flat_store_dword v[0:1], v2 100; VI-SDAG-NEXT: s_endpgm 101; 102; VI-GISEL-LABEL: s_log_f32: 103; VI-GISEL: ; %bb.0: 104; VI-GISEL-NEXT: s_load_dword s0, s[4:5], 0x2c 105; VI-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x24 106; VI-GISEL-NEXT: v_mov_b32_e32 v0, 0x800000 107; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x7f800000 108; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0) 109; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s0, v0 110; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 111; VI-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0 112; VI-GISEL-NEXT: v_ldexp_f32 v0, s0, v0 113; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 114; VI-GISEL-NEXT: v_and_b32_e32 v2, 0xfffff000, v0 115; VI-GISEL-NEXT: v_sub_f32_e32 v3, v0, v2 116; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 117; VI-GISEL-NEXT: v_mul_f32_e32 v5, 0x3805fdf4, v3 118; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3f317000, v3 119; VI-GISEL-NEXT: v_add_f32_e32 v4, v4, v5 120; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 121; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 122; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 123; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], |v0|, v1 124; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 125; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v2, s[0:1] 126; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 127; VI-GISEL-NEXT: v_sub_f32_e32 v2, v0, v1 128; VI-GISEL-NEXT: v_mov_b32_e32 v0, s2 129; VI-GISEL-NEXT: v_mov_b32_e32 v1, s3 130; VI-GISEL-NEXT: flat_store_dword v[0:1], v2 131; VI-GISEL-NEXT: s_endpgm 132; 133; GFX900-SDAG-LABEL: s_log_f32: 134; GFX900-SDAG: ; %bb.0: 135; GFX900-SDAG-NEXT: s_load_dword s0, s[4:5], 0x2c 136; GFX900-SDAG-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x24 137; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x800000 138; GFX900-SDAG-NEXT: s_mov_b32 s1, 0x3377d1cf 139; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 140; GFX900-SDAG-NEXT: s_waitcnt lgkmcnt(0) 141; GFX900-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s0, v1 142; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 143; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 144; GFX900-SDAG-NEXT: v_ldexp_f32 v1, s0, v1 145; GFX900-SDAG-NEXT: v_log_f32_e32 v1, v1 146; GFX900-SDAG-NEXT: s_mov_b32 s0, 0x3f317217 147; GFX900-SDAG-NEXT: v_mov_b32_e32 v0, 0 148; GFX900-SDAG-NEXT: v_mul_f32_e32 v2, 0x3f317217, v1 149; GFX900-SDAG-NEXT: v_fma_f32 v3, v1, s0, -v2 150; GFX900-SDAG-NEXT: v_fma_f32 v3, v1, s1, v3 151; GFX900-SDAG-NEXT: v_add_f32_e32 v2, v2, v3 152; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], |v1|, s4 153; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, v1, v2, s[0:1] 154; GFX900-SDAG-NEXT: v_mov_b32_e32 v2, 0x41b17218 155; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc 156; GFX900-SDAG-NEXT: v_sub_f32_e32 v1, v1, v2 157; GFX900-SDAG-NEXT: global_store_dword v0, v1, s[2:3] 158; GFX900-SDAG-NEXT: s_endpgm 159; 160; GFX900-GISEL-LABEL: s_log_f32: 161; GFX900-GISEL: ; %bb.0: 162; GFX900-GISEL-NEXT: s_load_dword s0, s[4:5], 0x2c 163; GFX900-GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x24 164; GFX900-GISEL-NEXT: v_mov_b32_e32 v0, 0x800000 165; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x3f317217 166; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 167; GFX900-GISEL-NEXT: s_waitcnt lgkmcnt(0) 168; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s0, v0 169; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 170; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0 171; GFX900-GISEL-NEXT: v_ldexp_f32 v0, s0, v0 172; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 173; GFX900-GISEL-NEXT: v_mov_b32_e32 v4, 0x7f800000 174; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0 175; GFX900-GISEL-NEXT: v_mul_f32_e32 v5, 0x3f317217, v0 176; GFX900-GISEL-NEXT: v_fma_f32 v2, v0, v2, -v5 177; GFX900-GISEL-NEXT: v_fma_f32 v2, v0, v3, v2 178; GFX900-GISEL-NEXT: v_add_f32_e32 v2, v5, v2 179; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], |v0|, v4 180; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v2, s[0:1] 181; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x41b17218 182; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc 183; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v2 184; GFX900-GISEL-NEXT: global_store_dword v1, v0, s[2:3] 185; GFX900-GISEL-NEXT: s_endpgm 186; 187; GFX1100-SDAG-LABEL: s_log_f32: 188; GFX1100-SDAG: ; %bb.0: 189; GFX1100-SDAG-NEXT: s_load_b32 s0, s[4:5], 0x2c 190; GFX1100-SDAG-NEXT: s_waitcnt lgkmcnt(0) 191; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s2, 0x800000, s0 192; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 193; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s2 194; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v0, 5, v0 195; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 196; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, s0, v0 197; GFX1100-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 198; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 199; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 200; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 201; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 202; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 203; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 204; GFX1100-SDAG-NEXT: v_fmamk_f32 v2, v0, 0x3377d1cf, v2 205; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 206; GFX1100-SDAG-NEXT: v_dual_add_f32 v1, v1, v2 :: v_dual_mov_b32 v2, 0 207; GFX1100-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 208; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, s2 209; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) 210; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 211; GFX1100-SDAG-NEXT: s_waitcnt lgkmcnt(0) 212; GFX1100-SDAG-NEXT: global_store_b32 v2, v0, s[0:1] 213; GFX1100-SDAG-NEXT: s_endpgm 214; 215; GFX1100-GISEL-LABEL: s_log_f32: 216; GFX1100-GISEL: ; %bb.0: 217; GFX1100-GISEL-NEXT: s_load_b32 s0, s[4:5], 0x2c 218; GFX1100-GISEL-NEXT: s_waitcnt lgkmcnt(0) 219; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s2, 0x800000, s0 220; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 221; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s2 222; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0 223; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 224; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, s0, v0 225; GFX1100-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 226; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 227; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 228; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 229; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 230; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 231; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 232; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 233; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 234; GFX1100-GISEL-NEXT: v_dual_add_f32 v1, v1, v2 :: v_dual_mov_b32 v2, 0 235; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 236; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, s2 237; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) 238; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 239; GFX1100-GISEL-NEXT: s_waitcnt lgkmcnt(0) 240; GFX1100-GISEL-NEXT: global_store_b32 v2, v0, s[0:1] 241; GFX1100-GISEL-NEXT: s_endpgm 242; 243; R600-LABEL: s_log_f32: 244; R600: ; %bb.0: 245; R600-NEXT: ALU 23, @4, KC0[CB0:0-32], KC1[] 246; R600-NEXT: MEM_RAT_CACHELESS STORE_RAW T0.X, T1.X, 1 247; R600-NEXT: CF_END 248; R600-NEXT: PAD 249; R600-NEXT: ALU clause starting at 4: 250; R600-NEXT: SETGT * T0.W, literal.x, KC0[2].Z, 251; R600-NEXT: 8388608(1.175494e-38), 0(0.000000e+00) 252; R600-NEXT: CNDE * T1.W, PV.W, 1.0, literal.x, 253; R600-NEXT: 1333788672(4.294967e+09), 0(0.000000e+00) 254; R600-NEXT: MUL_IEEE * T1.W, KC0[2].Z, PV.W, 255; R600-NEXT: LOG_IEEE * T0.X, PV.W, 256; R600-NEXT: AND_INT * T1.W, PS, literal.x, 257; R600-NEXT: -4096(nan), 0(0.000000e+00) 258; R600-NEXT: ADD * T2.W, T0.X, -PV.W, 259; R600-NEXT: MUL_IEEE * T3.W, PV.W, literal.x, 260; R600-NEXT: 939916788(3.194618e-05), 0(0.000000e+00) 261; R600-NEXT: MULADD_IEEE * T3.W, T1.W, literal.x, PV.W, 262; R600-NEXT: 939916788(3.194618e-05), 0(0.000000e+00) 263; R600-NEXT: MULADD_IEEE * T2.W, T2.W, literal.x, PV.W, 264; R600-NEXT: 1060204544(6.931152e-01), 0(0.000000e+00) 265; R600-NEXT: MULADD_IEEE T1.W, T1.W, literal.x, PV.W, 266; R600-NEXT: SETGT * T2.W, literal.y, |T0.X|, 267; R600-NEXT: 1060204544(6.931152e-01), 2139095040(INF) 268; R600-NEXT: CNDE T1.W, PS, T0.X, PV.W, 269; R600-NEXT: CNDE * T0.W, T0.W, 0.0, literal.x, 270; R600-NEXT: 1102148120(2.218071e+01), 0(0.000000e+00) 271; R600-NEXT: ADD T0.X, PV.W, -PS, 272; R600-NEXT: LSHR * T1.X, KC0[2].Y, literal.x, 273; R600-NEXT: 2(2.802597e-45), 0(0.000000e+00) 274; 275; CM-LABEL: s_log_f32: 276; CM: ; %bb.0: 277; CM-NEXT: ALU 26, @4, KC0[CB0:0-32], KC1[] 278; CM-NEXT: MEM_RAT_CACHELESS STORE_DWORD T0.X, T1.X 279; CM-NEXT: CF_END 280; CM-NEXT: PAD 281; CM-NEXT: ALU clause starting at 4: 282; CM-NEXT: SETGT * T0.W, literal.x, KC0[2].Z, 283; CM-NEXT: 8388608(1.175494e-38), 0(0.000000e+00) 284; CM-NEXT: CNDE * T1.W, PV.W, 1.0, literal.x, 285; CM-NEXT: 1333788672(4.294967e+09), 0(0.000000e+00) 286; CM-NEXT: MUL_IEEE * T1.W, KC0[2].Z, PV.W, 287; CM-NEXT: LOG_IEEE T0.X, T1.W, 288; CM-NEXT: LOG_IEEE T0.Y (MASKED), T1.W, 289; CM-NEXT: LOG_IEEE T0.Z (MASKED), T1.W, 290; CM-NEXT: LOG_IEEE * T0.W (MASKED), T1.W, 291; CM-NEXT: AND_INT * T1.W, PV.X, literal.x, 292; CM-NEXT: -4096(nan), 0(0.000000e+00) 293; CM-NEXT: ADD * T2.W, T0.X, -PV.W, 294; CM-NEXT: MUL_IEEE * T3.W, PV.W, literal.x, 295; CM-NEXT: 939916788(3.194618e-05), 0(0.000000e+00) 296; CM-NEXT: MULADD_IEEE * T3.W, T1.W, literal.x, PV.W, 297; CM-NEXT: 939916788(3.194618e-05), 0(0.000000e+00) 298; CM-NEXT: MULADD_IEEE * T2.W, T2.W, literal.x, PV.W, 299; CM-NEXT: 1060204544(6.931152e-01), 0(0.000000e+00) 300; CM-NEXT: MULADD_IEEE T0.Z, T1.W, literal.x, PV.W, 301; CM-NEXT: SETGT * T1.W, literal.y, |T0.X|, 302; CM-NEXT: 1060204544(6.931152e-01), 2139095040(INF) 303; CM-NEXT: CNDE T0.Z, PV.W, T0.X, PV.Z, 304; CM-NEXT: CNDE * T0.W, T0.W, 0.0, literal.x, 305; CM-NEXT: 1102148120(2.218071e+01), 0(0.000000e+00) 306; CM-NEXT: ADD * T0.X, PV.Z, -PV.W, 307; CM-NEXT: LSHR * T1.X, KC0[2].Y, literal.x, 308; CM-NEXT: 2(2.802597e-45), 0(0.000000e+00) 309 %result = call float @llvm.log.f32(float %in) 310 store float %result, ptr addrspace(1) %out 311 ret void 312} 313 314; FIXME: We should be able to merge these packets together on Cayman so we 315; have a maximum of 4 instructions. 316define amdgpu_kernel void @s_log_v2f32(ptr addrspace(1) %out, <2 x float> %in) { 317; SI-SDAG-LABEL: s_log_v2f32: 318; SI-SDAG: ; %bb.0: 319; SI-SDAG-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x9 320; SI-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000 321; SI-SDAG-NEXT: s_mov_b32 s8, 0x3377d1cf 322; SI-SDAG-NEXT: s_mov_b32 s9, 0x7f800000 323; SI-SDAG-NEXT: s_mov_b32 s7, 0xf000 324; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0) 325; SI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s3, v0 326; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 327; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 328; SI-SDAG-NEXT: v_ldexp_f32_e32 v1, s3, v1 329; SI-SDAG-NEXT: v_log_f32_e32 v1, v1 330; SI-SDAG-NEXT: s_mov_b32 s3, 0x3f317217 331; SI-SDAG-NEXT: s_mov_b32 s4, s0 332; SI-SDAG-NEXT: s_mov_b32 s5, s1 333; SI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3f317217, v1 334; SI-SDAG-NEXT: v_fma_f32 v3, v1, s3, -v2 335; SI-SDAG-NEXT: v_fma_f32 v3, v1, s8, v3 336; SI-SDAG-NEXT: v_add_f32_e32 v2, v2, v3 337; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], |v1|, s9 338; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, v1, v2, s[0:1] 339; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], s2, v0 340; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[0:1] 341; SI-SDAG-NEXT: v_lshlrev_b32_e32 v0, 5, v0 342; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, s2, v0 343; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 344; SI-SDAG-NEXT: v_mov_b32_e32 v2, 0x41b17218 345; SI-SDAG-NEXT: v_cndmask_b32_e32 v3, 0, v2, vcc 346; SI-SDAG-NEXT: v_sub_f32_e32 v1, v1, v3 347; SI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317217, v0 348; SI-SDAG-NEXT: v_fma_f32 v4, v0, s3, -v3 349; SI-SDAG-NEXT: v_fma_f32 v4, v0, s8, v4 350; SI-SDAG-NEXT: v_add_f32_e32 v3, v3, v4 351; SI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s9 352; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v3, vcc 353; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, v2, s[0:1] 354; SI-SDAG-NEXT: s_mov_b32 s6, -1 355; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v2 356; SI-SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 0 357; SI-SDAG-NEXT: s_endpgm 358; 359; SI-GISEL-LABEL: s_log_v2f32: 360; SI-GISEL: ; %bb.0: 361; SI-GISEL-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x9 362; SI-GISEL-NEXT: v_mov_b32_e32 v0, 0x800000 363; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x3f317217 364; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 365; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x7f800000 366; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0) 367; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s6, v0 368; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 369; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 370; SI-GISEL-NEXT: v_ldexp_f32_e32 v1, s6, v1 371; SI-GISEL-NEXT: v_log_f32_e32 v1, v1 372; SI-GISEL-NEXT: s_mov_b32 s6, -1 373; SI-GISEL-NEXT: v_mul_f32_e32 v5, 0x3f317217, v1 374; SI-GISEL-NEXT: v_fma_f32 v6, v1, v2, -v5 375; SI-GISEL-NEXT: v_fma_f32 v6, v1, v3, v6 376; SI-GISEL-NEXT: v_add_f32_e32 v5, v5, v6 377; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], |v1|, v4 378; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, v1, v5, s[0:1] 379; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s7, v0 380; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[0:1] 381; SI-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0 382; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, s7, v0 383; SI-GISEL-NEXT: v_log_f32_e32 v5, v0 384; SI-GISEL-NEXT: v_mov_b32_e32 v6, 0x41b17218 385; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v6, vcc 386; SI-GISEL-NEXT: v_sub_f32_e32 v0, v1, v0 387; SI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v5 388; SI-GISEL-NEXT: v_fma_f32 v2, v5, v2, -v1 389; SI-GISEL-NEXT: v_fma_f32 v2, v5, v3, v2 390; SI-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 391; SI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v5|, v4 392; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc 393; SI-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, v6, s[0:1] 394; SI-GISEL-NEXT: v_sub_f32_e32 v1, v1, v2 395; SI-GISEL-NEXT: s_mov_b32 s7, 0xf000 396; SI-GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 0 397; SI-GISEL-NEXT: s_endpgm 398; 399; VI-SDAG-LABEL: s_log_v2f32: 400; VI-SDAG: ; %bb.0: 401; VI-SDAG-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x24 402; VI-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000 403; VI-SDAG-NEXT: s_mov_b32 s2, 0x7f800000 404; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0) 405; VI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s7, v0 406; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 407; VI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 408; VI-SDAG-NEXT: v_ldexp_f32 v1, s7, v1 409; VI-SDAG-NEXT: v_log_f32_e32 v1, v1 410; VI-SDAG-NEXT: v_and_b32_e32 v2, 0xfffff000, v1 411; VI-SDAG-NEXT: v_sub_f32_e32 v3, v1, v2 412; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 413; VI-SDAG-NEXT: v_mul_f32_e32 v5, 0x3f317000, v3 414; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v3 415; VI-SDAG-NEXT: v_add_f32_e32 v3, v4, v3 416; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 417; VI-SDAG-NEXT: v_add_f32_e32 v3, v5, v3 418; VI-SDAG-NEXT: v_add_f32_e32 v2, v2, v3 419; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], |v1|, s2 420; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, v1, v2, s[0:1] 421; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], s6, v0 422; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[0:1] 423; VI-SDAG-NEXT: v_lshlrev_b32_e32 v0, 5, v0 424; VI-SDAG-NEXT: v_ldexp_f32 v0, s6, v0 425; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 426; VI-SDAG-NEXT: v_mov_b32_e32 v2, 0x41b17218 427; VI-SDAG-NEXT: v_cndmask_b32_e32 v3, 0, v2, vcc 428; VI-SDAG-NEXT: v_sub_f32_e32 v1, v1, v3 429; VI-SDAG-NEXT: v_and_b32_e32 v3, 0xfffff000, v0 430; VI-SDAG-NEXT: v_sub_f32_e32 v4, v0, v3 431; VI-SDAG-NEXT: v_mul_f32_e32 v5, 0x3f317000, v4 432; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v4 433; VI-SDAG-NEXT: v_mul_f32_e32 v6, 0x3805fdf4, v3 434; VI-SDAG-NEXT: v_add_f32_e32 v4, v6, v4 435; VI-SDAG-NEXT: v_add_f32_e32 v4, v5, v4 436; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317000, v3 437; VI-SDAG-NEXT: v_add_f32_e32 v3, v3, v4 438; VI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s2 439; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v3, vcc 440; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, v2, s[0:1] 441; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v2 442; VI-SDAG-NEXT: v_mov_b32_e32 v2, s4 443; VI-SDAG-NEXT: v_mov_b32_e32 v3, s5 444; VI-SDAG-NEXT: flat_store_dwordx2 v[2:3], v[0:1] 445; VI-SDAG-NEXT: s_endpgm 446; 447; VI-GISEL-LABEL: s_log_v2f32: 448; VI-GISEL: ; %bb.0: 449; VI-GISEL-NEXT: s_load_dwordx4 s[4:7], s[4:5], 0x24 450; VI-GISEL-NEXT: v_mov_b32_e32 v0, 0x800000 451; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 452; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0) 453; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s6, v0 454; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 455; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 456; VI-GISEL-NEXT: v_ldexp_f32 v1, s6, v1 457; VI-GISEL-NEXT: v_log_f32_e32 v1, v1 458; VI-GISEL-NEXT: v_and_b32_e32 v3, 0xfffff000, v1 459; VI-GISEL-NEXT: v_sub_f32_e32 v4, v1, v3 460; VI-GISEL-NEXT: v_mul_f32_e32 v5, 0x3805fdf4, v3 461; VI-GISEL-NEXT: v_mul_f32_e32 v6, 0x3805fdf4, v4 462; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3f317000, v4 463; VI-GISEL-NEXT: v_add_f32_e32 v5, v5, v6 464; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3f317000, v3 465; VI-GISEL-NEXT: v_add_f32_e32 v4, v4, v5 466; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 467; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], |v1|, v2 468; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, v1, v3, s[0:1] 469; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s7, v0 470; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[0:1] 471; VI-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0 472; VI-GISEL-NEXT: v_ldexp_f32 v0, s7, v0 473; VI-GISEL-NEXT: v_log_f32_e32 v3, v0 474; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x41b17218 475; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v4, vcc 476; VI-GISEL-NEXT: v_sub_f32_e32 v0, v1, v0 477; VI-GISEL-NEXT: v_and_b32_e32 v1, 0xfffff000, v3 478; VI-GISEL-NEXT: v_sub_f32_e32 v5, v3, v1 479; VI-GISEL-NEXT: v_mul_f32_e32 v6, 0x3805fdf4, v5 480; VI-GISEL-NEXT: v_mul_f32_e32 v7, 0x3805fdf4, v1 481; VI-GISEL-NEXT: v_add_f32_e32 v6, v7, v6 482; VI-GISEL-NEXT: v_mul_f32_e32 v5, 0x3f317000, v5 483; VI-GISEL-NEXT: v_add_f32_e32 v5, v5, v6 484; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 485; VI-GISEL-NEXT: v_add_f32_e32 v1, v1, v5 486; VI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v3|, v2 487; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc 488; VI-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, v4, s[0:1] 489; VI-GISEL-NEXT: v_sub_f32_e32 v1, v1, v2 490; VI-GISEL-NEXT: v_mov_b32_e32 v2, s4 491; VI-GISEL-NEXT: v_mov_b32_e32 v3, s5 492; VI-GISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1] 493; VI-GISEL-NEXT: s_endpgm 494; 495; GFX900-SDAG-LABEL: s_log_v2f32: 496; GFX900-SDAG: ; %bb.0: 497; GFX900-SDAG-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x24 498; GFX900-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000 499; GFX900-SDAG-NEXT: s_mov_b32 s2, 0x3f317217 500; GFX900-SDAG-NEXT: s_mov_b32 s3, 0x3377d1cf 501; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 502; GFX900-SDAG-NEXT: s_waitcnt lgkmcnt(0) 503; GFX900-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s11, v0 504; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 505; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 506; GFX900-SDAG-NEXT: v_ldexp_f32 v1, s11, v1 507; GFX900-SDAG-NEXT: v_log_f32_e32 v1, v1 508; GFX900-SDAG-NEXT: v_mov_b32_e32 v2, 0 509; GFX900-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317217, v1 510; GFX900-SDAG-NEXT: v_fma_f32 v4, v1, s2, -v3 511; GFX900-SDAG-NEXT: v_fma_f32 v4, v1, s3, v4 512; GFX900-SDAG-NEXT: v_add_f32_e32 v3, v3, v4 513; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], |v1|, s4 514; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, v1, v3, s[0:1] 515; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], s10, v0 516; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[0:1] 517; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v0, 5, v0 518; GFX900-SDAG-NEXT: v_ldexp_f32 v0, s10, v0 519; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 520; GFX900-SDAG-NEXT: v_mov_b32_e32 v3, 0x41b17218 521; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v3, vcc 522; GFX900-SDAG-NEXT: v_sub_f32_e32 v1, v1, v4 523; GFX900-SDAG-NEXT: v_mul_f32_e32 v4, 0x3f317217, v0 524; GFX900-SDAG-NEXT: v_fma_f32 v5, v0, s2, -v4 525; GFX900-SDAG-NEXT: v_fma_f32 v5, v0, s3, v5 526; GFX900-SDAG-NEXT: v_add_f32_e32 v4, v4, v5 527; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s4 528; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v4, vcc 529; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v3, 0, v3, s[0:1] 530; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v3 531; GFX900-SDAG-NEXT: global_store_dwordx2 v2, v[0:1], s[8:9] 532; GFX900-SDAG-NEXT: s_endpgm 533; 534; GFX900-GISEL-LABEL: s_log_v2f32: 535; GFX900-GISEL: ; %bb.0: 536; GFX900-GISEL-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x24 537; GFX900-GISEL-NEXT: v_mov_b32_e32 v0, 0x800000 538; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x3f317217 539; GFX900-GISEL-NEXT: v_mov_b32_e32 v4, 0x3377d1cf 540; GFX900-GISEL-NEXT: v_mov_b32_e32 v5, 0x7f800000 541; GFX900-GISEL-NEXT: s_waitcnt lgkmcnt(0) 542; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s10, v0 543; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 544; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 545; GFX900-GISEL-NEXT: v_ldexp_f32 v1, s10, v1 546; GFX900-GISEL-NEXT: v_log_f32_e32 v1, v1 547; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0 548; GFX900-GISEL-NEXT: v_mul_f32_e32 v6, 0x3f317217, v1 549; GFX900-GISEL-NEXT: v_fma_f32 v7, v1, v3, -v6 550; GFX900-GISEL-NEXT: v_fma_f32 v7, v1, v4, v7 551; GFX900-GISEL-NEXT: v_add_f32_e32 v6, v6, v7 552; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], |v1|, v5 553; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, v1, v6, s[0:1] 554; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s11, v0 555; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[0:1] 556; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0 557; GFX900-GISEL-NEXT: v_ldexp_f32 v0, s11, v0 558; GFX900-GISEL-NEXT: v_log_f32_e32 v6, v0 559; GFX900-GISEL-NEXT: v_mov_b32_e32 v7, 0x41b17218 560; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v7, vcc 561; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v1, v0 562; GFX900-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v6 563; GFX900-GISEL-NEXT: v_fma_f32 v3, v6, v3, -v1 564; GFX900-GISEL-NEXT: v_fma_f32 v3, v6, v4, v3 565; GFX900-GISEL-NEXT: v_add_f32_e32 v1, v1, v3 566; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v6|, v5 567; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, v6, v1, vcc 568; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v3, 0, v7, s[0:1] 569; GFX900-GISEL-NEXT: v_sub_f32_e32 v1, v1, v3 570; GFX900-GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[8:9] 571; GFX900-GISEL-NEXT: s_endpgm 572; 573; GFX1100-SDAG-LABEL: s_log_v2f32: 574; GFX1100-SDAG: ; %bb.0: 575; GFX1100-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 576; GFX1100-SDAG-NEXT: s_waitcnt lgkmcnt(0) 577; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s5, 0x800000, s2 578; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s4, 0x800000, s3 579; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 580; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, s5 581; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s4 582; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 583; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 584; GFX1100-SDAG-NEXT: v_ldexp_f32 v1, s2, v1 585; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1) 586; GFX1100-SDAG-NEXT: v_log_f32_e32 v1, v1 587; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 588; GFX1100-SDAG-NEXT: v_dual_mul_f32 v3, 0x3f317217, v1 :: v_dual_lshlrev_b32 v0, 5, v0 589; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, s3, v0 590; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 591; GFX1100-SDAG-NEXT: v_fma_f32 v5, 0x3f317217, v1, -v3 592; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 593; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_3) 594; GFX1100-SDAG-NEXT: v_fmac_f32_e32 v5, 0x3377d1cf, v1 595; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 596; GFX1100-SDAG-NEXT: v_dual_add_f32 v3, v3, v5 :: v_dual_mul_f32 v2, 0x3f317217, v0 597; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 598; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v5, 0, 0x41b17218, s5 599; GFX1100-SDAG-NEXT: v_fma_f32 v4, 0x3f317217, v0, -v2 600; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 601; GFX1100-SDAG-NEXT: v_fmac_f32_e32 v4, 0x3377d1cf, v0 602; GFX1100-SDAG-NEXT: v_add_f32_e32 v2, v2, v4 603; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 0x41b17218, s4 604; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1) 605; GFX1100-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc_lo 606; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v1| 607; GFX1100-SDAG-NEXT: v_dual_cndmask_b32 v2, v1, v3 :: v_dual_mov_b32 v3, 0 608; GFX1100-SDAG-NEXT: v_dual_sub_f32 v1, v0, v4 :: v_dual_sub_f32 v0, v2, v5 609; GFX1100-SDAG-NEXT: global_store_b64 v3, v[0:1], s[0:1] 610; GFX1100-SDAG-NEXT: s_endpgm 611; 612; GFX1100-GISEL-LABEL: s_log_v2f32: 613; GFX1100-GISEL: ; %bb.0: 614; GFX1100-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24 615; GFX1100-GISEL-NEXT: s_waitcnt lgkmcnt(0) 616; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s5, 0x800000, s3 617; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s4, 0x800000, s2 618; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 619; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s5 620; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s4 621; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 622; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 623; GFX1100-GISEL-NEXT: v_ldexp_f32 v1, s3, v1 624; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1) 625; GFX1100-GISEL-NEXT: v_log_f32_e32 v1, v1 626; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 627; GFX1100-GISEL-NEXT: v_dual_mul_f32 v3, 0x3f317217, v1 :: v_dual_lshlrev_b32 v0, 5, v0 628; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, s2, v0 629; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 630; GFX1100-GISEL-NEXT: v_fma_f32 v5, 0x3f317217, v1, -v3 631; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 632; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_3) 633; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v5, 0x3377d1cf, v1 634; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 635; GFX1100-GISEL-NEXT: v_dual_add_f32 v3, v3, v5 :: v_dual_mul_f32 v2, 0x3f317217, v0 636; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 637; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v5, 0, 0x41b17218, s5 638; GFX1100-GISEL-NEXT: v_fma_f32 v4, 0x3f317217, v0, -v2 639; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 640; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v4, 0x3377d1cf, v0 641; GFX1100-GISEL-NEXT: v_add_f32_e32 v2, v2, v4 642; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, 0x41b17218, s4 643; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1) 644; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc_lo 645; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v1| 646; GFX1100-GISEL-NEXT: v_dual_cndmask_b32 v1, v1, v3 :: v_dual_mov_b32 v2, 0 647; GFX1100-GISEL-NEXT: v_dual_sub_f32 v0, v0, v4 :: v_dual_sub_f32 v1, v1, v5 648; GFX1100-GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1] 649; GFX1100-GISEL-NEXT: s_endpgm 650; 651; R600-LABEL: s_log_v2f32: 652; R600: ; %bb.0: 653; R600-NEXT: ALU 41, @4, KC0[CB0:0-32], KC1[] 654; R600-NEXT: MEM_RAT_CACHELESS STORE_RAW T2.XY, T0.X, 1 655; R600-NEXT: CF_END 656; R600-NEXT: PAD 657; R600-NEXT: ALU clause starting at 4: 658; R600-NEXT: SETGT T0.W, literal.x, KC0[3].X, 659; R600-NEXT: SETGT * T1.W, literal.x, KC0[2].W, 660; R600-NEXT: 8388608(1.175494e-38), 0(0.000000e+00) 661; R600-NEXT: CNDE * T2.W, PV.W, 1.0, literal.x, 662; R600-NEXT: 1333788672(4.294967e+09), 0(0.000000e+00) 663; R600-NEXT: MUL_IEEE T2.W, KC0[3].X, PV.W, 664; R600-NEXT: CNDE * T3.W, T1.W, 1.0, literal.x, 665; R600-NEXT: 1333788672(4.294967e+09), 0(0.000000e+00) 666; R600-NEXT: MUL_IEEE T3.W, KC0[2].W, PS, 667; R600-NEXT: LOG_IEEE * T0.X, PV.W, 668; R600-NEXT: AND_INT T2.W, PS, literal.x, 669; R600-NEXT: LOG_IEEE * T0.Y, PV.W, 670; R600-NEXT: -4096(nan), 0(0.000000e+00) 671; R600-NEXT: ADD T3.W, T0.X, -PV.W, 672; R600-NEXT: AND_INT * T4.W, PS, literal.x, 673; R600-NEXT: -4096(nan), 0(0.000000e+00) 674; R600-NEXT: ADD T5.W, T0.Y, -PS, 675; R600-NEXT: MUL_IEEE * T6.W, PV.W, literal.x, 676; R600-NEXT: 939916788(3.194618e-05), 0(0.000000e+00) 677; R600-NEXT: MULADD_IEEE T6.W, T2.W, literal.x, PS, 678; R600-NEXT: MUL_IEEE * T7.W, PV.W, literal.x, 679; R600-NEXT: 939916788(3.194618e-05), 0(0.000000e+00) 680; R600-NEXT: MULADD_IEEE T7.W, T4.W, literal.x, PS, 681; R600-NEXT: MULADD_IEEE * T3.W, T3.W, literal.y, PV.W, BS:VEC_021/SCL_122 682; R600-NEXT: 939916788(3.194618e-05), 1060204544(6.931152e-01) 683; R600-NEXT: MULADD_IEEE T0.Z, T2.W, literal.x, PS, 684; R600-NEXT: SETGT T2.W, literal.y, |T0.X|, 685; R600-NEXT: MULADD_IEEE * T3.W, T5.W, literal.x, PV.W, BS:VEC_021/SCL_122 686; R600-NEXT: 1060204544(6.931152e-01), 2139095040(INF) 687; R600-NEXT: MULADD_IEEE T1.Y, T4.W, literal.x, PS, 688; R600-NEXT: SETGT T1.Z, literal.y, |T0.Y|, 689; R600-NEXT: CNDE T2.W, PV.W, T0.X, PV.Z, 690; R600-NEXT: CNDE * T0.W, T0.W, 0.0, literal.z, 691; R600-NEXT: 1060204544(6.931152e-01), 2139095040(INF) 692; R600-NEXT: 1102148120(2.218071e+01), 0(0.000000e+00) 693; R600-NEXT: ADD T2.Y, PV.W, -PS, 694; R600-NEXT: CNDE T0.W, PV.Z, T0.Y, PV.Y, 695; R600-NEXT: CNDE * T1.W, T1.W, 0.0, literal.x, 696; R600-NEXT: 1102148120(2.218071e+01), 0(0.000000e+00) 697; R600-NEXT: ADD T2.X, PV.W, -PS, 698; R600-NEXT: LSHR * T0.X, KC0[2].Y, literal.x, 699; R600-NEXT: 2(2.802597e-45), 0(0.000000e+00) 700; 701; CM-LABEL: s_log_v2f32: 702; CM: ; %bb.0: 703; CM-NEXT: ALU 47, @4, KC0[CB0:0-32], KC1[] 704; CM-NEXT: MEM_RAT_CACHELESS STORE_DWORD T1, T0.X 705; CM-NEXT: CF_END 706; CM-NEXT: PAD 707; CM-NEXT: ALU clause starting at 4: 708; CM-NEXT: SETGT * T0.W, literal.x, KC0[3].X, 709; CM-NEXT: 8388608(1.175494e-38), 0(0.000000e+00) 710; CM-NEXT: CNDE T0.Z, PV.W, 1.0, literal.x, 711; CM-NEXT: SETGT * T1.W, literal.y, KC0[2].W, 712; CM-NEXT: 1333788672(4.294967e+09), 8388608(1.175494e-38) 713; CM-NEXT: CNDE T1.Z, PV.W, 1.0, literal.x, 714; CM-NEXT: MUL_IEEE * T2.W, KC0[3].X, PV.Z, 715; CM-NEXT: 1333788672(4.294967e+09), 0(0.000000e+00) 716; CM-NEXT: LOG_IEEE T0.X, T2.W, 717; CM-NEXT: LOG_IEEE T0.Y (MASKED), T2.W, 718; CM-NEXT: LOG_IEEE T0.Z (MASKED), T2.W, 719; CM-NEXT: LOG_IEEE * T0.W (MASKED), T2.W, 720; CM-NEXT: AND_INT T0.Z, PV.X, literal.x, 721; CM-NEXT: MUL_IEEE * T2.W, KC0[2].W, T1.Z, 722; CM-NEXT: -4096(nan), 0(0.000000e+00) 723; CM-NEXT: LOG_IEEE T0.X (MASKED), T2.W, 724; CM-NEXT: LOG_IEEE T0.Y, T2.W, 725; CM-NEXT: LOG_IEEE T0.Z (MASKED), T2.W, 726; CM-NEXT: LOG_IEEE * T0.W (MASKED), T2.W, 727; CM-NEXT: ADD T1.Z, T0.X, -T0.Z, 728; CM-NEXT: AND_INT * T2.W, PV.Y, literal.x, 729; CM-NEXT: -4096(nan), 0(0.000000e+00) 730; CM-NEXT: ADD T2.Z, T0.Y, -PV.W, 731; CM-NEXT: MUL_IEEE * T3.W, PV.Z, literal.x, 732; CM-NEXT: 939916788(3.194618e-05), 0(0.000000e+00) 733; CM-NEXT: MULADD_IEEE T3.Z, T0.Z, literal.x, PV.W, 734; CM-NEXT: MUL_IEEE * T3.W, PV.Z, literal.x, 735; CM-NEXT: 939916788(3.194618e-05), 0(0.000000e+00) 736; CM-NEXT: MULADD_IEEE T4.Z, T2.W, literal.x, PV.W, 737; CM-NEXT: MULADD_IEEE * T3.W, T1.Z, literal.y, PV.Z, 738; CM-NEXT: 939916788(3.194618e-05), 1060204544(6.931152e-01) 739; CM-NEXT: MULADD_IEEE T1.Y, T0.Z, literal.x, PV.W, 740; CM-NEXT: SETGT T0.Z, literal.y, |T0.X|, 741; CM-NEXT: MULADD_IEEE * T3.W, T2.Z, literal.x, PV.Z, BS:VEC_120/SCL_212 742; CM-NEXT: 1060204544(6.931152e-01), 2139095040(INF) 743; CM-NEXT: MULADD_IEEE T1.X, T2.W, literal.x, PV.W, 744; CM-NEXT: SETGT T2.Y, literal.y, |T0.Y|, 745; CM-NEXT: CNDE T0.Z, PV.Z, T0.X, PV.Y, 746; CM-NEXT: CNDE * T0.W, T0.W, 0.0, literal.z, BS:VEC_120/SCL_212 747; CM-NEXT: 1060204544(6.931152e-01), 2139095040(INF) 748; CM-NEXT: 1102148120(2.218071e+01), 0(0.000000e+00) 749; CM-NEXT: ADD T1.Y, PV.Z, -PV.W, 750; CM-NEXT: CNDE T0.Z, PV.Y, T0.Y, PV.X, 751; CM-NEXT: CNDE * T0.W, T1.W, 0.0, literal.x, 752; CM-NEXT: 1102148120(2.218071e+01), 0(0.000000e+00) 753; CM-NEXT: ADD * T1.X, PV.Z, -PV.W, 754; CM-NEXT: LSHR * T0.X, KC0[2].Y, literal.x, 755; CM-NEXT: 2(2.802597e-45), 0(0.000000e+00) 756 %result = call <2 x float> @llvm.log.v2f32(<2 x float> %in) 757 store <2 x float> %result, ptr addrspace(1) %out 758 ret void 759} 760 761define amdgpu_kernel void @s_log_v3f32(ptr addrspace(1) %out, <3 x float> %in) { 762; SI-SDAG-LABEL: s_log_v3f32: 763; SI-SDAG: ; %bb.0: 764; SI-SDAG-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0xd 765; SI-SDAG-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x9 766; SI-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000 767; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0) 768; SI-SDAG-NEXT: s_mov_b32 s11, 0x3377d1cf 769; SI-SDAG-NEXT: s_mov_b32 s12, 0x7f800000 770; SI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s9, v0 771; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 772; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 773; SI-SDAG-NEXT: v_ldexp_f32_e32 v1, s9, v1 774; SI-SDAG-NEXT: v_log_f32_e32 v1, v1 775; SI-SDAG-NEXT: s_mov_b32 s9, 0x3f317217 776; SI-SDAG-NEXT: s_mov_b32 s7, 0xf000 777; SI-SDAG-NEXT: s_mov_b32 s6, -1 778; SI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3f317217, v1 779; SI-SDAG-NEXT: v_fma_f32 v3, v1, s9, -v2 780; SI-SDAG-NEXT: v_fma_f32 v3, v1, s11, v3 781; SI-SDAG-NEXT: v_add_f32_e32 v2, v2, v3 782; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], |v1|, s12 783; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, v1, v2, s[0:1] 784; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], s8, v0 785; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, s[0:1] 786; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 787; SI-SDAG-NEXT: v_ldexp_f32_e32 v2, s8, v2 788; SI-SDAG-NEXT: v_log_f32_e32 v2, v2 789; SI-SDAG-NEXT: v_mov_b32_e32 v3, 0x41b17218 790; SI-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v3, vcc 791; SI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s10, v0 792; SI-SDAG-NEXT: v_sub_f32_e32 v1, v1, v4 793; SI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3f317217, v2 794; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 795; SI-SDAG-NEXT: v_fma_f32 v5, v2, s9, -v4 796; SI-SDAG-NEXT: v_lshlrev_b32_e32 v0, 5, v0 797; SI-SDAG-NEXT: v_fma_f32 v5, v2, s11, v5 798; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, s10, v0 799; SI-SDAG-NEXT: v_add_f32_e32 v4, v4, v5 800; SI-SDAG-NEXT: v_log_f32_e32 v5, v0 801; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[2:3], |v2|, s12 802; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, v2, v4, s[2:3] 803; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, v3, s[0:1] 804; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v2 805; SI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3f317217, v5 806; SI-SDAG-NEXT: v_fma_f32 v4, v5, s9, -v2 807; SI-SDAG-NEXT: v_fma_f32 v4, v5, s11, v4 808; SI-SDAG-NEXT: v_add_f32_e32 v2, v2, v4 809; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], |v5|, s12 810; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, v5, v2, s[0:1] 811; SI-SDAG-NEXT: v_cndmask_b32_e32 v3, 0, v3, vcc 812; SI-SDAG-NEXT: v_sub_f32_e32 v2, v2, v3 813; SI-SDAG-NEXT: buffer_store_dword v2, off, s[4:7], 0 offset:8 814; SI-SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 0 815; SI-SDAG-NEXT: s_endpgm 816; 817; SI-GISEL-LABEL: s_log_v3f32: 818; SI-GISEL: ; %bb.0: 819; SI-GISEL-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0xd 820; SI-GISEL-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x9 821; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 822; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x3f317217 823; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 824; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0) 825; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s8, v1 826; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 827; SI-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0 828; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, s8, v0 829; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 830; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x7f800000 831; SI-GISEL-NEXT: s_mov_b32 s6, -1 832; SI-GISEL-NEXT: s_mov_b32 s7, 0xf000 833; SI-GISEL-NEXT: v_mul_f32_e32 v5, 0x3f317217, v0 834; SI-GISEL-NEXT: v_fma_f32 v6, v0, v2, -v5 835; SI-GISEL-NEXT: v_fma_f32 v6, v0, v3, v6 836; SI-GISEL-NEXT: v_add_f32_e32 v5, v5, v6 837; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], |v0|, v4 838; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v5, s[0:1] 839; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s9, v1 840; SI-GISEL-NEXT: v_cndmask_b32_e64 v5, 0, 1, s[0:1] 841; SI-GISEL-NEXT: v_lshlrev_b32_e32 v5, 5, v5 842; SI-GISEL-NEXT: v_ldexp_f32_e32 v5, s9, v5 843; SI-GISEL-NEXT: v_log_f32_e32 v5, v5 844; SI-GISEL-NEXT: v_mov_b32_e32 v6, 0x41b17218 845; SI-GISEL-NEXT: v_cndmask_b32_e32 v7, 0, v6, vcc 846; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s10, v1 847; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v7 848; SI-GISEL-NEXT: v_mul_f32_e32 v7, 0x3f317217, v5 849; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 850; SI-GISEL-NEXT: v_fma_f32 v8, v5, v2, -v7 851; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 852; SI-GISEL-NEXT: v_fma_f32 v8, v5, v3, v8 853; SI-GISEL-NEXT: v_ldexp_f32_e32 v1, s10, v1 854; SI-GISEL-NEXT: v_add_f32_e32 v7, v7, v8 855; SI-GISEL-NEXT: v_log_f32_e32 v8, v1 856; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[2:3], |v5|, v4 857; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, v5, v7, s[2:3] 858; SI-GISEL-NEXT: v_cndmask_b32_e64 v5, 0, v6, s[0:1] 859; SI-GISEL-NEXT: v_sub_f32_e32 v1, v1, v5 860; SI-GISEL-NEXT: v_mul_f32_e32 v5, 0x3f317217, v8 861; SI-GISEL-NEXT: v_fma_f32 v2, v8, v2, -v5 862; SI-GISEL-NEXT: v_fma_f32 v2, v8, v3, v2 863; SI-GISEL-NEXT: v_add_f32_e32 v2, v5, v2 864; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], |v8|, v4 865; SI-GISEL-NEXT: v_cndmask_b32_e64 v2, v8, v2, s[0:1] 866; SI-GISEL-NEXT: v_cndmask_b32_e32 v3, 0, v6, vcc 867; SI-GISEL-NEXT: v_sub_f32_e32 v2, v2, v3 868; SI-GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[4:7], 0 869; SI-GISEL-NEXT: buffer_store_dword v2, off, s[4:7], 0 offset:8 870; SI-GISEL-NEXT: s_endpgm 871; 872; VI-SDAG-LABEL: s_log_v3f32: 873; VI-SDAG: ; %bb.0: 874; VI-SDAG-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x34 875; VI-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000 876; VI-SDAG-NEXT: s_mov_b32 s6, 0x7f800000 877; VI-SDAG-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x24 878; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0) 879; VI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s10, v0 880; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 881; VI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 882; VI-SDAG-NEXT: v_ldexp_f32 v1, s10, v1 883; VI-SDAG-NEXT: v_log_f32_e32 v1, v1 884; VI-SDAG-NEXT: v_and_b32_e32 v2, 0xfffff000, v1 885; VI-SDAG-NEXT: v_sub_f32_e32 v3, v1, v2 886; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 887; VI-SDAG-NEXT: v_mul_f32_e32 v5, 0x3f317000, v3 888; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v3 889; VI-SDAG-NEXT: v_add_f32_e32 v3, v4, v3 890; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 891; VI-SDAG-NEXT: v_add_f32_e32 v3, v5, v3 892; VI-SDAG-NEXT: v_add_f32_e32 v2, v2, v3 893; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], |v1|, s6 894; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, v1, v2, s[0:1] 895; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], s9, v0 896; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, s[0:1] 897; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 898; VI-SDAG-NEXT: v_ldexp_f32 v2, s9, v2 899; VI-SDAG-NEXT: v_log_f32_e32 v3, v2 900; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0x41b17218 901; VI-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v4, vcc 902; VI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s8, v0 903; VI-SDAG-NEXT: v_sub_f32_e32 v2, v1, v2 904; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v3 905; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 906; VI-SDAG-NEXT: v_sub_f32_e32 v5, v3, v1 907; VI-SDAG-NEXT: v_lshlrev_b32_e32 v0, 5, v0 908; VI-SDAG-NEXT: v_mul_f32_e32 v6, 0x3f317000, v5 909; VI-SDAG-NEXT: v_mul_f32_e32 v5, 0x3805fdf4, v5 910; VI-SDAG-NEXT: v_mul_f32_e32 v7, 0x3805fdf4, v1 911; VI-SDAG-NEXT: v_ldexp_f32 v0, s8, v0 912; VI-SDAG-NEXT: v_add_f32_e32 v5, v7, v5 913; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 914; VI-SDAG-NEXT: v_add_f32_e32 v5, v6, v5 915; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 916; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v5 917; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[2:3], |v3|, s6 918; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, v3, v1, s[2:3] 919; VI-SDAG-NEXT: v_cndmask_b32_e64 v3, 0, v4, s[0:1] 920; VI-SDAG-NEXT: v_sub_f32_e32 v1, v1, v3 921; VI-SDAG-NEXT: v_and_b32_e32 v3, 0xfffff000, v0 922; VI-SDAG-NEXT: v_sub_f32_e32 v5, v0, v3 923; VI-SDAG-NEXT: v_mul_f32_e32 v6, 0x3f317000, v5 924; VI-SDAG-NEXT: v_mul_f32_e32 v5, 0x3805fdf4, v5 925; VI-SDAG-NEXT: v_mul_f32_e32 v7, 0x3805fdf4, v3 926; VI-SDAG-NEXT: v_add_f32_e32 v5, v7, v5 927; VI-SDAG-NEXT: v_add_f32_e32 v5, v6, v5 928; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317000, v3 929; VI-SDAG-NEXT: v_add_f32_e32 v3, v3, v5 930; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], |v0|, s6 931; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v3, s[0:1] 932; VI-SDAG-NEXT: v_cndmask_b32_e32 v3, 0, v4, vcc 933; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v3 934; VI-SDAG-NEXT: v_mov_b32_e32 v3, s4 935; VI-SDAG-NEXT: v_mov_b32_e32 v4, s5 936; VI-SDAG-NEXT: flat_store_dwordx3 v[3:4], v[0:2] 937; VI-SDAG-NEXT: s_endpgm 938; 939; VI-GISEL-LABEL: s_log_v3f32: 940; VI-GISEL: ; %bb.0: 941; VI-GISEL-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x34 942; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 943; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 944; VI-GISEL-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x24 945; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0) 946; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s8, v1 947; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 948; VI-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0 949; VI-GISEL-NEXT: v_ldexp_f32 v0, s8, v0 950; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 951; VI-GISEL-NEXT: v_and_b32_e32 v3, 0xfffff000, v0 952; VI-GISEL-NEXT: v_sub_f32_e32 v4, v0, v3 953; VI-GISEL-NEXT: v_mul_f32_e32 v5, 0x3805fdf4, v3 954; VI-GISEL-NEXT: v_mul_f32_e32 v6, 0x3805fdf4, v4 955; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3f317000, v4 956; VI-GISEL-NEXT: v_add_f32_e32 v5, v5, v6 957; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3f317000, v3 958; VI-GISEL-NEXT: v_add_f32_e32 v4, v4, v5 959; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 960; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], |v0|, v2 961; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v3, s[0:1] 962; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s9, v1 963; VI-GISEL-NEXT: v_cndmask_b32_e64 v3, 0, 1, s[0:1] 964; VI-GISEL-NEXT: v_lshlrev_b32_e32 v3, 5, v3 965; VI-GISEL-NEXT: v_ldexp_f32 v3, s9, v3 966; VI-GISEL-NEXT: v_log_f32_e32 v3, v3 967; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x41b17218 968; VI-GISEL-NEXT: v_cndmask_b32_e32 v5, 0, v4, vcc 969; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v5 970; VI-GISEL-NEXT: v_and_b32_e32 v5, 0xfffff000, v3 971; VI-GISEL-NEXT: v_sub_f32_e32 v6, v3, v5 972; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s10, v1 973; VI-GISEL-NEXT: v_mul_f32_e32 v7, 0x3805fdf4, v6 974; VI-GISEL-NEXT: v_mul_f32_e32 v8, 0x3805fdf4, v5 975; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 976; VI-GISEL-NEXT: v_add_f32_e32 v7, v8, v7 977; VI-GISEL-NEXT: v_mul_f32_e32 v6, 0x3f317000, v6 978; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 979; VI-GISEL-NEXT: v_add_f32_e32 v6, v6, v7 980; VI-GISEL-NEXT: v_mul_f32_e32 v5, 0x3f317000, v5 981; VI-GISEL-NEXT: v_ldexp_f32 v1, s10, v1 982; VI-GISEL-NEXT: v_add_f32_e32 v5, v5, v6 983; VI-GISEL-NEXT: v_log_f32_e32 v6, v1 984; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[2:3], |v3|, v2 985; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, v3, v5, s[2:3] 986; VI-GISEL-NEXT: v_cndmask_b32_e64 v3, 0, v4, s[0:1] 987; VI-GISEL-NEXT: v_sub_f32_e32 v1, v1, v3 988; VI-GISEL-NEXT: v_and_b32_e32 v3, 0xfffff000, v6 989; VI-GISEL-NEXT: v_sub_f32_e32 v5, v6, v3 990; VI-GISEL-NEXT: v_mul_f32_e32 v7, 0x3805fdf4, v5 991; VI-GISEL-NEXT: v_mul_f32_e32 v8, 0x3805fdf4, v3 992; VI-GISEL-NEXT: v_add_f32_e32 v7, v8, v7 993; VI-GISEL-NEXT: v_mul_f32_e32 v5, 0x3f317000, v5 994; VI-GISEL-NEXT: v_add_f32_e32 v5, v5, v7 995; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3f317000, v3 996; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v5 997; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], |v6|, v2 998; VI-GISEL-NEXT: v_cndmask_b32_e64 v2, v6, v3, s[0:1] 999; VI-GISEL-NEXT: v_cndmask_b32_e32 v3, 0, v4, vcc 1000; VI-GISEL-NEXT: v_sub_f32_e32 v2, v2, v3 1001; VI-GISEL-NEXT: v_mov_b32_e32 v3, s4 1002; VI-GISEL-NEXT: v_mov_b32_e32 v4, s5 1003; VI-GISEL-NEXT: flat_store_dwordx3 v[3:4], v[0:2] 1004; VI-GISEL-NEXT: s_endpgm 1005; 1006; GFX900-SDAG-LABEL: s_log_v3f32: 1007; GFX900-SDAG: ; %bb.0: 1008; GFX900-SDAG-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x34 1009; GFX900-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x24 1010; GFX900-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000 1011; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 1012; GFX900-SDAG-NEXT: s_mov_b32 s5, 0x3377d1cf 1013; GFX900-SDAG-NEXT: s_waitcnt lgkmcnt(0) 1014; GFX900-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s10, v0 1015; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 1016; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 1017; GFX900-SDAG-NEXT: v_ldexp_f32 v1, s10, v1 1018; GFX900-SDAG-NEXT: v_log_f32_e32 v1, v1 1019; GFX900-SDAG-NEXT: s_mov_b32 s10, 0x7f800000 1020; GFX900-SDAG-NEXT: v_mov_b32_e32 v5, 0x41b17218 1021; GFX900-SDAG-NEXT: v_mov_b32_e32 v3, 0 1022; GFX900-SDAG-NEXT: v_mul_f32_e32 v2, 0x3f317217, v1 1023; GFX900-SDAG-NEXT: v_fma_f32 v4, v1, s4, -v2 1024; GFX900-SDAG-NEXT: v_fma_f32 v4, v1, s5, v4 1025; GFX900-SDAG-NEXT: v_add_f32_e32 v2, v2, v4 1026; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], |v1|, s10 1027; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, v1, v2, s[0:1] 1028; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], s9, v0 1029; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, s[0:1] 1030; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 1031; GFX900-SDAG-NEXT: v_ldexp_f32 v2, s9, v2 1032; GFX900-SDAG-NEXT: v_log_f32_e32 v4, v2 1033; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v5, vcc 1034; GFX900-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s8, v0 1035; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 1036; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v0, 5, v0 1037; GFX900-SDAG-NEXT: v_sub_f32_e32 v2, v1, v2 1038; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v4 1039; GFX900-SDAG-NEXT: v_ldexp_f32 v0, s8, v0 1040; GFX900-SDAG-NEXT: v_fma_f32 v6, v4, s4, -v1 1041; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 1042; GFX900-SDAG-NEXT: v_fma_f32 v6, v4, s5, v6 1043; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v6 1044; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[2:3], |v4|, s10 1045; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, v4, v1, s[2:3] 1046; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, v5, s[0:1] 1047; GFX900-SDAG-NEXT: v_sub_f32_e32 v1, v1, v4 1048; GFX900-SDAG-NEXT: v_mul_f32_e32 v4, 0x3f317217, v0 1049; GFX900-SDAG-NEXT: v_fma_f32 v6, v0, s4, -v4 1050; GFX900-SDAG-NEXT: v_fma_f32 v6, v0, s5, v6 1051; GFX900-SDAG-NEXT: v_add_f32_e32 v4, v4, v6 1052; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], |v0|, s10 1053; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v4, s[0:1] 1054; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v5, vcc 1055; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v4 1056; GFX900-SDAG-NEXT: global_store_dwordx3 v3, v[0:2], s[6:7] 1057; GFX900-SDAG-NEXT: s_endpgm 1058; 1059; GFX900-GISEL-LABEL: s_log_v3f32: 1060; GFX900-GISEL: ; %bb.0: 1061; GFX900-GISEL-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x34 1062; GFX900-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x24 1063; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 1064; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x3f317217 1065; GFX900-GISEL-NEXT: v_mov_b32_e32 v4, 0x3377d1cf 1066; GFX900-GISEL-NEXT: s_waitcnt lgkmcnt(0) 1067; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s8, v1 1068; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 1069; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0 1070; GFX900-GISEL-NEXT: v_ldexp_f32 v0, s8, v0 1071; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 1072; GFX900-GISEL-NEXT: v_mov_b32_e32 v5, 0x7f800000 1073; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0 1074; GFX900-GISEL-NEXT: v_mul_f32_e32 v6, 0x3f317217, v0 1075; GFX900-GISEL-NEXT: v_fma_f32 v7, v0, v2, -v6 1076; GFX900-GISEL-NEXT: v_fma_f32 v7, v0, v4, v7 1077; GFX900-GISEL-NEXT: v_add_f32_e32 v6, v6, v7 1078; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], |v0|, v5 1079; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v6, s[0:1] 1080; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s9, v1 1081; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, 1, s[0:1] 1082; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v6, 5, v6 1083; GFX900-GISEL-NEXT: v_ldexp_f32 v6, s9, v6 1084; GFX900-GISEL-NEXT: v_log_f32_e32 v6, v6 1085; GFX900-GISEL-NEXT: v_mov_b32_e32 v7, 0x41b17218 1086; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v8, 0, v7, vcc 1087; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s10, v1 1088; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v8 1089; GFX900-GISEL-NEXT: v_mul_f32_e32 v8, 0x3f317217, v6 1090; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 1091; GFX900-GISEL-NEXT: v_fma_f32 v9, v6, v2, -v8 1092; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 1093; GFX900-GISEL-NEXT: v_fma_f32 v9, v6, v4, v9 1094; GFX900-GISEL-NEXT: v_ldexp_f32 v1, s10, v1 1095; GFX900-GISEL-NEXT: v_add_f32_e32 v8, v8, v9 1096; GFX900-GISEL-NEXT: v_log_f32_e32 v9, v1 1097; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[2:3], |v6|, v5 1098; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, v6, v8, s[2:3] 1099; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, v7, s[0:1] 1100; GFX900-GISEL-NEXT: v_sub_f32_e32 v1, v1, v6 1101; GFX900-GISEL-NEXT: v_mul_f32_e32 v6, 0x3f317217, v9 1102; GFX900-GISEL-NEXT: v_fma_f32 v2, v9, v2, -v6 1103; GFX900-GISEL-NEXT: v_fma_f32 v2, v9, v4, v2 1104; GFX900-GISEL-NEXT: v_add_f32_e32 v2, v6, v2 1105; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], |v9|, v5 1106; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v2, v9, v2, s[0:1] 1107; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v7, vcc 1108; GFX900-GISEL-NEXT: v_sub_f32_e32 v2, v2, v4 1109; GFX900-GISEL-NEXT: global_store_dwordx3 v3, v[0:2], s[6:7] 1110; GFX900-GISEL-NEXT: s_endpgm 1111; 1112; GFX1100-SDAG-LABEL: s_log_v3f32: 1113; GFX1100-SDAG: ; %bb.0: 1114; GFX1100-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x34 1115; GFX1100-SDAG-NEXT: s_waitcnt lgkmcnt(0) 1116; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s7, 0x800000, s0 1117; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s3, 0x800000, s2 1118; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s6, 0x800000, s1 1119; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3) 1120; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, s7 1121; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s3 1122; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_1) 1123; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, s6 1124; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v9, 0, 0x41b17218, s3 1125; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v10, 0, 0x41b17218, s6 1126; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 1127; GFX1100-SDAG-NEXT: v_ldexp_f32 v2, s0, v2 1128; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1) 1129; GFX1100-SDAG-NEXT: v_log_f32_e32 v2, v2 1130; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 1131; GFX1100-SDAG-NEXT: v_dual_mul_f32 v5, 0x3f317217, v2 :: v_dual_lshlrev_b32 v0, 5, v0 1132; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, s2, v0 1133; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1134; GFX1100-SDAG-NEXT: v_fma_f32 v8, 0x3f317217, v2, -v5 1135; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 1136; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 1137; GFX1100-SDAG-NEXT: v_fmac_f32_e32 v8, 0x3377d1cf, v2 1138; GFX1100-SDAG-NEXT: v_add_f32_e32 v5, v5, v8 1139; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 1140; GFX1100-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317217, v0 1141; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 1142; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 1143; GFX1100-SDAG-NEXT: v_fma_f32 v6, 0x3f317217, v0, -v3 1144; GFX1100-SDAG-NEXT: v_dual_fmac_f32 v6, 0x3377d1cf, v0 :: v_dual_lshlrev_b32 v1, 5, v1 1145; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2) 1146; GFX1100-SDAG-NEXT: v_ldexp_f32 v1, s1, v1 1147; GFX1100-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 1148; GFX1100-SDAG-NEXT: v_add_f32_e32 v3, v3, v6 1149; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1) 1150; GFX1100-SDAG-NEXT: v_log_f32_e32 v1, v1 1151; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v6, 0, 0x41b17218, s7 1152; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 1153; GFX1100-SDAG-NEXT: v_mul_f32_e32 v4, 0x3f317217, v1 1154; GFX1100-SDAG-NEXT: v_fma_f32 v7, 0x3f317217, v1, -v4 1155; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 1156; GFX1100-SDAG-NEXT: v_fmac_f32_e32 v7, 0x3377d1cf, v1 1157; GFX1100-SDAG-NEXT: v_add_f32_e32 v4, v4, v7 1158; GFX1100-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v3, vcc_lo 1159; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v1| 1160; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2) 1161; GFX1100-SDAG-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc_lo 1162; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v2| 1163; GFX1100-SDAG-NEXT: v_dual_mov_b32 v4, 0 :: v_dual_sub_f32 v1, v1, v10 1164; GFX1100-SDAG-NEXT: v_cndmask_b32_e32 v3, v2, v5, vcc_lo 1165; GFX1100-SDAG-NEXT: v_sub_f32_e32 v2, v0, v9 1166; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) 1167; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v3, v6 1168; GFX1100-SDAG-NEXT: s_waitcnt lgkmcnt(0) 1169; GFX1100-SDAG-NEXT: global_store_b96 v4, v[0:2], s[0:1] 1170; GFX1100-SDAG-NEXT: s_endpgm 1171; 1172; GFX1100-GISEL-LABEL: s_log_v3f32: 1173; GFX1100-GISEL: ; %bb.0: 1174; GFX1100-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x34 1175; GFX1100-GISEL-NEXT: s_waitcnt lgkmcnt(0) 1176; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s7, 0x800000, s2 1177; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s3, 0x800000, s0 1178; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s6, 0x800000, s1 1179; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3) 1180; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, s7 1181; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s3 1182; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_1) 1183; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s6 1184; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v9, 0, 0x41b17218, s3 1185; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v10, 0, 0x41b17218, s6 1186; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v2, 5, v2 1187; GFX1100-GISEL-NEXT: v_ldexp_f32 v2, s2, v2 1188; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1) 1189; GFX1100-GISEL-NEXT: v_log_f32_e32 v2, v2 1190; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 1191; GFX1100-GISEL-NEXT: v_dual_mul_f32 v5, 0x3f317217, v2 :: v_dual_lshlrev_b32 v0, 5, v0 1192; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, s0, v0 1193; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 1194; GFX1100-GISEL-NEXT: v_fma_f32 v8, 0x3f317217, v2, -v5 1195; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 1196; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 1197; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v8, 0x3377d1cf, v2 1198; GFX1100-GISEL-NEXT: v_add_f32_e32 v5, v5, v8 1199; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 1200; GFX1100-GISEL-NEXT: v_mul_f32_e32 v3, 0x3f317217, v0 1201; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 1202; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 1203; GFX1100-GISEL-NEXT: v_fma_f32 v6, 0x3f317217, v0, -v3 1204; GFX1100-GISEL-NEXT: v_dual_fmac_f32 v6, 0x3377d1cf, v0 :: v_dual_lshlrev_b32 v1, 5, v1 1205; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2) 1206; GFX1100-GISEL-NEXT: v_ldexp_f32 v1, s1, v1 1207; GFX1100-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 1208; GFX1100-GISEL-NEXT: v_add_f32_e32 v3, v3, v6 1209; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_1) 1210; GFX1100-GISEL-NEXT: v_log_f32_e32 v1, v1 1211; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, 0x41b17218, s7 1212; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 1213; GFX1100-GISEL-NEXT: v_mul_f32_e32 v4, 0x3f317217, v1 1214; GFX1100-GISEL-NEXT: v_fma_f32 v7, 0x3f317217, v1, -v4 1215; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 1216; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v7, 0x3377d1cf, v1 1217; GFX1100-GISEL-NEXT: v_add_f32_e32 v4, v4, v7 1218; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v3, vcc_lo 1219; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v1| 1220; GFX1100-GISEL-NEXT: v_mov_b32_e32 v3, 0 1221; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_2) 1222; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v1, v1, v4, vcc_lo 1223; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v2| 1224; GFX1100-GISEL-NEXT: v_dual_sub_f32 v0, v0, v9 :: v_dual_sub_f32 v1, v1, v10 1225; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v2, v2, v5, vcc_lo 1226; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) 1227; GFX1100-GISEL-NEXT: v_sub_f32_e32 v2, v2, v6 1228; GFX1100-GISEL-NEXT: s_waitcnt lgkmcnt(0) 1229; GFX1100-GISEL-NEXT: global_store_b96 v3, v[0:2], s[0:1] 1230; GFX1100-GISEL-NEXT: s_endpgm 1231; 1232; R600-LABEL: s_log_v3f32: 1233; R600: ; %bb.0: 1234; R600-NEXT: ALU 62, @4, KC0[CB0:0-32], KC1[] 1235; R600-NEXT: MEM_RAT_CACHELESS STORE_RAW T2.X, T3.X, 0 1236; R600-NEXT: MEM_RAT_CACHELESS STORE_RAW T1.XY, T0.X, 1 1237; R600-NEXT: CF_END 1238; R600-NEXT: ALU clause starting at 4: 1239; R600-NEXT: SETGT T0.W, literal.x, KC0[3].Z, 1240; R600-NEXT: SETGT * T1.W, literal.x, KC0[3].Y, 1241; R600-NEXT: 8388608(1.175494e-38), 0(0.000000e+00) 1242; R600-NEXT: CNDE * T2.W, PV.W, 1.0, literal.x, 1243; R600-NEXT: 1333788672(4.294967e+09), 0(0.000000e+00) 1244; R600-NEXT: MUL_IEEE T2.W, KC0[3].Z, PV.W, 1245; R600-NEXT: CNDE * T3.W, T1.W, 1.0, literal.x, 1246; R600-NEXT: 1333788672(4.294967e+09), 0(0.000000e+00) 1247; R600-NEXT: MUL_IEEE T0.Z, KC0[3].Y, PS, 1248; R600-NEXT: SETGT T3.W, literal.x, KC0[3].W, 1249; R600-NEXT: LOG_IEEE * T0.X, PV.W, 1250; R600-NEXT: 8388608(1.175494e-38), 0(0.000000e+00) 1251; R600-NEXT: AND_INT T1.Z, PS, literal.x, 1252; R600-NEXT: CNDE T2.W, PV.W, 1.0, literal.y, 1253; R600-NEXT: LOG_IEEE * T0.Y, PV.Z, 1254; R600-NEXT: -4096(nan), 1333788672(4.294967e+09) 1255; R600-NEXT: MUL_IEEE T0.Z, KC0[3].W, PV.W, 1256; R600-NEXT: ADD T2.W, T0.X, -PV.Z, 1257; R600-NEXT: AND_INT * T4.W, PS, literal.x, 1258; R600-NEXT: -4096(nan), 0(0.000000e+00) 1259; R600-NEXT: ADD T2.Z, T0.Y, -PS, 1260; R600-NEXT: MUL_IEEE T5.W, PV.W, literal.x, 1261; R600-NEXT: LOG_IEEE * T0.Z, PV.Z, 1262; R600-NEXT: 939916788(3.194618e-05), 0(0.000000e+00) 1263; R600-NEXT: MULADD_IEEE T3.Z, T1.Z, literal.x, PV.W, 1264; R600-NEXT: AND_INT T5.W, PS, literal.y, 1265; R600-NEXT: MUL_IEEE * T6.W, PV.Z, literal.x, 1266; R600-NEXT: 939916788(3.194618e-05), -4096(nan) 1267; R600-NEXT: MULADD_IEEE T4.Z, T4.W, literal.x, PS, 1268; R600-NEXT: ADD T6.W, T0.Z, -PV.W, 1269; R600-NEXT: MULADD_IEEE * T2.W, T2.W, literal.y, PV.Z, BS:VEC_021/SCL_122 1270; R600-NEXT: 939916788(3.194618e-05), 1060204544(6.931152e-01) 1271; R600-NEXT: MULADD_IEEE T1.Y, T1.Z, literal.x, PS, 1272; R600-NEXT: SETGT T1.Z, literal.y, |T0.X|, 1273; R600-NEXT: MUL_IEEE T2.W, PV.W, literal.z, 1274; R600-NEXT: MULADD_IEEE * T7.W, T2.Z, literal.x, PV.Z, BS:VEC_021/SCL_122 1275; R600-NEXT: 1060204544(6.931152e-01), 2139095040(INF) 1276; R600-NEXT: 939916788(3.194618e-05), 0(0.000000e+00) 1277; R600-NEXT: MULADD_IEEE T1.X, T4.W, literal.x, PS, 1278; R600-NEXT: SETGT T2.Y, literal.y, |T0.Y|, 1279; R600-NEXT: MULADD_IEEE T2.Z, T5.W, literal.z, PV.W, BS:VEC_120/SCL_212 1280; R600-NEXT: CNDE T2.W, PV.Z, T0.X, PV.Y, 1281; R600-NEXT: CNDE * T0.W, T0.W, 0.0, literal.w, 1282; R600-NEXT: 1060204544(6.931152e-01), 2139095040(INF) 1283; R600-NEXT: 939916788(3.194618e-05), 1102148120(2.218071e+01) 1284; R600-NEXT: ADD T1.Y, PV.W, -PS, 1285; R600-NEXT: MULADD_IEEE T1.Z, T6.W, literal.x, PV.Z, 1286; R600-NEXT: CNDE T0.W, PV.Y, T0.Y, PV.X, 1287; R600-NEXT: CNDE * T1.W, T1.W, 0.0, literal.y, 1288; R600-NEXT: 1060204544(6.931152e-01), 1102148120(2.218071e+01) 1289; R600-NEXT: ADD T1.X, PV.W, -PS, 1290; R600-NEXT: MULADD_IEEE T0.W, T5.W, literal.x, PV.Z, 1291; R600-NEXT: SETGT * T1.W, literal.y, |T0.Z|, 1292; R600-NEXT: 1060204544(6.931152e-01), 2139095040(INF) 1293; R600-NEXT: LSHR T0.X, KC0[2].Y, literal.x, 1294; R600-NEXT: CNDE T0.W, PS, T0.Z, PV.W, 1295; R600-NEXT: CNDE * T1.W, T3.W, 0.0, literal.y, 1296; R600-NEXT: 2(2.802597e-45), 1102148120(2.218071e+01) 1297; R600-NEXT: ADD T2.X, PV.W, -PS, 1298; R600-NEXT: ADD_INT * T0.W, KC0[2].Y, literal.x, 1299; R600-NEXT: 8(1.121039e-44), 0(0.000000e+00) 1300; R600-NEXT: LSHR * T3.X, PV.W, literal.x, 1301; R600-NEXT: 2(2.802597e-45), 0(0.000000e+00) 1302; 1303; CM-LABEL: s_log_v3f32: 1304; CM: ; %bb.0: 1305; CM-NEXT: ALU 68, @4, KC0[CB0:0-32], KC1[] 1306; CM-NEXT: MEM_RAT_CACHELESS STORE_DWORD T0, T2.X 1307; CM-NEXT: MEM_RAT_CACHELESS STORE_DWORD T4.X, T1.X 1308; CM-NEXT: CF_END 1309; CM-NEXT: ALU clause starting at 4: 1310; CM-NEXT: SETGT * T0.W, literal.x, KC0[3].Y, 1311; CM-NEXT: 8388608(1.175494e-38), 0(0.000000e+00) 1312; CM-NEXT: CNDE T0.Z, PV.W, 1.0, literal.x, 1313; CM-NEXT: SETGT * T1.W, literal.y, KC0[3].W, 1314; CM-NEXT: 1333788672(4.294967e+09), 8388608(1.175494e-38) 1315; CM-NEXT: CNDE T0.Y, PV.W, 1.0, literal.x, 1316; CM-NEXT: SETGT T1.Z, literal.y, KC0[3].Z, 1317; CM-NEXT: MUL_IEEE * T2.W, KC0[3].Y, PV.Z, 1318; CM-NEXT: 1333788672(4.294967e+09), 8388608(1.175494e-38) 1319; CM-NEXT: LOG_IEEE T0.X, T2.W, 1320; CM-NEXT: LOG_IEEE T0.Y (MASKED), T2.W, 1321; CM-NEXT: LOG_IEEE T0.Z (MASKED), T2.W, 1322; CM-NEXT: LOG_IEEE * T0.W (MASKED), T2.W, 1323; CM-NEXT: CNDE T1.Y, T1.Z, 1.0, literal.x, 1324; CM-NEXT: AND_INT T0.Z, PV.X, literal.y, 1325; CM-NEXT: MUL_IEEE * T2.W, KC0[3].W, T0.Y, 1326; CM-NEXT: 1333788672(4.294967e+09), -4096(nan) 1327; CM-NEXT: LOG_IEEE T0.X (MASKED), T2.W, 1328; CM-NEXT: LOG_IEEE T0.Y, T2.W, 1329; CM-NEXT: LOG_IEEE T0.Z (MASKED), T2.W, 1330; CM-NEXT: LOG_IEEE * T0.W (MASKED), T2.W, 1331; CM-NEXT: ADD T2.Y, T0.X, -T0.Z, 1332; CM-NEXT: AND_INT T2.Z, PV.Y, literal.x, 1333; CM-NEXT: MUL_IEEE * T2.W, KC0[3].Z, T1.Y, 1334; CM-NEXT: -4096(nan), 0(0.000000e+00) 1335; CM-NEXT: LOG_IEEE T1.X, T2.W, 1336; CM-NEXT: LOG_IEEE T1.Y (MASKED), T2.W, 1337; CM-NEXT: LOG_IEEE T1.Z (MASKED), T2.W, 1338; CM-NEXT: LOG_IEEE * T1.W (MASKED), T2.W, 1339; CM-NEXT: ADD T1.Y, T0.Y, -T2.Z, 1340; CM-NEXT: AND_INT T3.Z, PV.X, literal.x, 1341; CM-NEXT: MUL_IEEE * T2.W, T2.Y, literal.y, BS:VEC_120/SCL_212 1342; CM-NEXT: -4096(nan), 939916788(3.194618e-05) 1343; CM-NEXT: MULADD_IEEE T3.Y, T0.Z, literal.x, PV.W, 1344; CM-NEXT: ADD T4.Z, T1.X, -PV.Z, 1345; CM-NEXT: MUL_IEEE * T2.W, PV.Y, literal.x, 1346; CM-NEXT: 939916788(3.194618e-05), 0(0.000000e+00) 1347; CM-NEXT: MULADD_IEEE T4.Y, T2.Z, literal.x, PV.W, 1348; CM-NEXT: MUL_IEEE T5.Z, PV.Z, literal.x, 1349; CM-NEXT: MULADD_IEEE * T2.W, T2.Y, literal.y, PV.Y, 1350; CM-NEXT: 939916788(3.194618e-05), 1060204544(6.931152e-01) 1351; CM-NEXT: MULADD_IEEE T2.Y, T0.Z, literal.x, PV.W, 1352; CM-NEXT: MULADD_IEEE T0.Z, T3.Z, literal.y, PV.Z, BS:VEC_120/SCL_212 1353; CM-NEXT: MULADD_IEEE * T2.W, T1.Y, literal.x, PV.Y, 1354; CM-NEXT: 1060204544(6.931152e-01), 939916788(3.194618e-05) 1355; CM-NEXT: SETGT T2.X, literal.x, |T0.X|, 1356; CM-NEXT: MULADD_IEEE T1.Y, T2.Z, literal.y, PV.W, 1357; CM-NEXT: SETGT T2.Z, literal.x, |T0.Y|, 1358; CM-NEXT: MULADD_IEEE * T2.W, T4.Z, literal.y, PV.Z, BS:VEC_120/SCL_212 1359; CM-NEXT: 2139095040(INF), 1060204544(6.931152e-01) 1360; CM-NEXT: MULADD_IEEE T3.X, T3.Z, literal.x, PV.W, 1361; CM-NEXT: SETGT T3.Y, literal.y, |T1.X|, 1362; CM-NEXT: CNDE T0.Z, PV.Z, T0.Y, PV.Y, 1363; CM-NEXT: CNDE * T1.W, T1.W, 0.0, literal.z, 1364; CM-NEXT: 1060204544(6.931152e-01), 2139095040(INF) 1365; CM-NEXT: 1102148120(2.218071e+01), 0(0.000000e+00) 1366; CM-NEXT: ADD T4.X, PV.Z, -PV.W, 1367; CM-NEXT: CNDE T0.Y, PV.Y, T1.X, PV.X, 1368; CM-NEXT: CNDE T0.Z, T1.Z, 0.0, literal.x, 1369; CM-NEXT: ADD_INT * T1.W, KC0[2].Y, literal.y, 1370; CM-NEXT: 1102148120(2.218071e+01), 8(1.121039e-44) 1371; CM-NEXT: LSHR T1.X, PV.W, literal.x, 1372; CM-NEXT: ADD T0.Y, PV.Y, -PV.Z, 1373; CM-NEXT: CNDE T0.Z, T2.X, T0.X, T2.Y, 1374; CM-NEXT: CNDE * T0.W, T0.W, 0.0, literal.y, 1375; CM-NEXT: 2(2.802597e-45), 1102148120(2.218071e+01) 1376; CM-NEXT: ADD * T0.X, PV.Z, -PV.W, 1377; CM-NEXT: LSHR * T2.X, KC0[2].Y, literal.x, 1378; CM-NEXT: 2(2.802597e-45), 0(0.000000e+00) 1379 %result = call <3 x float> @llvm.log.v3f32(<3 x float> %in) 1380 store <3 x float> %result, ptr addrspace(1) %out 1381 ret void 1382} 1383 1384; FIXME: We should be able to merge these packets together on Cayman so we 1385; have a maximum of 4 instructions. 1386define amdgpu_kernel void @s_log_v4f32(ptr addrspace(1) %out, <4 x float> %in) { 1387; SI-SDAG-LABEL: s_log_v4f32: 1388; SI-SDAG: ; %bb.0: 1389; SI-SDAG-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0xd 1390; SI-SDAG-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x9 1391; SI-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000 1392; SI-SDAG-NEXT: s_mov_b32 s12, 0x3377d1cf 1393; SI-SDAG-NEXT: s_mov_b32 s13, 0x7f800000 1394; SI-SDAG-NEXT: s_waitcnt lgkmcnt(0) 1395; SI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s11, v0 1396; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 1397; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 1398; SI-SDAG-NEXT: v_ldexp_f32_e32 v1, s11, v1 1399; SI-SDAG-NEXT: v_log_f32_e32 v1, v1 1400; SI-SDAG-NEXT: s_mov_b32 s11, 0x3f317217 1401; SI-SDAG-NEXT: v_mov_b32_e32 v4, 0x41b17218 1402; SI-SDAG-NEXT: s_mov_b32 s7, 0xf000 1403; SI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3f317217, v1 1404; SI-SDAG-NEXT: v_fma_f32 v3, v1, s11, -v2 1405; SI-SDAG-NEXT: v_fma_f32 v3, v1, s12, v3 1406; SI-SDAG-NEXT: v_add_f32_e32 v2, v2, v3 1407; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], |v1|, s13 1408; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, v1, v2, s[0:1] 1409; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], s10, v0 1410; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, s[0:1] 1411; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 1412; SI-SDAG-NEXT: v_ldexp_f32_e32 v2, s10, v2 1413; SI-SDAG-NEXT: v_log_f32_e32 v2, v2 1414; SI-SDAG-NEXT: v_cndmask_b32_e32 v3, 0, v4, vcc 1415; SI-SDAG-NEXT: v_sub_f32_e32 v3, v1, v3 1416; SI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s9, v0 1417; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v2 1418; SI-SDAG-NEXT: v_fma_f32 v5, v2, s11, -v1 1419; SI-SDAG-NEXT: v_fma_f32 v5, v2, s12, v5 1420; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v5 1421; SI-SDAG-NEXT: v_cndmask_b32_e64 v5, 0, 1, vcc 1422; SI-SDAG-NEXT: v_lshlrev_b32_e32 v5, 5, v5 1423; SI-SDAG-NEXT: v_ldexp_f32_e32 v5, s9, v5 1424; SI-SDAG-NEXT: v_log_f32_e32 v5, v5 1425; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[2:3], |v2|, s13 1426; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, v2, v1, s[2:3] 1427; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, v4, s[0:1] 1428; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], s8, v0 1429; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[0:1] 1430; SI-SDAG-NEXT: v_lshlrev_b32_e32 v0, 5, v0 1431; SI-SDAG-NEXT: v_sub_f32_e32 v2, v1, v2 1432; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v5 1433; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, s8, v0 1434; SI-SDAG-NEXT: v_fma_f32 v6, v5, s11, -v1 1435; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 1436; SI-SDAG-NEXT: v_fma_f32 v6, v5, s12, v6 1437; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v6 1438; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[2:3], |v5|, s13 1439; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, v5, v1, s[2:3] 1440; SI-SDAG-NEXT: v_cndmask_b32_e32 v5, 0, v4, vcc 1441; SI-SDAG-NEXT: v_sub_f32_e32 v1, v1, v5 1442; SI-SDAG-NEXT: v_mul_f32_e32 v5, 0x3f317217, v0 1443; SI-SDAG-NEXT: v_fma_f32 v6, v0, s11, -v5 1444; SI-SDAG-NEXT: v_fma_f32 v6, v0, s12, v6 1445; SI-SDAG-NEXT: v_add_f32_e32 v5, v5, v6 1446; SI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s13 1447; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v5, vcc 1448; SI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, v4, s[0:1] 1449; SI-SDAG-NEXT: s_mov_b32 s6, -1 1450; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v4 1451; SI-SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[4:7], 0 1452; SI-SDAG-NEXT: s_endpgm 1453; 1454; SI-GISEL-LABEL: s_log_v4f32: 1455; SI-GISEL: ; %bb.0: 1456; SI-GISEL-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0xd 1457; SI-GISEL-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x9 1458; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x800000 1459; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x3f317217 1460; SI-GISEL-NEXT: v_mov_b32_e32 v4, 0x3377d1cf 1461; SI-GISEL-NEXT: s_waitcnt lgkmcnt(0) 1462; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s8, v2 1463; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 1464; SI-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0 1465; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, s8, v0 1466; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 1467; SI-GISEL-NEXT: v_mov_b32_e32 v5, 0x7f800000 1468; SI-GISEL-NEXT: s_mov_b32 s6, -1 1469; SI-GISEL-NEXT: s_mov_b32 s7, 0xf000 1470; SI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 1471; SI-GISEL-NEXT: v_fma_f32 v6, v0, v3, -v1 1472; SI-GISEL-NEXT: v_fma_f32 v6, v0, v4, v6 1473; SI-GISEL-NEXT: v_add_f32_e32 v1, v1, v6 1474; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], |v0|, v5 1475; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[0:1] 1476; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s9, v2 1477; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s[0:1] 1478; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 1479; SI-GISEL-NEXT: v_ldexp_f32_e32 v1, s9, v1 1480; SI-GISEL-NEXT: v_log_f32_e32 v1, v1 1481; SI-GISEL-NEXT: v_mov_b32_e32 v6, 0x41b17218 1482; SI-GISEL-NEXT: v_cndmask_b32_e32 v7, 0, v6, vcc 1483; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v7 1484; SI-GISEL-NEXT: v_mul_f32_e32 v7, 0x3f317217, v1 1485; SI-GISEL-NEXT: v_fma_f32 v8, v1, v3, -v7 1486; SI-GISEL-NEXT: v_fma_f32 v8, v1, v4, v8 1487; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s10, v2 1488; SI-GISEL-NEXT: v_add_f32_e32 v7, v7, v8 1489; SI-GISEL-NEXT: v_cndmask_b32_e64 v8, 0, 1, vcc 1490; SI-GISEL-NEXT: v_lshlrev_b32_e32 v8, 5, v8 1491; SI-GISEL-NEXT: v_ldexp_f32_e32 v8, s10, v8 1492; SI-GISEL-NEXT: v_log_f32_e32 v8, v8 1493; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[2:3], |v1|, v5 1494; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, v1, v7, s[2:3] 1495; SI-GISEL-NEXT: v_cndmask_b32_e64 v7, 0, v6, s[0:1] 1496; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s11, v2 1497; SI-GISEL-NEXT: v_sub_f32_e32 v1, v1, v7 1498; SI-GISEL-NEXT: v_mul_f32_e32 v7, 0x3f317217, v8 1499; SI-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, s[0:1] 1500; SI-GISEL-NEXT: v_fma_f32 v9, v8, v3, -v7 1501; SI-GISEL-NEXT: v_lshlrev_b32_e32 v2, 5, v2 1502; SI-GISEL-NEXT: v_fma_f32 v9, v8, v4, v9 1503; SI-GISEL-NEXT: v_ldexp_f32_e32 v2, s11, v2 1504; SI-GISEL-NEXT: v_add_f32_e32 v7, v7, v9 1505; SI-GISEL-NEXT: v_log_f32_e32 v9, v2 1506; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[2:3], |v8|, v5 1507; SI-GISEL-NEXT: v_cndmask_b32_e64 v2, v8, v7, s[2:3] 1508; SI-GISEL-NEXT: v_cndmask_b32_e32 v7, 0, v6, vcc 1509; SI-GISEL-NEXT: v_sub_f32_e32 v2, v2, v7 1510; SI-GISEL-NEXT: v_mul_f32_e32 v7, 0x3f317217, v9 1511; SI-GISEL-NEXT: v_fma_f32 v3, v9, v3, -v7 1512; SI-GISEL-NEXT: v_fma_f32 v3, v9, v4, v3 1513; SI-GISEL-NEXT: v_add_f32_e32 v3, v7, v3 1514; SI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v9|, v5 1515; SI-GISEL-NEXT: v_cndmask_b32_e32 v3, v9, v3, vcc 1516; SI-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, v6, s[0:1] 1517; SI-GISEL-NEXT: v_sub_f32_e32 v3, v3, v4 1518; SI-GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[4:7], 0 1519; SI-GISEL-NEXT: s_endpgm 1520; 1521; VI-SDAG-LABEL: s_log_v4f32: 1522; VI-SDAG: ; %bb.0: 1523; VI-SDAG-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x34 1524; VI-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000 1525; VI-SDAG-NEXT: s_mov_b32 s6, 0x7f800000 1526; VI-SDAG-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x24 1527; VI-SDAG-NEXT: s_waitcnt lgkmcnt(0) 1528; VI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s11, v0 1529; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 1530; VI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 1531; VI-SDAG-NEXT: v_ldexp_f32 v1, s11, v1 1532; VI-SDAG-NEXT: v_log_f32_e32 v1, v1 1533; VI-SDAG-NEXT: v_and_b32_e32 v2, 0xfffff000, v1 1534; VI-SDAG-NEXT: v_sub_f32_e32 v3, v1, v2 1535; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 1536; VI-SDAG-NEXT: v_mul_f32_e32 v5, 0x3f317000, v3 1537; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v3 1538; VI-SDAG-NEXT: v_add_f32_e32 v3, v4, v3 1539; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 1540; VI-SDAG-NEXT: v_add_f32_e32 v3, v5, v3 1541; VI-SDAG-NEXT: v_add_f32_e32 v2, v2, v3 1542; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], |v1|, s6 1543; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, v1, v2, s[0:1] 1544; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], s10, v0 1545; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, s[0:1] 1546; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 1547; VI-SDAG-NEXT: v_ldexp_f32 v2, s10, v2 1548; VI-SDAG-NEXT: v_log_f32_e32 v2, v2 1549; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0x41b17218 1550; VI-SDAG-NEXT: v_cndmask_b32_e32 v3, 0, v4, vcc 1551; VI-SDAG-NEXT: v_sub_f32_e32 v3, v1, v3 1552; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v2 1553; VI-SDAG-NEXT: v_sub_f32_e32 v5, v2, v1 1554; VI-SDAG-NEXT: v_mul_f32_e32 v6, 0x3f317000, v5 1555; VI-SDAG-NEXT: v_mul_f32_e32 v5, 0x3805fdf4, v5 1556; VI-SDAG-NEXT: v_mul_f32_e32 v7, 0x3805fdf4, v1 1557; VI-SDAG-NEXT: v_add_f32_e32 v5, v7, v5 1558; VI-SDAG-NEXT: v_add_f32_e32 v5, v6, v5 1559; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 1560; VI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s9, v0 1561; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v5 1562; VI-SDAG-NEXT: v_cndmask_b32_e64 v5, 0, 1, vcc 1563; VI-SDAG-NEXT: v_lshlrev_b32_e32 v5, 5, v5 1564; VI-SDAG-NEXT: v_ldexp_f32 v5, s9, v5 1565; VI-SDAG-NEXT: v_log_f32_e32 v5, v5 1566; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[2:3], |v2|, s6 1567; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, v2, v1, s[2:3] 1568; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, v4, s[0:1] 1569; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], s8, v0 1570; VI-SDAG-NEXT: v_sub_f32_e32 v2, v1, v2 1571; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v5 1572; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[0:1] 1573; VI-SDAG-NEXT: v_sub_f32_e32 v6, v5, v1 1574; VI-SDAG-NEXT: v_lshlrev_b32_e32 v0, 5, v0 1575; VI-SDAG-NEXT: v_mul_f32_e32 v7, 0x3f317000, v6 1576; VI-SDAG-NEXT: v_mul_f32_e32 v6, 0x3805fdf4, v6 1577; VI-SDAG-NEXT: v_mul_f32_e32 v8, 0x3805fdf4, v1 1578; VI-SDAG-NEXT: v_ldexp_f32 v0, s8, v0 1579; VI-SDAG-NEXT: v_add_f32_e32 v6, v8, v6 1580; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 1581; VI-SDAG-NEXT: v_add_f32_e32 v6, v7, v6 1582; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 1583; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v6 1584; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[2:3], |v5|, s6 1585; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, v5, v1, s[2:3] 1586; VI-SDAG-NEXT: v_cndmask_b32_e32 v5, 0, v4, vcc 1587; VI-SDAG-NEXT: v_sub_f32_e32 v1, v1, v5 1588; VI-SDAG-NEXT: v_and_b32_e32 v5, 0xfffff000, v0 1589; VI-SDAG-NEXT: v_sub_f32_e32 v6, v0, v5 1590; VI-SDAG-NEXT: v_mul_f32_e32 v7, 0x3f317000, v6 1591; VI-SDAG-NEXT: v_mul_f32_e32 v6, 0x3805fdf4, v6 1592; VI-SDAG-NEXT: v_mul_f32_e32 v8, 0x3805fdf4, v5 1593; VI-SDAG-NEXT: v_add_f32_e32 v6, v8, v6 1594; VI-SDAG-NEXT: v_add_f32_e32 v6, v7, v6 1595; VI-SDAG-NEXT: v_mul_f32_e32 v5, 0x3f317000, v5 1596; VI-SDAG-NEXT: v_add_f32_e32 v5, v5, v6 1597; VI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s6 1598; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v5, vcc 1599; VI-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, v4, s[0:1] 1600; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v4 1601; VI-SDAG-NEXT: v_mov_b32_e32 v4, s4 1602; VI-SDAG-NEXT: v_mov_b32_e32 v5, s5 1603; VI-SDAG-NEXT: flat_store_dwordx4 v[4:5], v[0:3] 1604; VI-SDAG-NEXT: s_endpgm 1605; 1606; VI-GISEL-LABEL: s_log_v4f32: 1607; VI-GISEL: ; %bb.0: 1608; VI-GISEL-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x34 1609; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x800000 1610; VI-GISEL-NEXT: v_mov_b32_e32 v3, 0x7f800000 1611; VI-GISEL-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x24 1612; VI-GISEL-NEXT: s_waitcnt lgkmcnt(0) 1613; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s8, v2 1614; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 1615; VI-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0 1616; VI-GISEL-NEXT: v_ldexp_f32 v0, s8, v0 1617; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 1618; VI-GISEL-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 1619; VI-GISEL-NEXT: v_sub_f32_e32 v4, v0, v1 1620; VI-GISEL-NEXT: v_mul_f32_e32 v5, 0x3805fdf4, v1 1621; VI-GISEL-NEXT: v_mul_f32_e32 v6, 0x3805fdf4, v4 1622; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3f317000, v4 1623; VI-GISEL-NEXT: v_add_f32_e32 v5, v5, v6 1624; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 1625; VI-GISEL-NEXT: v_add_f32_e32 v4, v4, v5 1626; VI-GISEL-NEXT: v_add_f32_e32 v1, v1, v4 1627; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], |v0|, v3 1628; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[0:1] 1629; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s9, v2 1630; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s[0:1] 1631; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 1632; VI-GISEL-NEXT: v_ldexp_f32 v1, s9, v1 1633; VI-GISEL-NEXT: v_log_f32_e32 v1, v1 1634; VI-GISEL-NEXT: v_mov_b32_e32 v4, 0x41b17218 1635; VI-GISEL-NEXT: v_cndmask_b32_e32 v5, 0, v4, vcc 1636; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v5 1637; VI-GISEL-NEXT: v_and_b32_e32 v5, 0xfffff000, v1 1638; VI-GISEL-NEXT: v_sub_f32_e32 v6, v1, v5 1639; VI-GISEL-NEXT: v_mul_f32_e32 v7, 0x3805fdf4, v6 1640; VI-GISEL-NEXT: v_mul_f32_e32 v8, 0x3805fdf4, v5 1641; VI-GISEL-NEXT: v_add_f32_e32 v7, v8, v7 1642; VI-GISEL-NEXT: v_mul_f32_e32 v6, 0x3f317000, v6 1643; VI-GISEL-NEXT: v_add_f32_e32 v6, v6, v7 1644; VI-GISEL-NEXT: v_mul_f32_e32 v5, 0x3f317000, v5 1645; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s10, v2 1646; VI-GISEL-NEXT: v_add_f32_e32 v5, v5, v6 1647; VI-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, 1, vcc 1648; VI-GISEL-NEXT: v_lshlrev_b32_e32 v6, 5, v6 1649; VI-GISEL-NEXT: v_ldexp_f32 v6, s10, v6 1650; VI-GISEL-NEXT: v_log_f32_e32 v6, v6 1651; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[2:3], |v1|, v3 1652; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, v1, v5, s[2:3] 1653; VI-GISEL-NEXT: v_cndmask_b32_e64 v5, 0, v4, s[0:1] 1654; VI-GISEL-NEXT: v_sub_f32_e32 v1, v1, v5 1655; VI-GISEL-NEXT: v_and_b32_e32 v5, 0xfffff000, v6 1656; VI-GISEL-NEXT: v_sub_f32_e32 v7, v6, v5 1657; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s11, v2 1658; VI-GISEL-NEXT: v_mul_f32_e32 v8, 0x3805fdf4, v7 1659; VI-GISEL-NEXT: v_mul_f32_e32 v9, 0x3805fdf4, v5 1660; VI-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, s[0:1] 1661; VI-GISEL-NEXT: v_add_f32_e32 v8, v9, v8 1662; VI-GISEL-NEXT: v_mul_f32_e32 v7, 0x3f317000, v7 1663; VI-GISEL-NEXT: v_lshlrev_b32_e32 v2, 5, v2 1664; VI-GISEL-NEXT: v_add_f32_e32 v7, v7, v8 1665; VI-GISEL-NEXT: v_mul_f32_e32 v5, 0x3f317000, v5 1666; VI-GISEL-NEXT: v_ldexp_f32 v2, s11, v2 1667; VI-GISEL-NEXT: v_add_f32_e32 v5, v5, v7 1668; VI-GISEL-NEXT: v_log_f32_e32 v7, v2 1669; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[2:3], |v6|, v3 1670; VI-GISEL-NEXT: v_cndmask_b32_e64 v2, v6, v5, s[2:3] 1671; VI-GISEL-NEXT: v_cndmask_b32_e32 v5, 0, v4, vcc 1672; VI-GISEL-NEXT: v_sub_f32_e32 v2, v2, v5 1673; VI-GISEL-NEXT: v_and_b32_e32 v5, 0xfffff000, v7 1674; VI-GISEL-NEXT: v_sub_f32_e32 v6, v7, v5 1675; VI-GISEL-NEXT: v_mul_f32_e32 v8, 0x3805fdf4, v6 1676; VI-GISEL-NEXT: v_mul_f32_e32 v9, 0x3805fdf4, v5 1677; VI-GISEL-NEXT: v_add_f32_e32 v8, v9, v8 1678; VI-GISEL-NEXT: v_mul_f32_e32 v6, 0x3f317000, v6 1679; VI-GISEL-NEXT: v_add_f32_e32 v6, v6, v8 1680; VI-GISEL-NEXT: v_mul_f32_e32 v5, 0x3f317000, v5 1681; VI-GISEL-NEXT: v_add_f32_e32 v5, v5, v6 1682; VI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v7|, v3 1683; VI-GISEL-NEXT: v_cndmask_b32_e32 v3, v7, v5, vcc 1684; VI-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, v4, s[0:1] 1685; VI-GISEL-NEXT: v_sub_f32_e32 v3, v3, v4 1686; VI-GISEL-NEXT: v_mov_b32_e32 v4, s4 1687; VI-GISEL-NEXT: v_mov_b32_e32 v5, s5 1688; VI-GISEL-NEXT: flat_store_dwordx4 v[4:5], v[0:3] 1689; VI-GISEL-NEXT: s_endpgm 1690; 1691; GFX900-SDAG-LABEL: s_log_v4f32: 1692; GFX900-SDAG: ; %bb.0: 1693; GFX900-SDAG-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x34 1694; GFX900-SDAG-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x24 1695; GFX900-SDAG-NEXT: v_mov_b32_e32 v0, 0x800000 1696; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 1697; GFX900-SDAG-NEXT: s_mov_b32 s5, 0x3377d1cf 1698; GFX900-SDAG-NEXT: s_waitcnt lgkmcnt(0) 1699; GFX900-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s11, v0 1700; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 1701; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 1702; GFX900-SDAG-NEXT: v_ldexp_f32 v1, s11, v1 1703; GFX900-SDAG-NEXT: v_log_f32_e32 v1, v1 1704; GFX900-SDAG-NEXT: s_mov_b32 s11, 0x7f800000 1705; GFX900-SDAG-NEXT: v_mov_b32_e32 v5, 0x41b17218 1706; GFX900-SDAG-NEXT: v_mov_b32_e32 v4, 0 1707; GFX900-SDAG-NEXT: v_mul_f32_e32 v2, 0x3f317217, v1 1708; GFX900-SDAG-NEXT: v_fma_f32 v3, v1, s4, -v2 1709; GFX900-SDAG-NEXT: v_fma_f32 v3, v1, s5, v3 1710; GFX900-SDAG-NEXT: v_add_f32_e32 v2, v2, v3 1711; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], |v1|, s11 1712; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, v1, v2, s[0:1] 1713; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], s10, v0 1714; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, s[0:1] 1715; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 1716; GFX900-SDAG-NEXT: v_ldexp_f32 v2, s10, v2 1717; GFX900-SDAG-NEXT: v_log_f32_e32 v2, v2 1718; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v3, 0, v5, vcc 1719; GFX900-SDAG-NEXT: v_sub_f32_e32 v3, v1, v3 1720; GFX900-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s9, v0 1721; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v2 1722; GFX900-SDAG-NEXT: v_fma_f32 v6, v2, s4, -v1 1723; GFX900-SDAG-NEXT: v_fma_f32 v6, v2, s5, v6 1724; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v6 1725; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v6, 0, 1, vcc 1726; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v6, 5, v6 1727; GFX900-SDAG-NEXT: v_ldexp_f32 v6, s9, v6 1728; GFX900-SDAG-NEXT: v_log_f32_e32 v6, v6 1729; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[2:3], |v2|, s11 1730; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, v2, v1, s[2:3] 1731; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, v5, s[0:1] 1732; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[0:1], s8, v0 1733; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[0:1] 1734; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v0, 5, v0 1735; GFX900-SDAG-NEXT: v_sub_f32_e32 v2, v1, v2 1736; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v6 1737; GFX900-SDAG-NEXT: v_ldexp_f32 v0, s8, v0 1738; GFX900-SDAG-NEXT: v_fma_f32 v7, v6, s4, -v1 1739; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 1740; GFX900-SDAG-NEXT: v_fma_f32 v7, v6, s5, v7 1741; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v7 1742; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[2:3], |v6|, s11 1743; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, v6, v1, s[2:3] 1744; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v6, 0, v5, vcc 1745; GFX900-SDAG-NEXT: v_sub_f32_e32 v1, v1, v6 1746; GFX900-SDAG-NEXT: v_mul_f32_e32 v6, 0x3f317217, v0 1747; GFX900-SDAG-NEXT: v_fma_f32 v7, v0, s4, -v6 1748; GFX900-SDAG-NEXT: v_fma_f32 v7, v0, s5, v7 1749; GFX900-SDAG-NEXT: v_add_f32_e32 v6, v6, v7 1750; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s11 1751; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v6, vcc 1752; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v5, 0, v5, s[0:1] 1753; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v5 1754; GFX900-SDAG-NEXT: global_store_dwordx4 v4, v[0:3], s[6:7] 1755; GFX900-SDAG-NEXT: s_endpgm 1756; 1757; GFX900-GISEL-LABEL: s_log_v4f32: 1758; GFX900-GISEL: ; %bb.0: 1759; GFX900-GISEL-NEXT: s_load_dwordx4 s[8:11], s[4:5], 0x34 1760; GFX900-GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x24 1761; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x800000 1762; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x3f317217 1763; GFX900-GISEL-NEXT: v_mov_b32_e32 v5, 0x3377d1cf 1764; GFX900-GISEL-NEXT: s_waitcnt lgkmcnt(0) 1765; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s8, v2 1766; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc 1767; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0 1768; GFX900-GISEL-NEXT: v_ldexp_f32 v0, s8, v0 1769; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 1770; GFX900-GISEL-NEXT: v_mov_b32_e32 v6, 0x7f800000 1771; GFX900-GISEL-NEXT: v_mov_b32_e32 v4, 0 1772; GFX900-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 1773; GFX900-GISEL-NEXT: v_fma_f32 v7, v0, v3, -v1 1774; GFX900-GISEL-NEXT: v_fma_f32 v7, v0, v5, v7 1775; GFX900-GISEL-NEXT: v_add_f32_e32 v1, v1, v7 1776; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], |v0|, v6 1777; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[0:1] 1778; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s9, v2 1779; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s[0:1] 1780; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 1781; GFX900-GISEL-NEXT: v_ldexp_f32 v1, s9, v1 1782; GFX900-GISEL-NEXT: v_log_f32_e32 v1, v1 1783; GFX900-GISEL-NEXT: v_mov_b32_e32 v7, 0x41b17218 1784; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v8, 0, v7, vcc 1785; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v8 1786; GFX900-GISEL-NEXT: v_mul_f32_e32 v8, 0x3f317217, v1 1787; GFX900-GISEL-NEXT: v_fma_f32 v9, v1, v3, -v8 1788; GFX900-GISEL-NEXT: v_fma_f32 v9, v1, v5, v9 1789; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s10, v2 1790; GFX900-GISEL-NEXT: v_add_f32_e32 v8, v8, v9 1791; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v9, 0, 1, vcc 1792; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v9, 5, v9 1793; GFX900-GISEL-NEXT: v_ldexp_f32 v9, s10, v9 1794; GFX900-GISEL-NEXT: v_log_f32_e32 v9, v9 1795; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[2:3], |v1|, v6 1796; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, v1, v8, s[2:3] 1797; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v8, 0, v7, s[0:1] 1798; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[0:1], s11, v2 1799; GFX900-GISEL-NEXT: v_sub_f32_e32 v1, v1, v8 1800; GFX900-GISEL-NEXT: v_mul_f32_e32 v8, 0x3f317217, v9 1801; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, s[0:1] 1802; GFX900-GISEL-NEXT: v_fma_f32 v10, v9, v3, -v8 1803; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v2, 5, v2 1804; GFX900-GISEL-NEXT: v_fma_f32 v10, v9, v5, v10 1805; GFX900-GISEL-NEXT: v_ldexp_f32 v2, s11, v2 1806; GFX900-GISEL-NEXT: v_add_f32_e32 v8, v8, v10 1807; GFX900-GISEL-NEXT: v_log_f32_e32 v10, v2 1808; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[2:3], |v9|, v6 1809; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v2, v9, v8, s[2:3] 1810; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v8, 0, v7, vcc 1811; GFX900-GISEL-NEXT: v_sub_f32_e32 v2, v2, v8 1812; GFX900-GISEL-NEXT: v_mul_f32_e32 v8, 0x3f317217, v10 1813; GFX900-GISEL-NEXT: v_fma_f32 v3, v10, v3, -v8 1814; GFX900-GISEL-NEXT: v_fma_f32 v3, v10, v5, v3 1815; GFX900-GISEL-NEXT: v_add_f32_e32 v3, v8, v3 1816; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v10|, v6 1817; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v3, v10, v3, vcc 1818; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v5, 0, v7, s[0:1] 1819; GFX900-GISEL-NEXT: v_sub_f32_e32 v3, v3, v5 1820; GFX900-GISEL-NEXT: global_store_dwordx4 v4, v[0:3], s[6:7] 1821; GFX900-GISEL-NEXT: s_endpgm 1822; 1823; GFX1100-SDAG-LABEL: s_log_v4f32: 1824; GFX1100-SDAG: ; %bb.0: 1825; GFX1100-SDAG-NEXT: s_load_b128 s[0:3], s[4:5], 0x34 1826; GFX1100-SDAG-NEXT: s_waitcnt lgkmcnt(0) 1827; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s8, 0x800000, s1 1828; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s9, 0x800000, s0 1829; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s6, 0x800000, s3 1830; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s7, 0x800000, s2 1831; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4) 1832; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, s8 1833; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v3, 0, 1, s9 1834; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4) 1835; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, s6 1836; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, s7 1837; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, 0x41b17218, s6 1838; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 1839; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v3, 5, v3 1840; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v9, 0, 0x41b17218, s7 1841; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v14, 0, 0x41b17218, s8 1842; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v15, 0, 0x41b17218, s9 1843; GFX1100-SDAG-NEXT: v_ldexp_f32 v2, s1, v2 1844; GFX1100-SDAG-NEXT: v_ldexp_f32 v3, s0, v3 1845; GFX1100-SDAG-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 1846; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2) 1847; GFX1100-SDAG-NEXT: v_log_f32_e32 v2, v2 1848; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v0, 5, v0 1849; GFX1100-SDAG-NEXT: v_log_f32_e32 v3, v3 1850; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 1851; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 1852; GFX1100-SDAG-NEXT: v_mul_f32_e32 v7, 0x3f317217, v2 1853; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, s3, v0 1854; GFX1100-SDAG-NEXT: v_mul_f32_e32 v8, 0x3f317217, v3 1855; GFX1100-SDAG-NEXT: v_ldexp_f32 v1, s2, v1 1856; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4) 1857; GFX1100-SDAG-NEXT: v_fma_f32 v12, 0x3f317217, v2, -v7 1858; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 1859; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3) 1860; GFX1100-SDAG-NEXT: v_fma_f32 v13, 0x3f317217, v3, -v8 1861; GFX1100-SDAG-NEXT: v_log_f32_e32 v1, v1 1862; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 1863; GFX1100-SDAG-NEXT: v_dual_fmac_f32 v12, 0x3377d1cf, v2 :: v_dual_fmac_f32 v13, 0x3377d1cf, v3 1864; GFX1100-SDAG-NEXT: v_add_f32_e32 v7, v7, v12 1865; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 1866; GFX1100-SDAG-NEXT: v_dual_mul_f32 v5, 0x3f317217, v0 :: v_dual_add_f32 v8, v8, v13 1867; GFX1100-SDAG-NEXT: v_mul_f32_e32 v6, 0x3f317217, v1 1868; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 1869; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3) 1870; GFX1100-SDAG-NEXT: v_fma_f32 v10, 0x3f317217, v0, -v5 1871; GFX1100-SDAG-NEXT: v_fma_f32 v11, 0x3f317217, v1, -v6 1872; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 1873; GFX1100-SDAG-NEXT: v_dual_fmac_f32 v10, 0x3377d1cf, v0 :: v_dual_fmac_f32 v11, 0x3377d1cf, v1 1874; GFX1100-SDAG-NEXT: v_dual_add_f32 v5, v5, v10 :: v_dual_add_f32 v6, v6, v11 1875; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_3) 1876; GFX1100-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v5, vcc_lo 1877; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v1| 1878; GFX1100-SDAG-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc_lo 1879; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v2| 1880; GFX1100-SDAG-NEXT: v_cndmask_b32_e32 v5, v2, v7, vcc_lo 1881; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v3| 1882; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_2) 1883; GFX1100-SDAG-NEXT: v_dual_mov_b32 v7, 0 :: v_dual_sub_f32 v2, v1, v9 1884; GFX1100-SDAG-NEXT: v_cndmask_b32_e32 v6, v3, v8, vcc_lo 1885; GFX1100-SDAG-NEXT: v_sub_f32_e32 v3, v0, v4 1886; GFX1100-SDAG-NEXT: v_dual_sub_f32 v1, v5, v14 :: v_dual_sub_f32 v0, v6, v15 1887; GFX1100-SDAG-NEXT: s_waitcnt lgkmcnt(0) 1888; GFX1100-SDAG-NEXT: global_store_b128 v7, v[0:3], s[0:1] 1889; GFX1100-SDAG-NEXT: s_endpgm 1890; 1891; GFX1100-GISEL-LABEL: s_log_v4f32: 1892; GFX1100-GISEL: ; %bb.0: 1893; GFX1100-GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x34 1894; GFX1100-GISEL-NEXT: s_waitcnt lgkmcnt(0) 1895; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s8, 0x800000, s2 1896; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s9, 0x800000, s3 1897; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s6, 0x800000, s0 1898; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s7, 0x800000, s1 1899; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4) 1900; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, s8 1901; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v3, 0, 1, s9 1902; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4) 1903; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s6 1904; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s7 1905; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, 0x41b17218, s6 1906; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v2, 5, v2 1907; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v3, 5, v3 1908; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v9, 0, 0x41b17218, s7 1909; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v14, 0, 0x41b17218, s8 1910; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v15, 0, 0x41b17218, s9 1911; GFX1100-GISEL-NEXT: v_ldexp_f32 v2, s2, v2 1912; GFX1100-GISEL-NEXT: v_ldexp_f32 v3, s3, v3 1913; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2) 1914; GFX1100-GISEL-NEXT: v_log_f32_e32 v2, v2 1915; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v0, 5, v0 1916; GFX1100-GISEL-NEXT: v_log_f32_e32 v3, v3 1917; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 1918; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 1919; GFX1100-GISEL-NEXT: v_mul_f32_e32 v7, 0x3f317217, v2 1920; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, s0, v0 1921; GFX1100-GISEL-NEXT: v_mul_f32_e32 v8, 0x3f317217, v3 1922; GFX1100-GISEL-NEXT: v_ldexp_f32 v1, s1, v1 1923; GFX1100-GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24 1924; GFX1100-GISEL-NEXT: v_fma_f32 v12, 0x3f317217, v2, -v7 1925; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 1926; GFX1100-GISEL-NEXT: v_fma_f32 v13, 0x3f317217, v3, -v8 1927; GFX1100-GISEL-NEXT: v_log_f32_e32 v1, v1 1928; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 1929; GFX1100-GISEL-NEXT: v_dual_fmac_f32 v12, 0x3377d1cf, v2 :: v_dual_fmac_f32 v13, 0x3377d1cf, v3 1930; GFX1100-GISEL-NEXT: v_add_f32_e32 v7, v7, v12 1931; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 1932; GFX1100-GISEL-NEXT: v_dual_mul_f32 v5, 0x3f317217, v0 :: v_dual_add_f32 v8, v8, v13 1933; GFX1100-GISEL-NEXT: v_mul_f32_e32 v6, 0x3f317217, v1 1934; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 1935; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3) 1936; GFX1100-GISEL-NEXT: v_fma_f32 v10, 0x3f317217, v0, -v5 1937; GFX1100-GISEL-NEXT: v_fma_f32 v11, 0x3f317217, v1, -v6 1938; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 1939; GFX1100-GISEL-NEXT: v_dual_fmac_f32 v10, 0x3377d1cf, v0 :: v_dual_fmac_f32 v11, 0x3377d1cf, v1 1940; GFX1100-GISEL-NEXT: v_dual_add_f32 v5, v5, v10 :: v_dual_add_f32 v6, v6, v11 1941; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_3) 1942; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v5, vcc_lo 1943; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v1| 1944; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v1, v1, v6, vcc_lo 1945; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v2| 1946; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_3) 1947; GFX1100-GISEL-NEXT: v_dual_mov_b32 v5, 0 :: v_dual_sub_f32 v0, v0, v4 1948; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v2, v2, v7, vcc_lo 1949; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v3| 1950; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v3, v3, v8, vcc_lo 1951; GFX1100-GISEL-NEXT: v_dual_sub_f32 v1, v1, v9 :: v_dual_sub_f32 v2, v2, v14 1952; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) 1953; GFX1100-GISEL-NEXT: v_sub_f32_e32 v3, v3, v15 1954; GFX1100-GISEL-NEXT: s_waitcnt lgkmcnt(0) 1955; GFX1100-GISEL-NEXT: global_store_b128 v5, v[0:3], s[0:1] 1956; GFX1100-GISEL-NEXT: s_endpgm 1957; 1958; R600-LABEL: s_log_v4f32: 1959; R600: ; %bb.0: 1960; R600-NEXT: ALU 76, @4, KC0[CB0:0-32], KC1[] 1961; R600-NEXT: MEM_RAT_CACHELESS STORE_RAW T2.XYZW, T0.X, 1 1962; R600-NEXT: CF_END 1963; R600-NEXT: PAD 1964; R600-NEXT: ALU clause starting at 4: 1965; R600-NEXT: SETGT T0.W, literal.x, KC0[3].Z, 1966; R600-NEXT: SETGT * T1.W, literal.x, KC0[4].X, 1967; R600-NEXT: 8388608(1.175494e-38), 0(0.000000e+00) 1968; R600-NEXT: CNDE * T2.W, PV.W, 1.0, literal.x, 1969; R600-NEXT: 1333788672(4.294967e+09), 0(0.000000e+00) 1970; R600-NEXT: MUL_IEEE T0.Z, KC0[3].Z, PV.W, 1971; R600-NEXT: SETGT T2.W, literal.x, KC0[3].W, 1972; R600-NEXT: CNDE * T3.W, T1.W, 1.0, literal.y, 1973; R600-NEXT: 8388608(1.175494e-38), 1333788672(4.294967e+09) 1974; R600-NEXT: MUL_IEEE T1.Z, KC0[4].X, PS, 1975; R600-NEXT: CNDE T3.W, PV.W, 1.0, literal.x, 1976; R600-NEXT: LOG_IEEE * T0.X, PV.Z, 1977; R600-NEXT: 1333788672(4.294967e+09), 0(0.000000e+00) 1978; R600-NEXT: MUL_IEEE T0.Z, KC0[3].W, PV.W, 1979; R600-NEXT: SETGT T3.W, literal.x, KC0[3].Y, 1980; R600-NEXT: LOG_IEEE * T0.Y, PV.Z, 1981; R600-NEXT: 8388608(1.175494e-38), 0(0.000000e+00) 1982; R600-NEXT: AND_INT T1.Y, PS, literal.x, 1983; R600-NEXT: AND_INT T1.Z, T0.X, literal.x, 1984; R600-NEXT: CNDE T4.W, PV.W, 1.0, literal.y, 1985; R600-NEXT: LOG_IEEE * T0.Z, PV.Z, 1986; R600-NEXT: -4096(nan), 1333788672(4.294967e+09) 1987; R600-NEXT: MUL_IEEE T2.Y, KC0[3].Y, PV.W, 1988; R600-NEXT: ADD T2.Z, T0.X, -PV.Z, 1989; R600-NEXT: AND_INT T4.W, PS, literal.x, 1990; R600-NEXT: ADD * T5.W, T0.Y, -PV.Y, 1991; R600-NEXT: -4096(nan), 0(0.000000e+00) 1992; R600-NEXT: MUL_IEEE T3.Y, PS, literal.x, 1993; R600-NEXT: ADD T3.Z, T0.Z, -PV.W, 1994; R600-NEXT: MUL_IEEE T6.W, PV.Z, literal.x, 1995; R600-NEXT: LOG_IEEE * T1.X, PV.Y, 1996; R600-NEXT: 939916788(3.194618e-05), 0(0.000000e+00) 1997; R600-NEXT: MULADD_IEEE T2.Y, T1.Z, literal.x, PV.W, 1998; R600-NEXT: MUL_IEEE T4.Z, PV.Z, literal.x, 1999; R600-NEXT: AND_INT T6.W, PS, literal.y, 2000; R600-NEXT: MULADD_IEEE * T7.W, T1.Y, literal.x, PV.Y, BS:VEC_021/SCL_122 2001; R600-NEXT: 939916788(3.194618e-05), -4096(nan) 2002; R600-NEXT: MULADD_IEEE T3.Y, T5.W, literal.x, PS, 2003; R600-NEXT: ADD T5.Z, T1.X, -PV.W, 2004; R600-NEXT: MULADD_IEEE T5.W, T4.W, literal.y, PV.Z, BS:VEC_120/SCL_212 2005; R600-NEXT: MULADD_IEEE * T7.W, T2.Z, literal.x, PV.Y, BS:VEC_021/SCL_122 2006; R600-NEXT: 1060204544(6.931152e-01), 939916788(3.194618e-05) 2007; R600-NEXT: MULADD_IEEE T2.X, T1.Z, literal.x, PS, 2008; R600-NEXT: MULADD_IEEE T2.Y, T3.Z, literal.x, PV.W, BS:VEC_120/SCL_212 2009; R600-NEXT: MUL_IEEE T1.Z, PV.Z, literal.y, 2010; R600-NEXT: MULADD_IEEE T5.W, T1.Y, literal.x, PV.Y, 2011; R600-NEXT: SETGT * T7.W, literal.z, |T0.Y|, 2012; R600-NEXT: 1060204544(6.931152e-01), 939916788(3.194618e-05) 2013; R600-NEXT: 2139095040(INF), 0(0.000000e+00) 2014; R600-NEXT: CNDE T3.X, PS, T0.Y, PV.W, 2015; R600-NEXT: CNDE T0.Y, T1.W, 0.0, literal.x, 2016; R600-NEXT: MULADD_IEEE T1.Z, T6.W, literal.y, PV.Z, BS:VEC_120/SCL_212 2017; R600-NEXT: MULADD_IEEE T1.W, T4.W, literal.z, PV.Y, BS:VEC_201 2018; R600-NEXT: SETGT * T4.W, literal.w, |T0.Z|, 2019; R600-NEXT: 1102148120(2.218071e+01), 939916788(3.194618e-05) 2020; R600-NEXT: 1060204544(6.931152e-01), 2139095040(INF) 2021; R600-NEXT: SETGT T4.X, literal.x, |T0.X|, 2022; R600-NEXT: CNDE T1.Y, PS, T0.Z, PV.W, 2023; R600-NEXT: CNDE T0.Z, T2.W, 0.0, literal.y, 2024; R600-NEXT: MULADD_IEEE T1.W, T5.Z, literal.z, PV.Z, 2025; R600-NEXT: ADD * T2.W, PV.X, -PV.Y, 2026; R600-NEXT: 2139095040(INF), 1102148120(2.218071e+01) 2027; R600-NEXT: 1060204544(6.931152e-01), 0(0.000000e+00) 2028; R600-NEXT: MULADD_IEEE T3.X, T6.W, literal.x, PV.W, 2029; R600-NEXT: SETGT T0.Y, literal.y, |T1.X|, 2030; R600-NEXT: ADD T2.Z, PV.Y, -PV.Z, 2031; R600-NEXT: CNDE T1.W, PV.X, T0.X, T2.X, BS:VEC_120/SCL_212 2032; R600-NEXT: CNDE * T0.W, T0.W, 0.0, literal.z, 2033; R600-NEXT: 1060204544(6.931152e-01), 2139095040(INF) 2034; R600-NEXT: 1102148120(2.218071e+01), 0(0.000000e+00) 2035; R600-NEXT: ADD T2.Y, PV.W, -PS, 2036; R600-NEXT: CNDE T0.W, PV.Y, T1.X, PV.X, 2037; R600-NEXT: CNDE * T1.W, T3.W, 0.0, literal.x, 2038; R600-NEXT: 1102148120(2.218071e+01), 0(0.000000e+00) 2039; R600-NEXT: ADD T2.X, PV.W, -PS, 2040; R600-NEXT: LSHR * T0.X, KC0[2].Y, literal.x, 2041; R600-NEXT: 2(2.802597e-45), 0(0.000000e+00) 2042; 2043; CM-LABEL: s_log_v4f32: 2044; CM: ; %bb.0: 2045; CM-NEXT: ALU 84, @4, KC0[CB0:0-32], KC1[] 2046; CM-NEXT: MEM_RAT_CACHELESS STORE_DWORD T2, T0.X 2047; CM-NEXT: CF_END 2048; CM-NEXT: PAD 2049; CM-NEXT: ALU clause starting at 4: 2050; CM-NEXT: SETGT * T0.W, literal.x, KC0[3].Y, 2051; CM-NEXT: 8388608(1.175494e-38), 0(0.000000e+00) 2052; CM-NEXT: CNDE T0.Y, PV.W, 1.0, literal.x, 2053; CM-NEXT: SETGT T0.Z, literal.y, KC0[3].W, 2054; CM-NEXT: SETGT * T1.W, literal.y, KC0[4].X, 2055; CM-NEXT: 1333788672(4.294967e+09), 8388608(1.175494e-38) 2056; CM-NEXT: CNDE T0.X, PV.W, 1.0, literal.x, 2057; CM-NEXT: CNDE T1.Y, PV.Z, 1.0, literal.x, 2058; CM-NEXT: SETGT T1.Z, literal.y, KC0[3].Z, 2059; CM-NEXT: MUL_IEEE * T2.W, KC0[3].Y, PV.Y, 2060; CM-NEXT: 1333788672(4.294967e+09), 8388608(1.175494e-38) 2061; CM-NEXT: LOG_IEEE T0.X (MASKED), T2.W, 2062; CM-NEXT: LOG_IEEE T0.Y, T2.W, 2063; CM-NEXT: LOG_IEEE T0.Z (MASKED), T2.W, 2064; CM-NEXT: LOG_IEEE * T0.W (MASKED), T2.W, 2065; CM-NEXT: CNDE T1.X, T1.Z, 1.0, literal.x, 2066; CM-NEXT: AND_INT T2.Y, PV.Y, literal.y, 2067; CM-NEXT: MUL_IEEE T2.Z, KC0[3].W, T1.Y, 2068; CM-NEXT: MUL_IEEE * T2.W, KC0[4].X, T0.X, 2069; CM-NEXT: 1333788672(4.294967e+09), -4096(nan) 2070; CM-NEXT: LOG_IEEE T0.X, T2.W, 2071; CM-NEXT: LOG_IEEE T0.Y (MASKED), T2.W, 2072; CM-NEXT: LOG_IEEE T0.Z (MASKED), T2.W, 2073; CM-NEXT: LOG_IEEE * T0.W (MASKED), T2.W, 2074; CM-NEXT: LOG_IEEE T1.X (MASKED), T2.Z, 2075; CM-NEXT: LOG_IEEE T1.Y, T2.Z, 2076; CM-NEXT: LOG_IEEE T1.Z (MASKED), T2.Z, 2077; CM-NEXT: LOG_IEEE * T1.W (MASKED), T2.Z, 2078; CM-NEXT: ADD T2.X, T0.Y, -T2.Y, 2079; CM-NEXT: AND_INT T3.Y, PV.Y, literal.x, 2080; CM-NEXT: AND_INT T2.Z, T0.X, literal.x, 2081; CM-NEXT: MUL_IEEE * T2.W, KC0[3].Z, T1.X, 2082; CM-NEXT: -4096(nan), 0(0.000000e+00) 2083; CM-NEXT: LOG_IEEE T1.X, T2.W, 2084; CM-NEXT: LOG_IEEE T1.Y (MASKED), T2.W, 2085; CM-NEXT: LOG_IEEE T1.Z (MASKED), T2.W, 2086; CM-NEXT: LOG_IEEE * T1.W (MASKED), T2.W, 2087; CM-NEXT: ADD T3.X, T0.X, -T2.Z, 2088; CM-NEXT: ADD T4.Y, T1.Y, -T3.Y, 2089; CM-NEXT: AND_INT T3.Z, PV.X, literal.x, 2090; CM-NEXT: MUL_IEEE * T2.W, T2.X, literal.y, BS:VEC_120/SCL_212 2091; CM-NEXT: -4096(nan), 939916788(3.194618e-05) 2092; CM-NEXT: MULADD_IEEE T4.X, T2.Y, literal.x, PV.W, 2093; CM-NEXT: ADD T5.Y, T1.X, -PV.Z, 2094; CM-NEXT: MUL_IEEE T4.Z, PV.Y, literal.x, 2095; CM-NEXT: MUL_IEEE * T2.W, PV.X, literal.x, 2096; CM-NEXT: 939916788(3.194618e-05), 0(0.000000e+00) 2097; CM-NEXT: MULADD_IEEE T5.X, T2.Z, literal.x, PV.W, 2098; CM-NEXT: MULADD_IEEE T6.Y, T3.Y, literal.x, PV.Z, 2099; CM-NEXT: MUL_IEEE T4.Z, PV.Y, literal.x, 2100; CM-NEXT: MULADD_IEEE * T2.W, T2.X, literal.y, PV.X, 2101; CM-NEXT: 939916788(3.194618e-05), 1060204544(6.931152e-01) 2102; CM-NEXT: MULADD_IEEE T2.X, T2.Y, literal.x, PV.W, 2103; CM-NEXT: MULADD_IEEE T2.Y, T3.Z, literal.y, PV.Z, 2104; CM-NEXT: MULADD_IEEE T4.Z, T4.Y, literal.x, PV.Y, BS:VEC_120/SCL_212 2105; CM-NEXT: MULADD_IEEE * T2.W, T3.X, literal.x, PV.X, 2106; CM-NEXT: 1060204544(6.931152e-01), 939916788(3.194618e-05) 2107; CM-NEXT: MULADD_IEEE T3.X, T2.Z, literal.x, PV.W, 2108; CM-NEXT: SETGT T4.Y, literal.y, |T0.X|, 2109; CM-NEXT: MULADD_IEEE T2.Z, T3.Y, literal.x, PV.Z, 2110; CM-NEXT: SETGT * T2.W, literal.y, |T1.Y|, 2111; CM-NEXT: 1060204544(6.931152e-01), 2139095040(INF) 2112; CM-NEXT: CNDE T4.X, PV.W, T1.Y, PV.Z, 2113; CM-NEXT: CNDE T1.Y, PV.Y, T0.X, PV.X, 2114; CM-NEXT: CNDE T2.Z, T1.W, 0.0, literal.x, 2115; CM-NEXT: MULADD_IEEE * T1.W, T5.Y, literal.y, T2.Y, 2116; CM-NEXT: 1102148120(2.218071e+01), 1060204544(6.931152e-01) 2117; CM-NEXT: CNDE T0.X, T0.Z, 0.0, literal.x, 2118; CM-NEXT: MULADD_IEEE T2.Y, T3.Z, literal.y, PV.W, BS:VEC_120/SCL_212 2119; CM-NEXT: SETGT T0.Z, literal.z, |T1.X|, 2120; CM-NEXT: ADD * T2.W, PV.Y, -PV.Z, 2121; CM-NEXT: 1102148120(2.218071e+01), 1060204544(6.931152e-01) 2122; CM-NEXT: 2139095040(INF), 0(0.000000e+00) 2123; CM-NEXT: SETGT T3.X, literal.x, |T0.Y|, 2124; CM-NEXT: CNDE T1.Y, PV.Z, T1.X, PV.Y, 2125; CM-NEXT: ADD T2.Z, T4.X, -PV.X, 2126; CM-NEXT: CNDE * T1.W, T1.Z, 0.0, literal.y, 2127; CM-NEXT: 2139095040(INF), 1102148120(2.218071e+01) 2128; CM-NEXT: ADD T2.Y, PV.Y, -PV.W, 2129; CM-NEXT: CNDE T0.Z, PV.X, T0.Y, T2.X, 2130; CM-NEXT: CNDE * T0.W, T0.W, 0.0, literal.x, 2131; CM-NEXT: 1102148120(2.218071e+01), 0(0.000000e+00) 2132; CM-NEXT: ADD * T2.X, PV.Z, -PV.W, 2133; CM-NEXT: LSHR * T0.X, KC0[2].Y, literal.x, 2134; CM-NEXT: 2(2.802597e-45), 0(0.000000e+00) 2135 %result = call <4 x float> @llvm.log.v4f32(<4 x float> %in) 2136 store <4 x float> %result, ptr addrspace(1) %out 2137 ret void 2138} 2139 2140define float @v_log_f32(float %in) { 2141; SI-SDAG-LABEL: v_log_f32: 2142; SI-SDAG: ; %bb.0: 2143; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2144; SI-SDAG-NEXT: s_mov_b32 s4, 0x800000 2145; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 2146; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2147; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2148; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v1 2149; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 2150; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 2151; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 2152; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 2153; SI-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 2154; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, v2 2155; SI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 2156; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 2157; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 2158; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2159; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 2160; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2161; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 2162; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 2163; 2164; SI-GISEL-LABEL: v_log_f32: 2165; SI-GISEL: ; %bb.0: 2166; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2167; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 2168; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 2169; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2170; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2171; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v1 2172; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 2173; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 2174; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 2175; SI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 2176; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 2177; SI-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 2178; SI-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 2179; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 2180; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 2181; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2182; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 2183; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2184; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 2185; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 2186; 2187; VI-SDAG-LABEL: v_log_f32: 2188; VI-SDAG: ; %bb.0: 2189; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2190; VI-SDAG-NEXT: s_mov_b32 s4, 0x800000 2191; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 2192; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2193; VI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2194; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 2195; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 2196; VI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 2197; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 2198; VI-SDAG-NEXT: v_sub_f32_e32 v2, v0, v1 2199; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317000, v2 2200; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v2 2201; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v1 2202; VI-SDAG-NEXT: v_add_f32_e32 v2, v4, v2 2203; VI-SDAG-NEXT: v_add_f32_e32 v2, v3, v2 2204; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 2205; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 2206; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 2207; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2208; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 2209; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2210; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 2211; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 2212; 2213; VI-GISEL-LABEL: v_log_f32: 2214; VI-GISEL: ; %bb.0: 2215; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2216; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 2217; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 2218; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2219; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2220; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 2221; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 2222; VI-GISEL-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 2223; VI-GISEL-NEXT: v_sub_f32_e32 v2, v0, v1 2224; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v1 2225; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 2226; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 2227; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 2228; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 2229; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 2230; VI-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 2231; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 2232; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 2233; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2234; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 2235; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2236; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 2237; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 2238; 2239; GFX900-SDAG-LABEL: v_log_f32: 2240; GFX900-SDAG: ; %bb.0: 2241; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2242; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x800000 2243; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 2244; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2245; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2246; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 2247; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 2248; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 2249; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 2250; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 2251; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 2252; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, v2 2253; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 2254; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 2255; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 2256; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2257; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 2258; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2259; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 2260; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 2261; 2262; GFX900-GISEL-LABEL: v_log_f32: 2263; GFX900-GISEL: ; %bb.0: 2264; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2265; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 2266; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 2267; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2268; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2269; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 2270; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 2271; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 2272; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 2273; GFX900-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 2274; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 2275; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 2276; GFX900-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 2277; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 2278; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 2279; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2280; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 2281; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2282; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 2283; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 2284; 2285; GFX1100-SDAG-LABEL: v_log_f32: 2286; GFX1100-SDAG: ; %bb.0: 2287; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2288; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 2289; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo 2290; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2291; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2292; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 2293; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2) 2294; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 2295; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 2296; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 2297; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s0, 0x7f800000, |v0| 2298; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 2299; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2300; GFX1100-SDAG-NEXT: v_fmamk_f32 v2, v0, 0x3377d1cf, v2 2301; GFX1100-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 2302; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 2303; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s0 2304; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 2305; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 2306; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 2307; 2308; GFX1100-GISEL-LABEL: v_log_f32: 2309; GFX1100-GISEL: ; %bb.0: 2310; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2311; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 2312; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo 2313; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2314; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2315; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 2316; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2) 2317; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 2318; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 2319; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 2320; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s0, 0x7f800000, |v0| 2321; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 2322; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2323; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 2324; GFX1100-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 2325; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 2326; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s0 2327; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 2328; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 2329; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 2330; 2331; R600-LABEL: v_log_f32: 2332; R600: ; %bb.0: 2333; R600-NEXT: CF_END 2334; R600-NEXT: PAD 2335; 2336; CM-LABEL: v_log_f32: 2337; CM: ; %bb.0: 2338; CM-NEXT: CF_END 2339; CM-NEXT: PAD 2340 %result = call float @llvm.log.f32(float %in) 2341 ret float %result 2342} 2343 2344define float @v_log_fabs_f32(float %in) { 2345; SI-SDAG-LABEL: v_log_fabs_f32: 2346; SI-SDAG: ; %bb.0: 2347; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2348; SI-SDAG-NEXT: s_mov_b32 s4, 0x800000 2349; SI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s4 2350; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2351; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2352; SI-SDAG-NEXT: v_ldexp_f32_e64 v0, |v0|, v1 2353; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 2354; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 2355; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 2356; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 2357; SI-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 2358; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, v2 2359; SI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 2360; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 2361; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 2362; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2363; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 2364; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2365; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 2366; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 2367; 2368; SI-GISEL-LABEL: v_log_fabs_f32: 2369; SI-GISEL: ; %bb.0: 2370; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2371; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 2372; SI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v1 2373; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2374; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2375; SI-GISEL-NEXT: v_ldexp_f32_e64 v0, |v0|, v1 2376; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 2377; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 2378; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 2379; SI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 2380; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 2381; SI-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 2382; SI-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 2383; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 2384; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 2385; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2386; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 2387; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2388; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 2389; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 2390; 2391; VI-SDAG-LABEL: v_log_fabs_f32: 2392; VI-SDAG: ; %bb.0: 2393; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2394; VI-SDAG-NEXT: s_mov_b32 s4, 0x800000 2395; VI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s4 2396; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2397; VI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2398; VI-SDAG-NEXT: v_ldexp_f32 v0, |v0|, v1 2399; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 2400; VI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 2401; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 2402; VI-SDAG-NEXT: v_sub_f32_e32 v2, v0, v1 2403; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317000, v2 2404; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v2 2405; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v1 2406; VI-SDAG-NEXT: v_add_f32_e32 v2, v4, v2 2407; VI-SDAG-NEXT: v_add_f32_e32 v2, v3, v2 2408; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 2409; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 2410; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 2411; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2412; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 2413; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2414; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 2415; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 2416; 2417; VI-GISEL-LABEL: v_log_fabs_f32: 2418; VI-GISEL: ; %bb.0: 2419; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2420; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 2421; VI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v1 2422; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2423; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2424; VI-GISEL-NEXT: v_ldexp_f32 v0, |v0|, v1 2425; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 2426; VI-GISEL-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 2427; VI-GISEL-NEXT: v_sub_f32_e32 v2, v0, v1 2428; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v1 2429; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 2430; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 2431; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 2432; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 2433; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 2434; VI-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 2435; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 2436; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 2437; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2438; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 2439; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2440; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 2441; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 2442; 2443; GFX900-SDAG-LABEL: v_log_fabs_f32: 2444; GFX900-SDAG: ; %bb.0: 2445; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2446; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x800000 2447; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s4 2448; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2449; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2450; GFX900-SDAG-NEXT: v_ldexp_f32 v0, |v0|, v1 2451; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 2452; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 2453; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 2454; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 2455; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 2456; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, v2 2457; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 2458; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 2459; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 2460; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2461; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 2462; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2463; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 2464; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 2465; 2466; GFX900-GISEL-LABEL: v_log_fabs_f32: 2467; GFX900-GISEL: ; %bb.0: 2468; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2469; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 2470; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v1 2471; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2472; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2473; GFX900-GISEL-NEXT: v_ldexp_f32 v0, |v0|, v1 2474; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 2475; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 2476; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 2477; GFX900-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 2478; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 2479; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 2480; GFX900-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 2481; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 2482; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 2483; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2484; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 2485; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2486; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 2487; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 2488; 2489; GFX1100-SDAG-LABEL: v_log_fabs_f32: 2490; GFX1100-SDAG: ; %bb.0: 2491; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2492; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s0, 0x800000, |v0| 2493; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2494; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, s0 2495; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2496; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2497; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, |v0|, v1 2498; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 2499; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 2500; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 2501; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 2502; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 2503; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 2504; GFX1100-SDAG-NEXT: v_fmamk_f32 v2, v0, 0x3377d1cf, v2 2505; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2506; GFX1100-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 2507; GFX1100-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 2508; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, s0 2509; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) 2510; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 2511; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 2512; 2513; GFX1100-GISEL-LABEL: v_log_fabs_f32: 2514; GFX1100-GISEL: ; %bb.0: 2515; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2516; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s0, 0x800000, |v0| 2517; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2518; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s0 2519; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2520; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2521; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, |v0|, v1 2522; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 2523; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 2524; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 2525; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 2526; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 2527; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 2528; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 2529; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2530; GFX1100-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 2531; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 2532; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, s0 2533; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) 2534; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 2535; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 2536; 2537; R600-LABEL: v_log_fabs_f32: 2538; R600: ; %bb.0: 2539; R600-NEXT: CF_END 2540; R600-NEXT: PAD 2541; 2542; CM-LABEL: v_log_fabs_f32: 2543; CM: ; %bb.0: 2544; CM-NEXT: CF_END 2545; CM-NEXT: PAD 2546 %fabs = call float @llvm.fabs.f32(float %in) 2547 %result = call float @llvm.log.f32(float %fabs) 2548 ret float %result 2549} 2550 2551define float @v_log_fneg_fabs_f32(float %in) { 2552; SI-SDAG-LABEL: v_log_fneg_fabs_f32: 2553; SI-SDAG: ; %bb.0: 2554; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2555; SI-SDAG-NEXT: s_mov_b32 s4, 0x80800000 2556; SI-SDAG-NEXT: v_cmp_gt_f32_e64 vcc, |v0|, s4 2557; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2558; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2559; SI-SDAG-NEXT: v_ldexp_f32_e64 v0, -|v0|, v1 2560; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 2561; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 2562; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 2563; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 2564; SI-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 2565; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, v2 2566; SI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 2567; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 2568; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 2569; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2570; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 2571; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2572; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 2573; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 2574; 2575; SI-GISEL-LABEL: v_log_fneg_fabs_f32: 2576; SI-GISEL: ; %bb.0: 2577; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2578; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 2579; SI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, -|v0|, v1 2580; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2581; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2582; SI-GISEL-NEXT: v_ldexp_f32_e64 v0, -|v0|, v1 2583; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 2584; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 2585; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 2586; SI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 2587; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 2588; SI-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 2589; SI-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 2590; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 2591; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 2592; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2593; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 2594; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2595; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 2596; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 2597; 2598; VI-SDAG-LABEL: v_log_fneg_fabs_f32: 2599; VI-SDAG: ; %bb.0: 2600; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2601; VI-SDAG-NEXT: s_mov_b32 s4, 0x80800000 2602; VI-SDAG-NEXT: v_cmp_gt_f32_e64 vcc, |v0|, s4 2603; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2604; VI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2605; VI-SDAG-NEXT: v_ldexp_f32 v0, -|v0|, v1 2606; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 2607; VI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 2608; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 2609; VI-SDAG-NEXT: v_sub_f32_e32 v2, v0, v1 2610; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317000, v2 2611; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v2 2612; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v1 2613; VI-SDAG-NEXT: v_add_f32_e32 v2, v4, v2 2614; VI-SDAG-NEXT: v_add_f32_e32 v2, v3, v2 2615; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 2616; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 2617; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 2618; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2619; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 2620; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2621; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 2622; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 2623; 2624; VI-GISEL-LABEL: v_log_fneg_fabs_f32: 2625; VI-GISEL: ; %bb.0: 2626; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2627; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 2628; VI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, -|v0|, v1 2629; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2630; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2631; VI-GISEL-NEXT: v_ldexp_f32 v0, -|v0|, v1 2632; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 2633; VI-GISEL-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 2634; VI-GISEL-NEXT: v_sub_f32_e32 v2, v0, v1 2635; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v1 2636; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 2637; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 2638; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 2639; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 2640; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 2641; VI-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 2642; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 2643; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 2644; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2645; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 2646; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2647; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 2648; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 2649; 2650; GFX900-SDAG-LABEL: v_log_fneg_fabs_f32: 2651; GFX900-SDAG: ; %bb.0: 2652; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2653; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x80800000 2654; GFX900-SDAG-NEXT: v_cmp_gt_f32_e64 vcc, |v0|, s4 2655; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2656; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2657; GFX900-SDAG-NEXT: v_ldexp_f32 v0, -|v0|, v1 2658; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 2659; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 2660; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 2661; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 2662; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 2663; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, v2 2664; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 2665; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 2666; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 2667; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2668; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 2669; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2670; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 2671; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 2672; 2673; GFX900-GISEL-LABEL: v_log_fneg_fabs_f32: 2674; GFX900-GISEL: ; %bb.0: 2675; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2676; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 2677; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, -|v0|, v1 2678; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2679; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2680; GFX900-GISEL-NEXT: v_ldexp_f32 v0, -|v0|, v1 2681; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 2682; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 2683; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 2684; GFX900-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 2685; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 2686; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 2687; GFX900-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 2688; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 2689; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 2690; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2691; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 2692; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2693; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 2694; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 2695; 2696; GFX1100-SDAG-LABEL: v_log_fneg_fabs_f32: 2697; GFX1100-SDAG: ; %bb.0: 2698; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2699; GFX1100-SDAG-NEXT: v_cmp_lt_f32_e64 s0, 0x80800000, |v0| 2700; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2701; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, s0 2702; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2703; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2704; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, -|v0|, v1 2705; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 2706; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 2707; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 2708; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 2709; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 2710; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 2711; GFX1100-SDAG-NEXT: v_fmamk_f32 v2, v0, 0x3377d1cf, v2 2712; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2713; GFX1100-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 2714; GFX1100-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 2715; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, s0 2716; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) 2717; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 2718; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 2719; 2720; GFX1100-GISEL-LABEL: v_log_fneg_fabs_f32: 2721; GFX1100-GISEL: ; %bb.0: 2722; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2723; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s0, 0x800000, -|v0| 2724; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2725; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s0 2726; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2727; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2728; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, -|v0|, v1 2729; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 2730; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 2731; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 2732; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 2733; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 2734; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 2735; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 2736; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2737; GFX1100-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 2738; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 2739; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, s0 2740; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) 2741; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 2742; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 2743; 2744; R600-LABEL: v_log_fneg_fabs_f32: 2745; R600: ; %bb.0: 2746; R600-NEXT: CF_END 2747; R600-NEXT: PAD 2748; 2749; CM-LABEL: v_log_fneg_fabs_f32: 2750; CM: ; %bb.0: 2751; CM-NEXT: CF_END 2752; CM-NEXT: PAD 2753 %fabs = call float @llvm.fabs.f32(float %in) 2754 %fneg.fabs = fneg float %fabs 2755 %result = call float @llvm.log.f32(float %fneg.fabs) 2756 ret float %result 2757} 2758 2759define float @v_log_fneg_f32(float %in) { 2760; SI-SDAG-LABEL: v_log_fneg_f32: 2761; SI-SDAG: ; %bb.0: 2762; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2763; SI-SDAG-NEXT: s_mov_b32 s4, 0x80800000 2764; SI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s4, v0 2765; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2766; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2767; SI-SDAG-NEXT: v_ldexp_f32_e64 v0, -v0, v1 2768; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 2769; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 2770; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 2771; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 2772; SI-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 2773; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, v2 2774; SI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 2775; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 2776; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 2777; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2778; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 2779; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2780; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 2781; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 2782; 2783; SI-GISEL-LABEL: v_log_fneg_f32: 2784; SI-GISEL: ; %bb.0: 2785; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2786; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 2787; SI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, -v0, v1 2788; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2789; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2790; SI-GISEL-NEXT: v_ldexp_f32_e64 v0, -v0, v1 2791; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 2792; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 2793; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 2794; SI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 2795; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 2796; SI-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 2797; SI-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 2798; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 2799; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 2800; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2801; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 2802; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2803; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 2804; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 2805; 2806; VI-SDAG-LABEL: v_log_fneg_f32: 2807; VI-SDAG: ; %bb.0: 2808; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2809; VI-SDAG-NEXT: s_mov_b32 s4, 0x80800000 2810; VI-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s4, v0 2811; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2812; VI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2813; VI-SDAG-NEXT: v_ldexp_f32 v0, -v0, v1 2814; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 2815; VI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 2816; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 2817; VI-SDAG-NEXT: v_sub_f32_e32 v2, v0, v1 2818; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317000, v2 2819; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v2 2820; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v1 2821; VI-SDAG-NEXT: v_add_f32_e32 v2, v4, v2 2822; VI-SDAG-NEXT: v_add_f32_e32 v2, v3, v2 2823; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 2824; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 2825; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 2826; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2827; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 2828; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2829; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 2830; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 2831; 2832; VI-GISEL-LABEL: v_log_fneg_f32: 2833; VI-GISEL: ; %bb.0: 2834; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2835; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 2836; VI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, -v0, v1 2837; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2838; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2839; VI-GISEL-NEXT: v_ldexp_f32 v0, -v0, v1 2840; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 2841; VI-GISEL-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 2842; VI-GISEL-NEXT: v_sub_f32_e32 v2, v0, v1 2843; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v1 2844; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 2845; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 2846; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 2847; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 2848; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 2849; VI-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 2850; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 2851; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 2852; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2853; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 2854; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2855; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 2856; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 2857; 2858; GFX900-SDAG-LABEL: v_log_fneg_f32: 2859; GFX900-SDAG: ; %bb.0: 2860; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2861; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x80800000 2862; GFX900-SDAG-NEXT: v_cmp_lt_f32_e32 vcc, s4, v0 2863; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2864; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2865; GFX900-SDAG-NEXT: v_ldexp_f32 v0, -v0, v1 2866; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 2867; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 2868; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 2869; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 2870; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 2871; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, v2 2872; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 2873; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 2874; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 2875; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2876; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 2877; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2878; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 2879; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 2880; 2881; GFX900-GISEL-LABEL: v_log_fneg_f32: 2882; GFX900-GISEL: ; %bb.0: 2883; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2884; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 2885; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, -v0, v1 2886; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 2887; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2888; GFX900-GISEL-NEXT: v_ldexp_f32 v0, -v0, v1 2889; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 2890; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 2891; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 2892; GFX900-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 2893; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 2894; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 2895; GFX900-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 2896; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 2897; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 2898; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 2899; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 2900; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2901; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 2902; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 2903; 2904; GFX1100-SDAG-LABEL: v_log_fneg_f32: 2905; GFX1100-SDAG: ; %bb.0: 2906; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2907; GFX1100-SDAG-NEXT: v_cmp_lt_f32_e32 vcc_lo, 0x80800000, v0 2908; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo 2909; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2910; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2911; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, -v0, v1 2912; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2) 2913; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 2914; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 2915; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 2916; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s0, 0x7f800000, |v0| 2917; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 2918; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2919; GFX1100-SDAG-NEXT: v_fmamk_f32 v2, v0, 0x3377d1cf, v2 2920; GFX1100-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 2921; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 2922; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s0 2923; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 2924; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 2925; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 2926; 2927; GFX1100-GISEL-LABEL: v_log_fneg_f32: 2928; GFX1100-GISEL: ; %bb.0: 2929; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2930; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s0, 0x800000, -v0 2931; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2932; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s0 2933; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 2934; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2935; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, -v0, v1 2936; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 2937; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 2938; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 2939; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 2940; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 2941; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 2942; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 2943; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 2944; GFX1100-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 2945; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 2946; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, s0 2947; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) 2948; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 2949; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 2950; 2951; R600-LABEL: v_log_fneg_f32: 2952; R600: ; %bb.0: 2953; R600-NEXT: CF_END 2954; R600-NEXT: PAD 2955; 2956; CM-LABEL: v_log_fneg_f32: 2957; CM: ; %bb.0: 2958; CM-NEXT: CF_END 2959; CM-NEXT: PAD 2960 %fneg = fneg float %in 2961 %result = call float @llvm.log.f32(float %fneg) 2962 ret float %result 2963} 2964 2965define float @v_log_f32_fast(float %in) { 2966; SI-SDAG-LABEL: v_log_f32_fast: 2967; SI-SDAG: ; %bb.0: 2968; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2969; SI-SDAG-NEXT: s_mov_b32 s4, 0x800000 2970; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 2971; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc 2972; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 2973; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v2 2974; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 2975; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0xc1b17218 2976; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 2977; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317218 2978; SI-SDAG-NEXT: v_fma_f32 v0, v0, s4, v1 2979; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 2980; 2981; SI-GISEL-LABEL: v_log_f32_fast: 2982; SI-GISEL: ; %bb.0: 2983; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2984; SI-GISEL-NEXT: v_log_f32_e32 v2, v0 2985; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 2986; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0xc1b17218 2987; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 2988; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc 2989; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317218 2990; SI-GISEL-NEXT: v_fma_f32 v0, v2, v1, v0 2991; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 2992; 2993; VI-SDAG-LABEL: v_log_f32_fast: 2994; VI-SDAG: ; %bb.0: 2995; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2996; VI-SDAG-NEXT: s_mov_b32 s4, 0x800000 2997; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 2998; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc 2999; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3000; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v2 3001; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 3002; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0xc1b17218 3003; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3004; VI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 3005; VI-SDAG-NEXT: v_add_f32_e32 v0, v0, v1 3006; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 3007; 3008; VI-GISEL-LABEL: v_log_f32_fast: 3009; VI-GISEL: ; %bb.0: 3010; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3011; VI-GISEL-NEXT: v_log_f32_e32 v2, v0 3012; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3013; VI-GISEL-NEXT: v_mov_b32_e32 v3, 0xc1b17218 3014; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 3015; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc 3016; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317218, v2 3017; VI-GISEL-NEXT: v_add_f32_e32 v0, v1, v0 3018; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 3019; 3020; GFX900-SDAG-LABEL: v_log_f32_fast: 3021; GFX900-SDAG: ; %bb.0: 3022; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3023; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x800000 3024; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 3025; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc 3026; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3027; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v2 3028; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 3029; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0xc1b17218 3030; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3031; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317218 3032; GFX900-SDAG-NEXT: v_fma_f32 v0, v0, s4, v1 3033; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 3034; 3035; GFX900-GISEL-LABEL: v_log_f32_fast: 3036; GFX900-GISEL: ; %bb.0: 3037; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3038; GFX900-GISEL-NEXT: v_log_f32_e32 v2, v0 3039; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3040; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0xc1b17218 3041; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 3042; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc 3043; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317218 3044; GFX900-GISEL-NEXT: v_fma_f32 v0, v2, v1, v0 3045; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 3046; 3047; GFX1100-SDAG-LABEL: v_log_f32_fast: 3048; GFX1100-SDAG: ; %bb.0: 3049; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3050; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 3051; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo 3052; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0xc1b17218, vcc_lo 3053; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 3054; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3055; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v2 3056; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) 3057; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 3058; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 3059; GFX1100-SDAG-NEXT: v_fmamk_f32 v0, v0, 0x3f317218, v1 3060; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 3061; 3062; GFX1100-GISEL-LABEL: v_log_f32_fast: 3063; GFX1100-GISEL: ; %bb.0: 3064; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3065; GFX1100-GISEL-NEXT: v_log_f32_e32 v1, v0 3066; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 3067; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 0xc1b17218, vcc_lo 3068; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 3069; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v0, 0x3f317218, v1 3070; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 3071; 3072; R600-LABEL: v_log_f32_fast: 3073; R600: ; %bb.0: 3074; R600-NEXT: CF_END 3075; R600-NEXT: PAD 3076; 3077; CM-LABEL: v_log_f32_fast: 3078; CM: ; %bb.0: 3079; CM-NEXT: CF_END 3080; CM-NEXT: PAD 3081 %result = call fast float @llvm.log.f32(float %in) 3082 ret float %result 3083} 3084 3085define float @v_log_f32_unsafe_math_attr(float %in) "unsafe-fp-math"="true" { 3086; SI-SDAG-LABEL: v_log_f32_unsafe_math_attr: 3087; SI-SDAG: ; %bb.0: 3088; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3089; SI-SDAG-NEXT: s_mov_b32 s4, 0x800000 3090; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 3091; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc 3092; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3093; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v2 3094; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 3095; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0xc1b17218 3096; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3097; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317218 3098; SI-SDAG-NEXT: v_fma_f32 v0, v0, s4, v1 3099; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 3100; 3101; SI-GISEL-LABEL: v_log_f32_unsafe_math_attr: 3102; SI-GISEL: ; %bb.0: 3103; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3104; SI-GISEL-NEXT: v_log_f32_e32 v2, v0 3105; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3106; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0xc1b17218 3107; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 3108; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc 3109; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317218 3110; SI-GISEL-NEXT: v_fma_f32 v0, v2, v1, v0 3111; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 3112; 3113; VI-SDAG-LABEL: v_log_f32_unsafe_math_attr: 3114; VI-SDAG: ; %bb.0: 3115; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3116; VI-SDAG-NEXT: s_mov_b32 s4, 0x800000 3117; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 3118; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc 3119; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3120; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v2 3121; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 3122; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0xc1b17218 3123; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3124; VI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 3125; VI-SDAG-NEXT: v_add_f32_e32 v0, v0, v1 3126; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 3127; 3128; VI-GISEL-LABEL: v_log_f32_unsafe_math_attr: 3129; VI-GISEL: ; %bb.0: 3130; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3131; VI-GISEL-NEXT: v_log_f32_e32 v2, v0 3132; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3133; VI-GISEL-NEXT: v_mov_b32_e32 v3, 0xc1b17218 3134; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 3135; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc 3136; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317218, v2 3137; VI-GISEL-NEXT: v_add_f32_e32 v0, v1, v0 3138; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 3139; 3140; GFX900-SDAG-LABEL: v_log_f32_unsafe_math_attr: 3141; GFX900-SDAG: ; %bb.0: 3142; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3143; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x800000 3144; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 3145; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc 3146; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3147; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v2 3148; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 3149; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0xc1b17218 3150; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3151; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317218 3152; GFX900-SDAG-NEXT: v_fma_f32 v0, v0, s4, v1 3153; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 3154; 3155; GFX900-GISEL-LABEL: v_log_f32_unsafe_math_attr: 3156; GFX900-GISEL: ; %bb.0: 3157; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3158; GFX900-GISEL-NEXT: v_log_f32_e32 v2, v0 3159; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3160; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0xc1b17218 3161; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 3162; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc 3163; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317218 3164; GFX900-GISEL-NEXT: v_fma_f32 v0, v2, v1, v0 3165; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 3166; 3167; GFX1100-SDAG-LABEL: v_log_f32_unsafe_math_attr: 3168; GFX1100-SDAG: ; %bb.0: 3169; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3170; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 3171; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo 3172; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0xc1b17218, vcc_lo 3173; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 3174; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3175; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v2 3176; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) 3177; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 3178; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 3179; GFX1100-SDAG-NEXT: v_fmamk_f32 v0, v0, 0x3f317218, v1 3180; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 3181; 3182; GFX1100-GISEL-LABEL: v_log_f32_unsafe_math_attr: 3183; GFX1100-GISEL: ; %bb.0: 3184; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3185; GFX1100-GISEL-NEXT: v_log_f32_e32 v1, v0 3186; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 3187; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 0xc1b17218, vcc_lo 3188; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 3189; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v0, 0x3f317218, v1 3190; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 3191; 3192; R600-LABEL: v_log_f32_unsafe_math_attr: 3193; R600: ; %bb.0: 3194; R600-NEXT: CF_END 3195; R600-NEXT: PAD 3196; 3197; CM-LABEL: v_log_f32_unsafe_math_attr: 3198; CM: ; %bb.0: 3199; CM-NEXT: CF_END 3200; CM-NEXT: PAD 3201 %result = call float @llvm.log.f32(float %in) 3202 ret float %result 3203} 3204 3205define float @v_log_f32_approx_fn_attr(float %in) "approx-func-fp-math"="true" { 3206; SI-SDAG-LABEL: v_log_f32_approx_fn_attr: 3207; SI-SDAG: ; %bb.0: 3208; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3209; SI-SDAG-NEXT: s_mov_b32 s4, 0x800000 3210; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 3211; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc 3212; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3213; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v2 3214; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 3215; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0xc1b17218 3216; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3217; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317218 3218; SI-SDAG-NEXT: v_fma_f32 v0, v0, s4, v1 3219; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 3220; 3221; SI-GISEL-LABEL: v_log_f32_approx_fn_attr: 3222; SI-GISEL: ; %bb.0: 3223; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3224; SI-GISEL-NEXT: v_log_f32_e32 v2, v0 3225; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3226; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0xc1b17218 3227; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 3228; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc 3229; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317218 3230; SI-GISEL-NEXT: v_fma_f32 v0, v2, v1, v0 3231; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 3232; 3233; VI-SDAG-LABEL: v_log_f32_approx_fn_attr: 3234; VI-SDAG: ; %bb.0: 3235; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3236; VI-SDAG-NEXT: s_mov_b32 s4, 0x800000 3237; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 3238; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc 3239; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3240; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v2 3241; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 3242; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0xc1b17218 3243; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3244; VI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 3245; VI-SDAG-NEXT: v_add_f32_e32 v0, v0, v1 3246; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 3247; 3248; VI-GISEL-LABEL: v_log_f32_approx_fn_attr: 3249; VI-GISEL: ; %bb.0: 3250; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3251; VI-GISEL-NEXT: v_log_f32_e32 v2, v0 3252; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3253; VI-GISEL-NEXT: v_mov_b32_e32 v3, 0xc1b17218 3254; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 3255; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc 3256; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317218, v2 3257; VI-GISEL-NEXT: v_add_f32_e32 v0, v1, v0 3258; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 3259; 3260; GFX900-SDAG-LABEL: v_log_f32_approx_fn_attr: 3261; GFX900-SDAG: ; %bb.0: 3262; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3263; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x800000 3264; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 3265; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc 3266; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3267; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v2 3268; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 3269; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0xc1b17218 3270; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3271; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317218 3272; GFX900-SDAG-NEXT: v_fma_f32 v0, v0, s4, v1 3273; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 3274; 3275; GFX900-GISEL-LABEL: v_log_f32_approx_fn_attr: 3276; GFX900-GISEL: ; %bb.0: 3277; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3278; GFX900-GISEL-NEXT: v_log_f32_e32 v2, v0 3279; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3280; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0xc1b17218 3281; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 3282; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc 3283; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317218 3284; GFX900-GISEL-NEXT: v_fma_f32 v0, v2, v1, v0 3285; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 3286; 3287; GFX1100-SDAG-LABEL: v_log_f32_approx_fn_attr: 3288; GFX1100-SDAG: ; %bb.0: 3289; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3290; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 3291; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo 3292; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0xc1b17218, vcc_lo 3293; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 3294; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3295; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v2 3296; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) 3297; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 3298; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 3299; GFX1100-SDAG-NEXT: v_fmamk_f32 v0, v0, 0x3f317218, v1 3300; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 3301; 3302; GFX1100-GISEL-LABEL: v_log_f32_approx_fn_attr: 3303; GFX1100-GISEL: ; %bb.0: 3304; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3305; GFX1100-GISEL-NEXT: v_log_f32_e32 v1, v0 3306; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 3307; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 0xc1b17218, vcc_lo 3308; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 3309; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v0, 0x3f317218, v1 3310; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 3311; 3312; R600-LABEL: v_log_f32_approx_fn_attr: 3313; R600: ; %bb.0: 3314; R600-NEXT: CF_END 3315; R600-NEXT: PAD 3316; 3317; CM-LABEL: v_log_f32_approx_fn_attr: 3318; CM: ; %bb.0: 3319; CM-NEXT: CF_END 3320; CM-NEXT: PAD 3321 %result = call float @llvm.log.f32(float %in) 3322 ret float %result 3323} 3324 3325define float @v_log_f32_ninf(float %in) { 3326; SI-SDAG-LABEL: v_log_f32_ninf: 3327; SI-SDAG: ; %bb.0: 3328; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3329; SI-SDAG-NEXT: s_mov_b32 s4, 0x800000 3330; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 3331; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 3332; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 3333; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v1 3334; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 3335; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 3336; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 3337; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 3338; SI-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 3339; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, v2 3340; SI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 3341; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 3342; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 3343; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 3344; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 3345; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3346; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 3347; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 3348; 3349; SI-GISEL-LABEL: v_log_f32_ninf: 3350; SI-GISEL: ; %bb.0: 3351; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3352; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3353; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 3354; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 3355; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 3356; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v1 3357; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 3358; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 3359; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 3360; SI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 3361; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 3362; SI-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 3363; SI-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 3364; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 3365; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 3366; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 3367; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 3368; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3369; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 3370; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 3371; 3372; VI-SDAG-LABEL: v_log_f32_ninf: 3373; VI-SDAG: ; %bb.0: 3374; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3375; VI-SDAG-NEXT: s_mov_b32 s4, 0x800000 3376; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 3377; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 3378; VI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 3379; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 3380; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 3381; VI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 3382; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 3383; VI-SDAG-NEXT: v_sub_f32_e32 v2, v0, v1 3384; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317000, v2 3385; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v2 3386; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v1 3387; VI-SDAG-NEXT: v_add_f32_e32 v2, v4, v2 3388; VI-SDAG-NEXT: v_add_f32_e32 v2, v3, v2 3389; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 3390; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 3391; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 3392; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 3393; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 3394; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3395; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 3396; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 3397; 3398; VI-GISEL-LABEL: v_log_f32_ninf: 3399; VI-GISEL: ; %bb.0: 3400; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3401; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3402; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 3403; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 3404; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 3405; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 3406; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 3407; VI-GISEL-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 3408; VI-GISEL-NEXT: v_sub_f32_e32 v2, v0, v1 3409; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v1 3410; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 3411; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 3412; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 3413; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 3414; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 3415; VI-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 3416; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 3417; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 3418; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 3419; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 3420; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3421; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 3422; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 3423; 3424; GFX900-SDAG-LABEL: v_log_f32_ninf: 3425; GFX900-SDAG: ; %bb.0: 3426; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3427; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x800000 3428; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 3429; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 3430; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 3431; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 3432; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 3433; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 3434; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 3435; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 3436; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 3437; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, v2 3438; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 3439; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 3440; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 3441; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 3442; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 3443; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3444; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 3445; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 3446; 3447; GFX900-GISEL-LABEL: v_log_f32_ninf: 3448; GFX900-GISEL: ; %bb.0: 3449; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3450; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3451; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 3452; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 3453; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 3454; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 3455; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 3456; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 3457; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 3458; GFX900-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 3459; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 3460; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 3461; GFX900-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 3462; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 3463; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 3464; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 3465; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 3466; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3467; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 3468; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 3469; 3470; GFX1100-SDAG-LABEL: v_log_f32_ninf: 3471; GFX1100-SDAG: ; %bb.0: 3472; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3473; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 3474; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo 3475; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 3476; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 3477; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 3478; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2) 3479; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 3480; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 3481; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 3482; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s0, 0x7f800000, |v0| 3483; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 3484; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 3485; GFX1100-SDAG-NEXT: v_fmamk_f32 v2, v0, 0x3377d1cf, v2 3486; GFX1100-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 3487; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 3488; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s0 3489; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 3490; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 3491; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 3492; 3493; GFX1100-GISEL-LABEL: v_log_f32_ninf: 3494; GFX1100-GISEL: ; %bb.0: 3495; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3496; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 3497; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo 3498; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 3499; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 3500; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 3501; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2) 3502; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 3503; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 3504; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 3505; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s0, 0x7f800000, |v0| 3506; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 3507; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 3508; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 3509; GFX1100-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 3510; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 3511; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s0 3512; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 3513; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 3514; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 3515; 3516; R600-LABEL: v_log_f32_ninf: 3517; R600: ; %bb.0: 3518; R600-NEXT: CF_END 3519; R600-NEXT: PAD 3520; 3521; CM-LABEL: v_log_f32_ninf: 3522; CM: ; %bb.0: 3523; CM-NEXT: CF_END 3524; CM-NEXT: PAD 3525 %result = call ninf float @llvm.log.f32(float %in) 3526 ret float %result 3527} 3528 3529define float @v_log_f32_afn(float %in) { 3530; SI-SDAG-LABEL: v_log_f32_afn: 3531; SI-SDAG: ; %bb.0: 3532; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3533; SI-SDAG-NEXT: s_mov_b32 s4, 0x800000 3534; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 3535; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc 3536; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3537; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v2 3538; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 3539; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0xc1b17218 3540; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3541; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317218 3542; SI-SDAG-NEXT: v_fma_f32 v0, v0, s4, v1 3543; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 3544; 3545; SI-GISEL-LABEL: v_log_f32_afn: 3546; SI-GISEL: ; %bb.0: 3547; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3548; SI-GISEL-NEXT: v_log_f32_e32 v2, v0 3549; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3550; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0xc1b17218 3551; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 3552; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc 3553; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317218 3554; SI-GISEL-NEXT: v_fma_f32 v0, v2, v1, v0 3555; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 3556; 3557; VI-SDAG-LABEL: v_log_f32_afn: 3558; VI-SDAG: ; %bb.0: 3559; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3560; VI-SDAG-NEXT: s_mov_b32 s4, 0x800000 3561; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 3562; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc 3563; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3564; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v2 3565; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 3566; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0xc1b17218 3567; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3568; VI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 3569; VI-SDAG-NEXT: v_add_f32_e32 v0, v0, v1 3570; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 3571; 3572; VI-GISEL-LABEL: v_log_f32_afn: 3573; VI-GISEL: ; %bb.0: 3574; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3575; VI-GISEL-NEXT: v_log_f32_e32 v2, v0 3576; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3577; VI-GISEL-NEXT: v_mov_b32_e32 v3, 0xc1b17218 3578; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 3579; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc 3580; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317218, v2 3581; VI-GISEL-NEXT: v_add_f32_e32 v0, v1, v0 3582; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 3583; 3584; GFX900-SDAG-LABEL: v_log_f32_afn: 3585; GFX900-SDAG: ; %bb.0: 3586; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3587; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x800000 3588; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 3589; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc 3590; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3591; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v2 3592; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 3593; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0xc1b17218 3594; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3595; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317218 3596; GFX900-SDAG-NEXT: v_fma_f32 v0, v0, s4, v1 3597; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 3598; 3599; GFX900-GISEL-LABEL: v_log_f32_afn: 3600; GFX900-GISEL: ; %bb.0: 3601; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3602; GFX900-GISEL-NEXT: v_log_f32_e32 v2, v0 3603; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3604; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0xc1b17218 3605; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 3606; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc 3607; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317218 3608; GFX900-GISEL-NEXT: v_fma_f32 v0, v2, v1, v0 3609; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 3610; 3611; GFX1100-SDAG-LABEL: v_log_f32_afn: 3612; GFX1100-SDAG: ; %bb.0: 3613; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3614; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 3615; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo 3616; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0xc1b17218, vcc_lo 3617; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 3618; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3619; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v2 3620; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) 3621; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 3622; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 3623; GFX1100-SDAG-NEXT: v_fmamk_f32 v0, v0, 0x3f317218, v1 3624; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 3625; 3626; GFX1100-GISEL-LABEL: v_log_f32_afn: 3627; GFX1100-GISEL: ; %bb.0: 3628; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3629; GFX1100-GISEL-NEXT: v_log_f32_e32 v1, v0 3630; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 3631; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 0xc1b17218, vcc_lo 3632; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 3633; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v0, 0x3f317218, v1 3634; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 3635; 3636; R600-LABEL: v_log_f32_afn: 3637; R600: ; %bb.0: 3638; R600-NEXT: CF_END 3639; R600-NEXT: PAD 3640; 3641; CM-LABEL: v_log_f32_afn: 3642; CM: ; %bb.0: 3643; CM-NEXT: CF_END 3644; CM-NEXT: PAD 3645 %result = call afn float @llvm.log.f32(float %in) 3646 ret float %result 3647} 3648 3649define float @v_log_f32_afn_daz(float %in) #0 { 3650; GFX689-LABEL: v_log_f32_afn_daz: 3651; GFX689: ; %bb.0: 3652; GFX689-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3653; GFX689-NEXT: v_log_f32_e32 v0, v0 3654; GFX689-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 3655; GFX689-NEXT: s_setpc_b64 s[30:31] 3656; 3657; GFX1100-LABEL: v_log_f32_afn_daz: 3658; GFX1100: ; %bb.0: 3659; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3660; GFX1100-NEXT: v_log_f32_e32 v0, v0 3661; GFX1100-NEXT: s_waitcnt_depctr 0xfff 3662; GFX1100-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 3663; GFX1100-NEXT: s_setpc_b64 s[30:31] 3664; 3665; R600-LABEL: v_log_f32_afn_daz: 3666; R600: ; %bb.0: 3667; R600-NEXT: CF_END 3668; R600-NEXT: PAD 3669; 3670; CM-LABEL: v_log_f32_afn_daz: 3671; CM: ; %bb.0: 3672; CM-NEXT: CF_END 3673; CM-NEXT: PAD 3674 %result = call afn float @llvm.log.f32(float %in) 3675 ret float %result 3676} 3677 3678define float @v_log_f32_afn_dynamic(float %in) #1 { 3679; SI-SDAG-LABEL: v_log_f32_afn_dynamic: 3680; SI-SDAG: ; %bb.0: 3681; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3682; SI-SDAG-NEXT: s_mov_b32 s4, 0x800000 3683; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 3684; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc 3685; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3686; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v2 3687; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 3688; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0xc1b17218 3689; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3690; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317218 3691; SI-SDAG-NEXT: v_fma_f32 v0, v0, s4, v1 3692; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 3693; 3694; SI-GISEL-LABEL: v_log_f32_afn_dynamic: 3695; SI-GISEL: ; %bb.0: 3696; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3697; SI-GISEL-NEXT: v_log_f32_e32 v2, v0 3698; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3699; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0xc1b17218 3700; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 3701; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc 3702; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317218 3703; SI-GISEL-NEXT: v_fma_f32 v0, v2, v1, v0 3704; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 3705; 3706; VI-SDAG-LABEL: v_log_f32_afn_dynamic: 3707; VI-SDAG: ; %bb.0: 3708; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3709; VI-SDAG-NEXT: s_mov_b32 s4, 0x800000 3710; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 3711; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc 3712; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3713; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v2 3714; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 3715; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0xc1b17218 3716; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3717; VI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 3718; VI-SDAG-NEXT: v_add_f32_e32 v0, v0, v1 3719; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 3720; 3721; VI-GISEL-LABEL: v_log_f32_afn_dynamic: 3722; VI-GISEL: ; %bb.0: 3723; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3724; VI-GISEL-NEXT: v_log_f32_e32 v2, v0 3725; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3726; VI-GISEL-NEXT: v_mov_b32_e32 v3, 0xc1b17218 3727; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 3728; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc 3729; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317218, v2 3730; VI-GISEL-NEXT: v_add_f32_e32 v0, v1, v0 3731; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 3732; 3733; GFX900-SDAG-LABEL: v_log_f32_afn_dynamic: 3734; GFX900-SDAG: ; %bb.0: 3735; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3736; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x800000 3737; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 3738; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc 3739; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3740; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v2 3741; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 3742; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0xc1b17218 3743; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3744; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317218 3745; GFX900-SDAG-NEXT: v_fma_f32 v0, v0, s4, v1 3746; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 3747; 3748; GFX900-GISEL-LABEL: v_log_f32_afn_dynamic: 3749; GFX900-GISEL: ; %bb.0: 3750; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3751; GFX900-GISEL-NEXT: v_log_f32_e32 v2, v0 3752; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3753; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0xc1b17218 3754; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 3755; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc 3756; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317218 3757; GFX900-GISEL-NEXT: v_fma_f32 v0, v2, v1, v0 3758; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 3759; 3760; GFX1100-SDAG-LABEL: v_log_f32_afn_dynamic: 3761; GFX1100-SDAG: ; %bb.0: 3762; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3763; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 3764; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc_lo 3765; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0xc1b17218, vcc_lo 3766; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 3767; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3768; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v2 3769; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) 3770; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 3771; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 3772; GFX1100-SDAG-NEXT: v_fmamk_f32 v0, v0, 0x3f317218, v1 3773; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 3774; 3775; GFX1100-GISEL-LABEL: v_log_f32_afn_dynamic: 3776; GFX1100-GISEL: ; %bb.0: 3777; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3778; GFX1100-GISEL-NEXT: v_log_f32_e32 v1, v0 3779; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 3780; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 0xc1b17218, vcc_lo 3781; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 3782; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v0, 0x3f317218, v1 3783; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 3784; 3785; R600-LABEL: v_log_f32_afn_dynamic: 3786; R600: ; %bb.0: 3787; R600-NEXT: CF_END 3788; R600-NEXT: PAD 3789; 3790; CM-LABEL: v_log_f32_afn_dynamic: 3791; CM: ; %bb.0: 3792; CM-NEXT: CF_END 3793; CM-NEXT: PAD 3794 %result = call afn float @llvm.log.f32(float %in) 3795 ret float %result 3796} 3797 3798define float @v_fabs_log_f32_afn(float %in) { 3799; SI-SDAG-LABEL: v_fabs_log_f32_afn: 3800; SI-SDAG: ; %bb.0: 3801; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3802; SI-SDAG-NEXT: s_mov_b32 s4, 0x800000 3803; SI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s4 3804; SI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc 3805; SI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3806; SI-SDAG-NEXT: v_ldexp_f32_e64 v0, |v0|, v2 3807; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 3808; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0xc1b17218 3809; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3810; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317218 3811; SI-SDAG-NEXT: v_fma_f32 v0, v0, s4, v1 3812; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 3813; 3814; SI-GISEL-LABEL: v_fabs_log_f32_afn: 3815; SI-GISEL: ; %bb.0: 3816; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3817; SI-GISEL-NEXT: v_log_f32_e64 v2, |v0| 3818; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3819; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0xc1b17218 3820; SI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v1 3821; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc 3822; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317218 3823; SI-GISEL-NEXT: v_fma_f32 v0, v2, v1, v0 3824; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 3825; 3826; VI-SDAG-LABEL: v_fabs_log_f32_afn: 3827; VI-SDAG: ; %bb.0: 3828; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3829; VI-SDAG-NEXT: s_mov_b32 s4, 0x800000 3830; VI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s4 3831; VI-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc 3832; VI-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3833; VI-SDAG-NEXT: v_ldexp_f32 v0, |v0|, v2 3834; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 3835; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0xc1b17218 3836; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3837; VI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 3838; VI-SDAG-NEXT: v_add_f32_e32 v0, v0, v1 3839; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 3840; 3841; VI-GISEL-LABEL: v_fabs_log_f32_afn: 3842; VI-GISEL: ; %bb.0: 3843; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3844; VI-GISEL-NEXT: v_log_f32_e64 v2, |v0| 3845; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3846; VI-GISEL-NEXT: v_mov_b32_e32 v3, 0xc1b17218 3847; VI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v1 3848; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc 3849; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317218, v2 3850; VI-GISEL-NEXT: v_add_f32_e32 v0, v1, v0 3851; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 3852; 3853; GFX900-SDAG-LABEL: v_fabs_log_f32_afn: 3854; GFX900-SDAG: ; %bb.0: 3855; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3856; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x800000 3857; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s4 3858; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc 3859; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3860; GFX900-SDAG-NEXT: v_ldexp_f32 v0, |v0|, v2 3861; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 3862; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0xc1b17218 3863; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 3864; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317218 3865; GFX900-SDAG-NEXT: v_fma_f32 v0, v0, s4, v1 3866; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 3867; 3868; GFX900-GISEL-LABEL: v_fabs_log_f32_afn: 3869; GFX900-GISEL: ; %bb.0: 3870; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3871; GFX900-GISEL-NEXT: v_log_f32_e64 v2, |v0| 3872; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 3873; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0xc1b17218 3874; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v1 3875; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v0, 0, v3, vcc 3876; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317218 3877; GFX900-GISEL-NEXT: v_fma_f32 v0, v2, v1, v0 3878; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 3879; 3880; GFX1100-SDAG-LABEL: v_fabs_log_f32_afn: 3881; GFX1100-SDAG: ; %bb.0: 3882; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3883; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s0, 0x800000, |v0| 3884; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2) 3885; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v2, 0, 1, s0 3886; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0xc1b17218, s0 3887; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v2, 5, v2 3888; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 3889; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, |v0|, v2 3890; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 3891; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 3892; GFX1100-SDAG-NEXT: v_fmamk_f32 v0, v0, 0x3f317218, v1 3893; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 3894; 3895; GFX1100-GISEL-LABEL: v_fabs_log_f32_afn: 3896; GFX1100-GISEL: ; %bb.0: 3897; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3898; GFX1100-GISEL-NEXT: v_log_f32_e64 v1, |v0| 3899; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s0, 0x800000, |v0| 3900; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) 3901; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 0xc1b17218, s0 3902; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 3903; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v0, 0x3f317218, v1 3904; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 3905; 3906; R600-LABEL: v_fabs_log_f32_afn: 3907; R600: ; %bb.0: 3908; R600-NEXT: CF_END 3909; R600-NEXT: PAD 3910; 3911; CM-LABEL: v_fabs_log_f32_afn: 3912; CM: ; %bb.0: 3913; CM-NEXT: CF_END 3914; CM-NEXT: PAD 3915 %fabs = call float @llvm.fabs.f32(float %in) 3916 %result = call afn float @llvm.log.f32(float %fabs) 3917 ret float %result 3918} 3919 3920define float @v_log_f32_daz(float %in) #0 { 3921; SI-SDAG-LABEL: v_log_f32_daz: 3922; SI-SDAG: ; %bb.0: 3923; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3924; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 3925; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 3926; SI-SDAG-NEXT: s_mov_b32 s5, 0x3377d1cf 3927; SI-SDAG-NEXT: s_mov_b32 s6, 0x7f800000 3928; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 3929; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 3930; SI-SDAG-NEXT: v_fma_f32 v2, v0, s5, v2 3931; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 3932; SI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s6 3933; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 3934; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 3935; 3936; SI-GISEL-LABEL: v_log_f32_daz: 3937; SI-GISEL: ; %bb.0: 3938; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3939; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 3940; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 3941; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x3377d1cf 3942; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x7f800000 3943; SI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3f317217, v0 3944; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v4 3945; SI-GISEL-NEXT: v_fma_f32 v1, v0, v2, v1 3946; SI-GISEL-NEXT: v_add_f32_e32 v1, v4, v1 3947; SI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v3 3948; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 3949; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 3950; 3951; VI-SDAG-LABEL: v_log_f32_daz: 3952; VI-SDAG: ; %bb.0: 3953; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3954; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 3955; VI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 3956; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 3957; VI-SDAG-NEXT: v_sub_f32_e32 v3, v0, v1 3958; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v1 3959; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v3 3960; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317000, v3 3961; VI-SDAG-NEXT: v_add_f32_e32 v2, v2, v4 3962; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 3963; VI-SDAG-NEXT: v_add_f32_e32 v2, v3, v2 3964; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 3965; VI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s4 3966; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 3967; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 3968; 3969; VI-GISEL-LABEL: v_log_f32_daz: 3970; VI-GISEL: ; %bb.0: 3971; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3972; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 3973; VI-GISEL-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 3974; VI-GISEL-NEXT: v_sub_f32_e32 v2, v0, v1 3975; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v1 3976; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 3977; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 3978; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 3979; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 3980; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 3981; VI-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 3982; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 3983; VI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v2 3984; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 3985; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 3986; 3987; GFX900-SDAG-LABEL: v_log_f32_daz: 3988; GFX900-SDAG: ; %bb.0: 3989; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3990; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 3991; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 3992; GFX900-SDAG-NEXT: s_mov_b32 s5, 0x3377d1cf 3993; GFX900-SDAG-NEXT: s_mov_b32 s6, 0x7f800000 3994; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 3995; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 3996; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s5, v2 3997; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 3998; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s6 3999; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 4000; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 4001; 4002; GFX900-GISEL-LABEL: v_log_f32_daz: 4003; GFX900-GISEL: ; %bb.0: 4004; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4005; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 4006; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 4007; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x3377d1cf 4008; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x7f800000 4009; GFX900-GISEL-NEXT: v_mul_f32_e32 v4, 0x3f317217, v0 4010; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v4 4011; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v2, v1 4012; GFX900-GISEL-NEXT: v_add_f32_e32 v1, v4, v1 4013; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v3 4014; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 4015; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 4016; 4017; GFX1100-SDAG-LABEL: v_log_f32_daz: 4018; GFX1100-SDAG: ; %bb.0: 4019; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4020; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 4021; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 4022; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4023; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 4024; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 4025; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 4026; GFX1100-SDAG-NEXT: v_fmamk_f32 v2, v0, 0x3377d1cf, v2 4027; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 4028; GFX1100-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4029; GFX1100-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 4030; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 4031; 4032; GFX1100-GISEL-LABEL: v_log_f32_daz: 4033; GFX1100-GISEL: ; %bb.0: 4034; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4035; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 4036; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 4037; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4038; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 4039; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 4040; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 4041; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 4042; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 4043; GFX1100-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 4044; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 4045; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 4046; 4047; R600-LABEL: v_log_f32_daz: 4048; R600: ; %bb.0: 4049; R600-NEXT: CF_END 4050; R600-NEXT: PAD 4051; 4052; CM-LABEL: v_log_f32_daz: 4053; CM: ; %bb.0: 4054; CM-NEXT: CF_END 4055; CM-NEXT: PAD 4056 %result = call float @llvm.log.f32(float %in) 4057 ret float %result 4058} 4059 4060define float @v_log_f32_nnan(float %in) { 4061; SI-SDAG-LABEL: v_log_f32_nnan: 4062; SI-SDAG: ; %bb.0: 4063; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4064; SI-SDAG-NEXT: s_mov_b32 s4, 0x800000 4065; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 4066; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4067; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4068; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v1 4069; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 4070; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 4071; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4072; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 4073; SI-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 4074; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, v2 4075; SI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 4076; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4077; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 4078; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 4079; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 4080; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4081; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 4082; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 4083; 4084; SI-GISEL-LABEL: v_log_f32_nnan: 4085; SI-GISEL: ; %bb.0: 4086; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4087; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 4088; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 4089; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4090; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4091; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v1 4092; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 4093; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 4094; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 4095; SI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 4096; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 4097; SI-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 4098; SI-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 4099; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 4100; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 4101; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 4102; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 4103; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4104; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 4105; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 4106; 4107; VI-SDAG-LABEL: v_log_f32_nnan: 4108; VI-SDAG: ; %bb.0: 4109; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4110; VI-SDAG-NEXT: s_mov_b32 s4, 0x800000 4111; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 4112; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4113; VI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4114; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 4115; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 4116; VI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 4117; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 4118; VI-SDAG-NEXT: v_sub_f32_e32 v2, v0, v1 4119; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317000, v2 4120; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v2 4121; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v1 4122; VI-SDAG-NEXT: v_add_f32_e32 v2, v4, v2 4123; VI-SDAG-NEXT: v_add_f32_e32 v2, v3, v2 4124; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 4125; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4126; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 4127; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 4128; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 4129; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4130; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 4131; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 4132; 4133; VI-GISEL-LABEL: v_log_f32_nnan: 4134; VI-GISEL: ; %bb.0: 4135; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4136; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 4137; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 4138; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4139; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4140; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 4141; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 4142; VI-GISEL-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 4143; VI-GISEL-NEXT: v_sub_f32_e32 v2, v0, v1 4144; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v1 4145; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 4146; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 4147; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 4148; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 4149; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 4150; VI-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 4151; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 4152; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 4153; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 4154; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 4155; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4156; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 4157; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 4158; 4159; GFX900-SDAG-LABEL: v_log_f32_nnan: 4160; GFX900-SDAG: ; %bb.0: 4161; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4162; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x800000 4163; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 4164; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4165; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4166; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 4167; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 4168; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 4169; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4170; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 4171; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 4172; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, v2 4173; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 4174; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4175; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 4176; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 4177; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 4178; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4179; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 4180; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 4181; 4182; GFX900-GISEL-LABEL: v_log_f32_nnan: 4183; GFX900-GISEL: ; %bb.0: 4184; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4185; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 4186; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 4187; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4188; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4189; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 4190; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 4191; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 4192; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 4193; GFX900-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 4194; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 4195; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 4196; GFX900-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 4197; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 4198; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 4199; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 4200; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 4201; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4202; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 4203; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 4204; 4205; GFX1100-SDAG-LABEL: v_log_f32_nnan: 4206; GFX1100-SDAG: ; %bb.0: 4207; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4208; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 4209; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo 4210; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 4211; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4212; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 4213; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2) 4214; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 4215; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 4216; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4217; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s0, 0x7f800000, |v0| 4218; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 4219; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 4220; GFX1100-SDAG-NEXT: v_fmamk_f32 v2, v0, 0x3377d1cf, v2 4221; GFX1100-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4222; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 4223; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s0 4224; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 4225; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 4226; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 4227; 4228; GFX1100-GISEL-LABEL: v_log_f32_nnan: 4229; GFX1100-GISEL: ; %bb.0: 4230; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4231; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 4232; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo 4233; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 4234; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4235; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 4236; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2) 4237; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 4238; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 4239; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4240; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s0, 0x7f800000, |v0| 4241; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 4242; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 4243; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 4244; GFX1100-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 4245; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 4246; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s0 4247; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 4248; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 4249; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 4250; 4251; R600-LABEL: v_log_f32_nnan: 4252; R600: ; %bb.0: 4253; R600-NEXT: CF_END 4254; R600-NEXT: PAD 4255; 4256; CM-LABEL: v_log_f32_nnan: 4257; CM: ; %bb.0: 4258; CM-NEXT: CF_END 4259; CM-NEXT: PAD 4260 %result = call nnan float @llvm.log.f32(float %in) 4261 ret float %result 4262} 4263 4264define float @v_log_f32_nnan_daz(float %in) #0 { 4265; SI-SDAG-LABEL: v_log_f32_nnan_daz: 4266; SI-SDAG: ; %bb.0: 4267; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4268; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 4269; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 4270; SI-SDAG-NEXT: s_mov_b32 s5, 0x3377d1cf 4271; SI-SDAG-NEXT: s_mov_b32 s6, 0x7f800000 4272; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4273; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 4274; SI-SDAG-NEXT: v_fma_f32 v2, v0, s5, v2 4275; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4276; SI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s6 4277; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 4278; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 4279; 4280; SI-GISEL-LABEL: v_log_f32_nnan_daz: 4281; SI-GISEL: ; %bb.0: 4282; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4283; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 4284; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 4285; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x3377d1cf 4286; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x7f800000 4287; SI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3f317217, v0 4288; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v4 4289; SI-GISEL-NEXT: v_fma_f32 v1, v0, v2, v1 4290; SI-GISEL-NEXT: v_add_f32_e32 v1, v4, v1 4291; SI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v3 4292; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 4293; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 4294; 4295; VI-SDAG-LABEL: v_log_f32_nnan_daz: 4296; VI-SDAG: ; %bb.0: 4297; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4298; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 4299; VI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 4300; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 4301; VI-SDAG-NEXT: v_sub_f32_e32 v3, v0, v1 4302; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v1 4303; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v3 4304; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317000, v3 4305; VI-SDAG-NEXT: v_add_f32_e32 v2, v2, v4 4306; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 4307; VI-SDAG-NEXT: v_add_f32_e32 v2, v3, v2 4308; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4309; VI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s4 4310; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 4311; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 4312; 4313; VI-GISEL-LABEL: v_log_f32_nnan_daz: 4314; VI-GISEL: ; %bb.0: 4315; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4316; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 4317; VI-GISEL-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 4318; VI-GISEL-NEXT: v_sub_f32_e32 v2, v0, v1 4319; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v1 4320; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 4321; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 4322; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 4323; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 4324; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 4325; VI-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 4326; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 4327; VI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v2 4328; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 4329; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 4330; 4331; GFX900-SDAG-LABEL: v_log_f32_nnan_daz: 4332; GFX900-SDAG: ; %bb.0: 4333; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4334; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 4335; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 4336; GFX900-SDAG-NEXT: s_mov_b32 s5, 0x3377d1cf 4337; GFX900-SDAG-NEXT: s_mov_b32 s6, 0x7f800000 4338; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4339; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 4340; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s5, v2 4341; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4342; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s6 4343; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 4344; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 4345; 4346; GFX900-GISEL-LABEL: v_log_f32_nnan_daz: 4347; GFX900-GISEL: ; %bb.0: 4348; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4349; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 4350; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 4351; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x3377d1cf 4352; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x7f800000 4353; GFX900-GISEL-NEXT: v_mul_f32_e32 v4, 0x3f317217, v0 4354; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v4 4355; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v2, v1 4356; GFX900-GISEL-NEXT: v_add_f32_e32 v1, v4, v1 4357; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v3 4358; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 4359; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 4360; 4361; GFX1100-SDAG-LABEL: v_log_f32_nnan_daz: 4362; GFX1100-SDAG: ; %bb.0: 4363; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4364; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 4365; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 4366; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4367; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 4368; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 4369; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 4370; GFX1100-SDAG-NEXT: v_fmamk_f32 v2, v0, 0x3377d1cf, v2 4371; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 4372; GFX1100-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4373; GFX1100-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 4374; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 4375; 4376; GFX1100-GISEL-LABEL: v_log_f32_nnan_daz: 4377; GFX1100-GISEL: ; %bb.0: 4378; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4379; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 4380; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 4381; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4382; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 4383; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 4384; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 4385; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 4386; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 4387; GFX1100-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 4388; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 4389; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 4390; 4391; R600-LABEL: v_log_f32_nnan_daz: 4392; R600: ; %bb.0: 4393; R600-NEXT: CF_END 4394; R600-NEXT: PAD 4395; 4396; CM-LABEL: v_log_f32_nnan_daz: 4397; CM: ; %bb.0: 4398; CM-NEXT: CF_END 4399; CM-NEXT: PAD 4400 %result = call nnan float @llvm.log.f32(float %in) 4401 ret float %result 4402} 4403 4404define float @v_log_f32_nnan_dynamic(float %in) #1 { 4405; SI-SDAG-LABEL: v_log_f32_nnan_dynamic: 4406; SI-SDAG: ; %bb.0: 4407; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4408; SI-SDAG-NEXT: s_mov_b32 s4, 0x800000 4409; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 4410; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4411; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4412; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v1 4413; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 4414; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 4415; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4416; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 4417; SI-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 4418; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, v2 4419; SI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 4420; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4421; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 4422; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 4423; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 4424; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4425; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 4426; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 4427; 4428; SI-GISEL-LABEL: v_log_f32_nnan_dynamic: 4429; SI-GISEL: ; %bb.0: 4430; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4431; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 4432; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 4433; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4434; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4435; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v1 4436; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 4437; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 4438; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 4439; SI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 4440; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 4441; SI-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 4442; SI-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 4443; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 4444; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 4445; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 4446; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 4447; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4448; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 4449; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 4450; 4451; VI-SDAG-LABEL: v_log_f32_nnan_dynamic: 4452; VI-SDAG: ; %bb.0: 4453; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4454; VI-SDAG-NEXT: s_mov_b32 s4, 0x800000 4455; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 4456; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4457; VI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4458; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 4459; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 4460; VI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 4461; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 4462; VI-SDAG-NEXT: v_sub_f32_e32 v2, v0, v1 4463; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317000, v2 4464; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v2 4465; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v1 4466; VI-SDAG-NEXT: v_add_f32_e32 v2, v4, v2 4467; VI-SDAG-NEXT: v_add_f32_e32 v2, v3, v2 4468; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 4469; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4470; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 4471; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 4472; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 4473; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4474; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 4475; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 4476; 4477; VI-GISEL-LABEL: v_log_f32_nnan_dynamic: 4478; VI-GISEL: ; %bb.0: 4479; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4480; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 4481; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 4482; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4483; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4484; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 4485; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 4486; VI-GISEL-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 4487; VI-GISEL-NEXT: v_sub_f32_e32 v2, v0, v1 4488; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v1 4489; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 4490; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 4491; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 4492; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 4493; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 4494; VI-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 4495; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 4496; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 4497; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 4498; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 4499; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4500; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 4501; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 4502; 4503; GFX900-SDAG-LABEL: v_log_f32_nnan_dynamic: 4504; GFX900-SDAG: ; %bb.0: 4505; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4506; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x800000 4507; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 4508; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4509; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4510; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 4511; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 4512; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 4513; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4514; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 4515; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 4516; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, v2 4517; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 4518; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4519; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 4520; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 4521; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 4522; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4523; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 4524; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 4525; 4526; GFX900-GISEL-LABEL: v_log_f32_nnan_dynamic: 4527; GFX900-GISEL: ; %bb.0: 4528; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4529; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 4530; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 4531; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4532; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4533; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 4534; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 4535; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 4536; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 4537; GFX900-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 4538; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 4539; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 4540; GFX900-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 4541; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 4542; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 4543; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 4544; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 4545; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4546; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 4547; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 4548; 4549; GFX1100-SDAG-LABEL: v_log_f32_nnan_dynamic: 4550; GFX1100-SDAG: ; %bb.0: 4551; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4552; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 4553; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo 4554; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 4555; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4556; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 4557; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2) 4558; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 4559; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 4560; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4561; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s0, 0x7f800000, |v0| 4562; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 4563; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 4564; GFX1100-SDAG-NEXT: v_fmamk_f32 v2, v0, 0x3377d1cf, v2 4565; GFX1100-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4566; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 4567; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s0 4568; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 4569; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 4570; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 4571; 4572; GFX1100-GISEL-LABEL: v_log_f32_nnan_dynamic: 4573; GFX1100-GISEL: ; %bb.0: 4574; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4575; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 4576; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo 4577; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 4578; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4579; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 4580; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2) 4581; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 4582; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 4583; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4584; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s0, 0x7f800000, |v0| 4585; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 4586; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 4587; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 4588; GFX1100-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 4589; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 4590; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s0 4591; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 4592; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 4593; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 4594; 4595; R600-LABEL: v_log_f32_nnan_dynamic: 4596; R600: ; %bb.0: 4597; R600-NEXT: CF_END 4598; R600-NEXT: PAD 4599; 4600; CM-LABEL: v_log_f32_nnan_dynamic: 4601; CM: ; %bb.0: 4602; CM-NEXT: CF_END 4603; CM-NEXT: PAD 4604 %result = call nnan float @llvm.log.f32(float %in) 4605 ret float %result 4606} 4607 4608define float @v_log_f32_ninf_daz(float %in) #0 { 4609; SI-SDAG-LABEL: v_log_f32_ninf_daz: 4610; SI-SDAG: ; %bb.0: 4611; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4612; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 4613; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 4614; SI-SDAG-NEXT: s_mov_b32 s5, 0x3377d1cf 4615; SI-SDAG-NEXT: s_mov_b32 s6, 0x7f800000 4616; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4617; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 4618; SI-SDAG-NEXT: v_fma_f32 v2, v0, s5, v2 4619; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4620; SI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s6 4621; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 4622; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 4623; 4624; SI-GISEL-LABEL: v_log_f32_ninf_daz: 4625; SI-GISEL: ; %bb.0: 4626; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4627; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 4628; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 4629; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x3377d1cf 4630; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x7f800000 4631; SI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3f317217, v0 4632; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v4 4633; SI-GISEL-NEXT: v_fma_f32 v1, v0, v2, v1 4634; SI-GISEL-NEXT: v_add_f32_e32 v1, v4, v1 4635; SI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v3 4636; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 4637; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 4638; 4639; VI-SDAG-LABEL: v_log_f32_ninf_daz: 4640; VI-SDAG: ; %bb.0: 4641; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4642; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 4643; VI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 4644; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 4645; VI-SDAG-NEXT: v_sub_f32_e32 v3, v0, v1 4646; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v1 4647; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v3 4648; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317000, v3 4649; VI-SDAG-NEXT: v_add_f32_e32 v2, v2, v4 4650; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 4651; VI-SDAG-NEXT: v_add_f32_e32 v2, v3, v2 4652; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4653; VI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s4 4654; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 4655; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 4656; 4657; VI-GISEL-LABEL: v_log_f32_ninf_daz: 4658; VI-GISEL: ; %bb.0: 4659; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4660; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 4661; VI-GISEL-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 4662; VI-GISEL-NEXT: v_sub_f32_e32 v2, v0, v1 4663; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v1 4664; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 4665; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 4666; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 4667; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 4668; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 4669; VI-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 4670; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 4671; VI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v2 4672; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 4673; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 4674; 4675; GFX900-SDAG-LABEL: v_log_f32_ninf_daz: 4676; GFX900-SDAG: ; %bb.0: 4677; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4678; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 4679; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 4680; GFX900-SDAG-NEXT: s_mov_b32 s5, 0x3377d1cf 4681; GFX900-SDAG-NEXT: s_mov_b32 s6, 0x7f800000 4682; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4683; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 4684; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s5, v2 4685; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4686; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s6 4687; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 4688; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 4689; 4690; GFX900-GISEL-LABEL: v_log_f32_ninf_daz: 4691; GFX900-GISEL: ; %bb.0: 4692; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4693; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 4694; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 4695; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x3377d1cf 4696; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x7f800000 4697; GFX900-GISEL-NEXT: v_mul_f32_e32 v4, 0x3f317217, v0 4698; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v4 4699; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v2, v1 4700; GFX900-GISEL-NEXT: v_add_f32_e32 v1, v4, v1 4701; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v3 4702; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 4703; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 4704; 4705; GFX1100-SDAG-LABEL: v_log_f32_ninf_daz: 4706; GFX1100-SDAG: ; %bb.0: 4707; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4708; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 4709; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 4710; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4711; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 4712; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 4713; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 4714; GFX1100-SDAG-NEXT: v_fmamk_f32 v2, v0, 0x3377d1cf, v2 4715; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 4716; GFX1100-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4717; GFX1100-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 4718; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 4719; 4720; GFX1100-GISEL-LABEL: v_log_f32_ninf_daz: 4721; GFX1100-GISEL: ; %bb.0: 4722; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4723; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 4724; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 4725; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4726; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 4727; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 4728; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 4729; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 4730; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 4731; GFX1100-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 4732; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 4733; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 4734; 4735; R600-LABEL: v_log_f32_ninf_daz: 4736; R600: ; %bb.0: 4737; R600-NEXT: CF_END 4738; R600-NEXT: PAD 4739; 4740; CM-LABEL: v_log_f32_ninf_daz: 4741; CM: ; %bb.0: 4742; CM-NEXT: CF_END 4743; CM-NEXT: PAD 4744 %result = call ninf float @llvm.log.f32(float %in) 4745 ret float %result 4746} 4747 4748define float @v_log_f32_ninf_dynamic(float %in) #1 { 4749; SI-SDAG-LABEL: v_log_f32_ninf_dynamic: 4750; SI-SDAG: ; %bb.0: 4751; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4752; SI-SDAG-NEXT: s_mov_b32 s4, 0x800000 4753; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 4754; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4755; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4756; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v1 4757; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 4758; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 4759; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4760; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 4761; SI-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 4762; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, v2 4763; SI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 4764; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4765; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 4766; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 4767; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 4768; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4769; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 4770; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 4771; 4772; SI-GISEL-LABEL: v_log_f32_ninf_dynamic: 4773; SI-GISEL: ; %bb.0: 4774; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4775; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 4776; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 4777; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4778; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4779; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v1 4780; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 4781; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 4782; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 4783; SI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 4784; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 4785; SI-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 4786; SI-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 4787; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 4788; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 4789; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 4790; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 4791; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4792; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 4793; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 4794; 4795; VI-SDAG-LABEL: v_log_f32_ninf_dynamic: 4796; VI-SDAG: ; %bb.0: 4797; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4798; VI-SDAG-NEXT: s_mov_b32 s4, 0x800000 4799; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 4800; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4801; VI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4802; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 4803; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 4804; VI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 4805; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 4806; VI-SDAG-NEXT: v_sub_f32_e32 v2, v0, v1 4807; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317000, v2 4808; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v2 4809; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v1 4810; VI-SDAG-NEXT: v_add_f32_e32 v2, v4, v2 4811; VI-SDAG-NEXT: v_add_f32_e32 v2, v3, v2 4812; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 4813; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4814; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 4815; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 4816; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 4817; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4818; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 4819; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 4820; 4821; VI-GISEL-LABEL: v_log_f32_ninf_dynamic: 4822; VI-GISEL: ; %bb.0: 4823; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4824; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 4825; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 4826; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4827; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4828; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 4829; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 4830; VI-GISEL-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 4831; VI-GISEL-NEXT: v_sub_f32_e32 v2, v0, v1 4832; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v1 4833; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 4834; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 4835; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 4836; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 4837; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 4838; VI-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 4839; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 4840; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 4841; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 4842; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 4843; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4844; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 4845; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 4846; 4847; GFX900-SDAG-LABEL: v_log_f32_ninf_dynamic: 4848; GFX900-SDAG: ; %bb.0: 4849; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4850; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x800000 4851; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 4852; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4853; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4854; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 4855; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 4856; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 4857; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4858; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 4859; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 4860; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, v2 4861; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 4862; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4863; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 4864; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 4865; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 4866; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4867; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 4868; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 4869; 4870; GFX900-GISEL-LABEL: v_log_f32_ninf_dynamic: 4871; GFX900-GISEL: ; %bb.0: 4872; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4873; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 4874; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 4875; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4876; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4877; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 4878; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 4879; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 4880; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 4881; GFX900-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 4882; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 4883; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 4884; GFX900-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 4885; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 4886; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 4887; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 4888; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 4889; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4890; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 4891; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 4892; 4893; GFX1100-SDAG-LABEL: v_log_f32_ninf_dynamic: 4894; GFX1100-SDAG: ; %bb.0: 4895; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4896; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 4897; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo 4898; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 4899; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4900; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 4901; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2) 4902; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 4903; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 4904; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4905; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s0, 0x7f800000, |v0| 4906; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 4907; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 4908; GFX1100-SDAG-NEXT: v_fmamk_f32 v2, v0, 0x3377d1cf, v2 4909; GFX1100-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 4910; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 4911; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s0 4912; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 4913; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 4914; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 4915; 4916; GFX1100-GISEL-LABEL: v_log_f32_ninf_dynamic: 4917; GFX1100-GISEL: ; %bb.0: 4918; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4919; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 4920; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo 4921; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 4922; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4923; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 4924; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2) 4925; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 4926; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 4927; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4928; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s0, 0x7f800000, |v0| 4929; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 4930; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 4931; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 4932; GFX1100-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 4933; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 4934; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s0 4935; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 4936; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 4937; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 4938; 4939; R600-LABEL: v_log_f32_ninf_dynamic: 4940; R600: ; %bb.0: 4941; R600-NEXT: CF_END 4942; R600-NEXT: PAD 4943; 4944; CM-LABEL: v_log_f32_ninf_dynamic: 4945; CM: ; %bb.0: 4946; CM-NEXT: CF_END 4947; CM-NEXT: PAD 4948 %result = call ninf float @llvm.log.f32(float %in) 4949 ret float %result 4950} 4951 4952define float @v_log_f32_nnan_ninf(float %in) { 4953; SI-SDAG-LABEL: v_log_f32_nnan_ninf: 4954; SI-SDAG: ; %bb.0: 4955; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4956; SI-SDAG-NEXT: s_mov_b32 s4, 0x800000 4957; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 4958; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4959; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4960; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v1 4961; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 4962; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 4963; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 4964; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 4965; SI-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 4966; SI-SDAG-NEXT: v_fma_f32 v0, v0, s4, v2 4967; SI-SDAG-NEXT: v_add_f32_e32 v0, v1, v0 4968; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 4969; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4970; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 4971; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 4972; 4973; SI-GISEL-LABEL: v_log_f32_nnan_ninf: 4974; SI-GISEL: ; %bb.0: 4975; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4976; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 4977; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 4978; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4979; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 4980; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v1 4981; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 4982; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 4983; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 4984; SI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 4985; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 4986; SI-GISEL-NEXT: v_fma_f32 v0, v0, v3, v1 4987; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 4988; SI-GISEL-NEXT: v_add_f32_e32 v0, v2, v0 4989; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 4990; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 4991; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 4992; 4993; VI-SDAG-LABEL: v_log_f32_nnan_ninf: 4994; VI-SDAG: ; %bb.0: 4995; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 4996; VI-SDAG-NEXT: s_mov_b32 s4, 0x800000 4997; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 4998; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 4999; VI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5000; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 5001; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 5002; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 5003; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 5004; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3f317000, v0 5005; VI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3805fdf4, v0 5006; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v1 5007; VI-SDAG-NEXT: v_add_f32_e32 v0, v3, v0 5008; VI-SDAG-NEXT: v_add_f32_e32 v0, v2, v0 5009; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 5010; VI-SDAG-NEXT: v_add_f32_e32 v0, v1, v0 5011; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 5012; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5013; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 5014; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 5015; 5016; VI-GISEL-LABEL: v_log_f32_nnan_ninf: 5017; VI-GISEL: ; %bb.0: 5018; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5019; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 5020; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 5021; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 5022; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5023; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 5024; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 5025; VI-GISEL-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 5026; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 5027; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v1 5028; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v0 5029; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 5030; VI-GISEL-NEXT: v_mul_f32_e32 v0, 0x3f317000, v0 5031; VI-GISEL-NEXT: v_add_f32_e32 v0, v0, v2 5032; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 5033; VI-GISEL-NEXT: v_add_f32_e32 v0, v1, v0 5034; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 5035; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5036; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 5037; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 5038; 5039; GFX900-SDAG-LABEL: v_log_f32_nnan_ninf: 5040; GFX900-SDAG: ; %bb.0: 5041; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5042; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x800000 5043; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 5044; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 5045; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5046; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 5047; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 5048; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 5049; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5050; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 5051; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 5052; GFX900-SDAG-NEXT: v_fma_f32 v0, v0, s4, v2 5053; GFX900-SDAG-NEXT: v_add_f32_e32 v0, v1, v0 5054; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 5055; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5056; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 5057; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 5058; 5059; GFX900-GISEL-LABEL: v_log_f32_nnan_ninf: 5060; GFX900-GISEL: ; %bb.0: 5061; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5062; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 5063; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 5064; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 5065; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5066; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 5067; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 5068; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 5069; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 5070; GFX900-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 5071; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 5072; GFX900-GISEL-NEXT: v_fma_f32 v0, v0, v3, v1 5073; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 5074; GFX900-GISEL-NEXT: v_add_f32_e32 v0, v2, v0 5075; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5076; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 5077; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 5078; 5079; GFX1100-SDAG-LABEL: v_log_f32_nnan_ninf: 5080; GFX1100-SDAG: ; %bb.0: 5081; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5082; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 5083; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo 5084; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 5085; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5086; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 5087; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1) 5088; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 5089; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 5090; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5091; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 5092; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 5093; GFX1100-SDAG-NEXT: v_fmamk_f32 v0, v0, 0x3377d1cf, v2 5094; GFX1100-SDAG-NEXT: v_add_f32_e32 v0, v1, v0 5095; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 5096; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) 5097; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 5098; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 5099; 5100; GFX1100-GISEL-LABEL: v_log_f32_nnan_ninf: 5101; GFX1100-GISEL: ; %bb.0: 5102; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5103; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 5104; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo 5105; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 5106; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5107; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 5108; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1) 5109; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 5110; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 5111; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5112; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 5113; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 5114; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 5115; GFX1100-GISEL-NEXT: v_add_f32_e32 v0, v1, v2 5116; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 5117; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) 5118; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 5119; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 5120; 5121; R600-LABEL: v_log_f32_nnan_ninf: 5122; R600: ; %bb.0: 5123; R600-NEXT: CF_END 5124; R600-NEXT: PAD 5125; 5126; CM-LABEL: v_log_f32_nnan_ninf: 5127; CM: ; %bb.0: 5128; CM-NEXT: CF_END 5129; CM-NEXT: PAD 5130 %result = call nnan ninf float @llvm.log.f32(float %in) 5131 ret float %result 5132} 5133 5134define float @v_log_f32_nnan_ninf_daz(float %in) #0 { 5135; SI-SDAG-LABEL: v_log_f32_nnan_ninf_daz: 5136; SI-SDAG: ; %bb.0: 5137; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5138; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 5139; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 5140; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5141; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 5142; SI-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 5143; SI-SDAG-NEXT: v_fma_f32 v0, v0, s4, v2 5144; SI-SDAG-NEXT: v_add_f32_e32 v0, v1, v0 5145; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 5146; 5147; SI-GISEL-LABEL: v_log_f32_nnan_ninf_daz: 5148; SI-GISEL: ; %bb.0: 5149; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5150; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 5151; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 5152; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 5153; SI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 5154; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 5155; SI-GISEL-NEXT: v_fma_f32 v0, v0, v3, v1 5156; SI-GISEL-NEXT: v_add_f32_e32 v0, v2, v0 5157; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 5158; 5159; VI-LABEL: v_log_f32_nnan_ninf_daz: 5160; VI: ; %bb.0: 5161; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5162; VI-NEXT: v_log_f32_e32 v0, v0 5163; VI-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 5164; VI-NEXT: v_sub_f32_e32 v0, v0, v1 5165; VI-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v1 5166; VI-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v0 5167; VI-NEXT: v_mul_f32_e32 v0, 0x3f317000, v0 5168; VI-NEXT: v_add_f32_e32 v2, v2, v3 5169; VI-NEXT: v_add_f32_e32 v0, v0, v2 5170; VI-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 5171; VI-NEXT: v_add_f32_e32 v0, v1, v0 5172; VI-NEXT: s_setpc_b64 s[30:31] 5173; 5174; GFX900-SDAG-LABEL: v_log_f32_nnan_ninf_daz: 5175; GFX900-SDAG: ; %bb.0: 5176; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5177; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 5178; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 5179; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5180; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 5181; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 5182; GFX900-SDAG-NEXT: v_fma_f32 v0, v0, s4, v2 5183; GFX900-SDAG-NEXT: v_add_f32_e32 v0, v1, v0 5184; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 5185; 5186; GFX900-GISEL-LABEL: v_log_f32_nnan_ninf_daz: 5187; GFX900-GISEL: ; %bb.0: 5188; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5189; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 5190; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 5191; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 5192; GFX900-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 5193; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 5194; GFX900-GISEL-NEXT: v_fma_f32 v0, v0, v3, v1 5195; GFX900-GISEL-NEXT: v_add_f32_e32 v0, v2, v0 5196; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 5197; 5198; GFX1100-SDAG-LABEL: v_log_f32_nnan_ninf_daz: 5199; GFX1100-SDAG: ; %bb.0: 5200; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5201; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 5202; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 5203; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5204; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 5205; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 5206; GFX1100-SDAG-NEXT: v_fmamk_f32 v0, v0, 0x3377d1cf, v2 5207; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) 5208; GFX1100-SDAG-NEXT: v_add_f32_e32 v0, v1, v0 5209; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 5210; 5211; GFX1100-GISEL-LABEL: v_log_f32_nnan_ninf_daz: 5212; GFX1100-GISEL: ; %bb.0: 5213; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5214; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 5215; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 5216; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5217; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 5218; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 5219; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 5220; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) 5221; GFX1100-GISEL-NEXT: v_add_f32_e32 v0, v1, v2 5222; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 5223; 5224; R600-LABEL: v_log_f32_nnan_ninf_daz: 5225; R600: ; %bb.0: 5226; R600-NEXT: CF_END 5227; R600-NEXT: PAD 5228; 5229; CM-LABEL: v_log_f32_nnan_ninf_daz: 5230; CM: ; %bb.0: 5231; CM-NEXT: CF_END 5232; CM-NEXT: PAD 5233 %result = call nnan ninf float @llvm.log.f32(float %in) 5234 ret float %result 5235} 5236 5237define float @v_log_f32_nnan_ninf_dynamic(float %in) #1 { 5238; SI-SDAG-LABEL: v_log_f32_nnan_ninf_dynamic: 5239; SI-SDAG: ; %bb.0: 5240; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5241; SI-SDAG-NEXT: s_mov_b32 s4, 0x800000 5242; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 5243; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 5244; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5245; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v1 5246; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 5247; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 5248; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5249; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 5250; SI-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 5251; SI-SDAG-NEXT: v_fma_f32 v0, v0, s4, v2 5252; SI-SDAG-NEXT: v_add_f32_e32 v0, v1, v0 5253; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 5254; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5255; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 5256; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 5257; 5258; SI-GISEL-LABEL: v_log_f32_nnan_ninf_dynamic: 5259; SI-GISEL: ; %bb.0: 5260; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5261; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 5262; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 5263; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 5264; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5265; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v1 5266; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 5267; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 5268; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 5269; SI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 5270; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 5271; SI-GISEL-NEXT: v_fma_f32 v0, v0, v3, v1 5272; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 5273; SI-GISEL-NEXT: v_add_f32_e32 v0, v2, v0 5274; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5275; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 5276; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 5277; 5278; VI-SDAG-LABEL: v_log_f32_nnan_ninf_dynamic: 5279; VI-SDAG: ; %bb.0: 5280; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5281; VI-SDAG-NEXT: s_mov_b32 s4, 0x800000 5282; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 5283; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 5284; VI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5285; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 5286; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 5287; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 5288; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 5289; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3f317000, v0 5290; VI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3805fdf4, v0 5291; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v1 5292; VI-SDAG-NEXT: v_add_f32_e32 v0, v3, v0 5293; VI-SDAG-NEXT: v_add_f32_e32 v0, v2, v0 5294; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 5295; VI-SDAG-NEXT: v_add_f32_e32 v0, v1, v0 5296; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 5297; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5298; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 5299; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 5300; 5301; VI-GISEL-LABEL: v_log_f32_nnan_ninf_dynamic: 5302; VI-GISEL: ; %bb.0: 5303; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5304; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 5305; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 5306; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 5307; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5308; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 5309; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 5310; VI-GISEL-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 5311; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 5312; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v1 5313; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v0 5314; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 5315; VI-GISEL-NEXT: v_mul_f32_e32 v0, 0x3f317000, v0 5316; VI-GISEL-NEXT: v_add_f32_e32 v0, v0, v2 5317; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 5318; VI-GISEL-NEXT: v_add_f32_e32 v0, v1, v0 5319; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 5320; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5321; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 5322; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 5323; 5324; GFX900-SDAG-LABEL: v_log_f32_nnan_ninf_dynamic: 5325; GFX900-SDAG: ; %bb.0: 5326; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5327; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x800000 5328; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 5329; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 5330; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5331; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 5332; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 5333; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 5334; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5335; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 5336; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 5337; GFX900-SDAG-NEXT: v_fma_f32 v0, v0, s4, v2 5338; GFX900-SDAG-NEXT: v_add_f32_e32 v0, v1, v0 5339; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 5340; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5341; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 5342; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 5343; 5344; GFX900-GISEL-LABEL: v_log_f32_nnan_ninf_dynamic: 5345; GFX900-GISEL: ; %bb.0: 5346; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5347; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 5348; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 5349; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 5350; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5351; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 5352; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 5353; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 5354; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 5355; GFX900-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 5356; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 5357; GFX900-GISEL-NEXT: v_fma_f32 v0, v0, v3, v1 5358; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 5359; GFX900-GISEL-NEXT: v_add_f32_e32 v0, v2, v0 5360; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5361; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 5362; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 5363; 5364; GFX1100-SDAG-LABEL: v_log_f32_nnan_ninf_dynamic: 5365; GFX1100-SDAG: ; %bb.0: 5366; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5367; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 5368; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo 5369; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 5370; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5371; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 5372; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1) 5373; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 5374; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 5375; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5376; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 5377; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 5378; GFX1100-SDAG-NEXT: v_fmamk_f32 v0, v0, 0x3377d1cf, v2 5379; GFX1100-SDAG-NEXT: v_add_f32_e32 v0, v1, v0 5380; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 5381; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) 5382; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 5383; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 5384; 5385; GFX1100-GISEL-LABEL: v_log_f32_nnan_ninf_dynamic: 5386; GFX1100-GISEL: ; %bb.0: 5387; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5388; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 5389; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo 5390; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 5391; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5392; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 5393; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1) 5394; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 5395; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 5396; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5397; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 5398; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 5399; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 5400; GFX1100-GISEL-NEXT: v_add_f32_e32 v0, v1, v2 5401; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 5402; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) 5403; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 5404; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 5405; 5406; R600-LABEL: v_log_f32_nnan_ninf_dynamic: 5407; R600: ; %bb.0: 5408; R600-NEXT: CF_END 5409; R600-NEXT: PAD 5410; 5411; CM-LABEL: v_log_f32_nnan_ninf_dynamic: 5412; CM: ; %bb.0: 5413; CM-NEXT: CF_END 5414; CM-NEXT: PAD 5415 %result = call nnan ninf float @llvm.log.f32(float %in) 5416 ret float %result 5417} 5418 5419define float @v_log_f32_fast_daz(float %in) #0 { 5420; GFX689-LABEL: v_log_f32_fast_daz: 5421; GFX689: ; %bb.0: 5422; GFX689-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5423; GFX689-NEXT: v_log_f32_e32 v0, v0 5424; GFX689-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 5425; GFX689-NEXT: s_setpc_b64 s[30:31] 5426; 5427; GFX1100-LABEL: v_log_f32_fast_daz: 5428; GFX1100: ; %bb.0: 5429; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5430; GFX1100-NEXT: v_log_f32_e32 v0, v0 5431; GFX1100-NEXT: s_waitcnt_depctr 0xfff 5432; GFX1100-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 5433; GFX1100-NEXT: s_setpc_b64 s[30:31] 5434; 5435; R600-LABEL: v_log_f32_fast_daz: 5436; R600: ; %bb.0: 5437; R600-NEXT: CF_END 5438; R600-NEXT: PAD 5439; 5440; CM-LABEL: v_log_f32_fast_daz: 5441; CM: ; %bb.0: 5442; CM-NEXT: CF_END 5443; CM-NEXT: PAD 5444 %result = call fast float @llvm.log.f32(float %in) 5445 ret float %result 5446} 5447 5448define float @v_log_f32_dynamic_mode(float %in) #1 { 5449; SI-SDAG-LABEL: v_log_f32_dynamic_mode: 5450; SI-SDAG: ; %bb.0: 5451; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5452; SI-SDAG-NEXT: s_mov_b32 s4, 0x800000 5453; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 5454; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 5455; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5456; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v1 5457; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 5458; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 5459; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5460; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 5461; SI-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 5462; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, v2 5463; SI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 5464; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 5465; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 5466; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 5467; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 5468; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5469; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 5470; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 5471; 5472; SI-GISEL-LABEL: v_log_f32_dynamic_mode: 5473; SI-GISEL: ; %bb.0: 5474; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5475; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 5476; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 5477; SI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 5478; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5479; SI-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v1 5480; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 5481; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 5482; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 5483; SI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 5484; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 5485; SI-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 5486; SI-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 5487; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 5488; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 5489; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 5490; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 5491; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5492; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 5493; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 5494; 5495; VI-SDAG-LABEL: v_log_f32_dynamic_mode: 5496; VI-SDAG: ; %bb.0: 5497; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5498; VI-SDAG-NEXT: s_mov_b32 s4, 0x800000 5499; VI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 5500; VI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 5501; VI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5502; VI-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 5503; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 5504; VI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 5505; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 5506; VI-SDAG-NEXT: v_sub_f32_e32 v2, v0, v1 5507; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317000, v2 5508; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v2 5509; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v1 5510; VI-SDAG-NEXT: v_add_f32_e32 v2, v4, v2 5511; VI-SDAG-NEXT: v_add_f32_e32 v2, v3, v2 5512; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 5513; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 5514; VI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 5515; VI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 5516; VI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 5517; VI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5518; VI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 5519; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 5520; 5521; VI-GISEL-LABEL: v_log_f32_dynamic_mode: 5522; VI-GISEL: ; %bb.0: 5523; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5524; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 5525; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 5526; VI-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 5527; VI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5528; VI-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 5529; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 5530; VI-GISEL-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 5531; VI-GISEL-NEXT: v_sub_f32_e32 v2, v0, v1 5532; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v1 5533; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 5534; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 5535; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 5536; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 5537; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 5538; VI-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 5539; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 5540; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 5541; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 5542; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 5543; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5544; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 5545; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 5546; 5547; GFX900-SDAG-LABEL: v_log_f32_dynamic_mode: 5548; GFX900-SDAG: ; %bb.0: 5549; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5550; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x800000 5551; GFX900-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 5552; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 5553; GFX900-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5554; GFX900-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 5555; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 5556; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 5557; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5558; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 5559; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3377d1cf 5560; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, v2 5561; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 5562; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 5563; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 5564; GFX900-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 5565; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 5566; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5567; GFX900-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 5568; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 5569; 5570; GFX900-GISEL-LABEL: v_log_f32_dynamic_mode: 5571; GFX900-GISEL: ; %bb.0: 5572; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5573; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x800000 5574; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, v0, v1 5575; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 5576; GFX900-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5577; GFX900-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 5578; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 5579; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 5580; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 5581; GFX900-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 5582; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 5583; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 5584; GFX900-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 5585; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 5586; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 5587; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 5588; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 5589; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5590; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 5591; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 5592; 5593; GFX1100-SDAG-LABEL: v_log_f32_dynamic_mode: 5594; GFX1100-SDAG: ; %bb.0: 5595; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5596; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 5597; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo 5598; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 5599; GFX1100-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5600; GFX1100-SDAG-NEXT: v_ldexp_f32 v0, v0, v1 5601; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2) 5602; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 5603; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 5604; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5605; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 s0, 0x7f800000, |v0| 5606; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 5607; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 5608; GFX1100-SDAG-NEXT: v_fmamk_f32 v2, v0, 0x3377d1cf, v2 5609; GFX1100-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 5610; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 5611; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s0 5612; GFX1100-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 5613; GFX1100-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 5614; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 5615; 5616; GFX1100-GISEL-LABEL: v_log_f32_dynamic_mode: 5617; GFX1100-GISEL: ; %bb.0: 5618; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5619; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 5620; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo 5621; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 5622; GFX1100-GISEL-NEXT: v_lshlrev_b32_e32 v1, 5, v1 5623; GFX1100-GISEL-NEXT: v_ldexp_f32 v0, v0, v1 5624; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2) 5625; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 5626; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 5627; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5628; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s0, 0x7f800000, |v0| 5629; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 5630; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 5631; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 5632; GFX1100-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 5633; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 5634; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s0 5635; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 5636; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 5637; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 5638; 5639; R600-LABEL: v_log_f32_dynamic_mode: 5640; R600: ; %bb.0: 5641; R600-NEXT: CF_END 5642; R600-NEXT: PAD 5643; 5644; CM-LABEL: v_log_f32_dynamic_mode: 5645; CM: ; %bb.0: 5646; CM-NEXT: CF_END 5647; CM-NEXT: PAD 5648 %result = call float @llvm.log.f32(float %in) 5649 ret float %result 5650} 5651 5652define float @v_log_f32_undef() { 5653; SI-SDAG-LABEL: v_log_f32_undef: 5654; SI-SDAG: ; %bb.0: 5655; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5656; SI-SDAG-NEXT: v_log_f32_e32 v0, s4 5657; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 5658; SI-SDAG-NEXT: s_mov_b32 s5, 0x3377d1cf 5659; SI-SDAG-NEXT: s_mov_b32 s6, 0x7f800000 5660; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5661; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 5662; SI-SDAG-NEXT: v_fma_f32 v2, v0, s5, v2 5663; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 5664; SI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s6 5665; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 5666; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 5667; 5668; SI-GISEL-LABEL: v_log_f32_undef: 5669; SI-GISEL: ; %bb.0: 5670; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5671; SI-GISEL-NEXT: v_mov_b32_e32 v0, 0x800000 5672; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x4f800000 5673; SI-GISEL-NEXT: v_mul_f32_e32 v1, s4, v1 5674; SI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s4, v0 5675; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 5676; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 5677; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 5678; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 5679; SI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 5680; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 5681; SI-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 5682; SI-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 5683; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 5684; SI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 5685; SI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 5686; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 5687; SI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5688; SI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 5689; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 5690; 5691; VI-SDAG-LABEL: v_log_f32_undef: 5692; VI-SDAG: ; %bb.0: 5693; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5694; VI-SDAG-NEXT: v_log_f32_e32 v0, s4 5695; VI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 5696; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 5697; VI-SDAG-NEXT: v_sub_f32_e32 v3, v0, v1 5698; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v1 5699; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v3 5700; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317000, v3 5701; VI-SDAG-NEXT: v_add_f32_e32 v2, v2, v4 5702; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 5703; VI-SDAG-NEXT: v_add_f32_e32 v2, v3, v2 5704; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 5705; VI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s4 5706; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 5707; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 5708; 5709; VI-GISEL-LABEL: v_log_f32_undef: 5710; VI-GISEL: ; %bb.0: 5711; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5712; VI-GISEL-NEXT: v_mov_b32_e32 v0, 0x800000 5713; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x4f800000 5714; VI-GISEL-NEXT: v_mul_f32_e32 v1, s4, v1 5715; VI-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s4, v0 5716; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 5717; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 5718; VI-GISEL-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 5719; VI-GISEL-NEXT: v_sub_f32_e32 v2, v0, v1 5720; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v1 5721; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 5722; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 5723; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 5724; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 5725; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 5726; VI-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 5727; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 5728; VI-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 5729; VI-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 5730; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 5731; VI-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5732; VI-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 5733; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 5734; 5735; GFX900-SDAG-LABEL: v_log_f32_undef: 5736; GFX900-SDAG: ; %bb.0: 5737; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5738; GFX900-SDAG-NEXT: v_log_f32_e32 v0, s4 5739; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 5740; GFX900-SDAG-NEXT: s_mov_b32 s5, 0x3377d1cf 5741; GFX900-SDAG-NEXT: s_mov_b32 s6, 0x7f800000 5742; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5743; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 5744; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s5, v2 5745; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 5746; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s6 5747; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 5748; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 5749; 5750; GFX900-GISEL-LABEL: v_log_f32_undef: 5751; GFX900-GISEL: ; %bb.0: 5752; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5753; GFX900-GISEL-NEXT: v_mov_b32_e32 v0, 0x800000 5754; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x4f800000 5755; GFX900-GISEL-NEXT: v_mul_f32_e32 v1, s4, v1 5756; GFX900-GISEL-NEXT: v_cmp_lt_f32_e32 vcc, s4, v0 5757; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 5758; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 5759; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 5760; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x3377d1cf 5761; GFX900-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317217, v0 5762; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v2 5763; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v3, v1 5764; GFX900-GISEL-NEXT: v_add_f32_e32 v1, v2, v1 5765; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 5766; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, v2 5767; GFX900-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 5768; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x41b17218 5769; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 5770; GFX900-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 5771; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 5772; 5773; GFX1100-SDAG-LABEL: v_log_f32_undef: 5774; GFX1100-SDAG: ; %bb.0: 5775; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5776; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, s0 5777; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 5778; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5779; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 5780; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 5781; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 5782; GFX1100-SDAG-NEXT: v_fmamk_f32 v2, v0, 0x3377d1cf, v2 5783; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 5784; GFX1100-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 5785; GFX1100-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 5786; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 5787; 5788; GFX1100-GISEL-LABEL: v_log_f32_undef: 5789; GFX1100-GISEL: ; %bb.0: 5790; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5791; GFX1100-GISEL-NEXT: v_mul_f32_e64 v0, 0x4f800000, s0 5792; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x800000, s0 5793; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 5794; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v0, s0, v0, vcc_lo 5795; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 5796; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 5797; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5798; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 s0, 0x7f800000, |v0| 5799; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 5800; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 5801; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 5802; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 5803; GFX1100-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 5804; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v0, v0, v1, s0 5805; GFX1100-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 5806; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) 5807; GFX1100-GISEL-NEXT: v_sub_f32_e32 v0, v0, v1 5808; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 5809; 5810; R600-LABEL: v_log_f32_undef: 5811; R600: ; %bb.0: 5812; R600-NEXT: CF_END 5813; R600-NEXT: PAD 5814; 5815; CM-LABEL: v_log_f32_undef: 5816; CM: ; %bb.0: 5817; CM-NEXT: CF_END 5818; CM-NEXT: PAD 5819 %result = call float @llvm.log.f32(float undef) 5820 ret float %result 5821} 5822 5823define float @v_log_f32_0() { 5824; SI-SDAG-LABEL: v_log_f32_0: 5825; SI-SDAG: ; %bb.0: 5826; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5827; SI-SDAG-NEXT: v_log_f32_e32 v0, 0 5828; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 5829; SI-SDAG-NEXT: s_mov_b32 s5, 0x3377d1cf 5830; SI-SDAG-NEXT: s_mov_b32 s6, 0x7f800000 5831; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5832; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 5833; SI-SDAG-NEXT: v_fma_f32 v2, v0, s5, v2 5834; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 5835; SI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s6 5836; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 5837; SI-SDAG-NEXT: v_add_f32_e32 v0, 0xc1b17218, v0 5838; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 5839; 5840; SI-GISEL-LABEL: v_log_f32_0: 5841; SI-GISEL: ; %bb.0: 5842; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5843; SI-GISEL-NEXT: v_log_f32_e32 v0, 0 5844; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 5845; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x3377d1cf 5846; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x7f800000 5847; SI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3f317217, v0 5848; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v4 5849; SI-GISEL-NEXT: v_fma_f32 v1, v0, v2, v1 5850; SI-GISEL-NEXT: v_add_f32_e32 v1, v4, v1 5851; SI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v3 5852; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 5853; SI-GISEL-NEXT: v_subrev_f32_e32 v0, 0x41b17218, v0 5854; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 5855; 5856; VI-SDAG-LABEL: v_log_f32_0: 5857; VI-SDAG: ; %bb.0: 5858; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5859; VI-SDAG-NEXT: v_log_f32_e32 v0, 0 5860; VI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 5861; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 5862; VI-SDAG-NEXT: v_sub_f32_e32 v3, v0, v1 5863; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v1 5864; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v3 5865; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317000, v3 5866; VI-SDAG-NEXT: v_add_f32_e32 v2, v2, v4 5867; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 5868; VI-SDAG-NEXT: v_add_f32_e32 v2, v3, v2 5869; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 5870; VI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s4 5871; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 5872; VI-SDAG-NEXT: v_add_f32_e32 v0, 0xc1b17218, v0 5873; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 5874; 5875; VI-GISEL-LABEL: v_log_f32_0: 5876; VI-GISEL: ; %bb.0: 5877; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5878; VI-GISEL-NEXT: v_log_f32_e32 v0, 0 5879; VI-GISEL-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 5880; VI-GISEL-NEXT: v_sub_f32_e32 v2, v0, v1 5881; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v1 5882; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 5883; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 5884; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 5885; VI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 5886; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 5887; VI-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 5888; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x7f800000 5889; VI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v2 5890; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 5891; VI-GISEL-NEXT: v_subrev_f32_e32 v0, 0x41b17218, v0 5892; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 5893; 5894; GFX900-SDAG-LABEL: v_log_f32_0: 5895; GFX900-SDAG: ; %bb.0: 5896; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5897; GFX900-SDAG-NEXT: v_log_f32_e32 v0, 0 5898; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 5899; GFX900-SDAG-NEXT: s_mov_b32 s5, 0x3377d1cf 5900; GFX900-SDAG-NEXT: s_mov_b32 s6, 0x7f800000 5901; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5902; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 5903; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s5, v2 5904; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 5905; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s6 5906; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 5907; GFX900-SDAG-NEXT: v_add_f32_e32 v0, 0xc1b17218, v0 5908; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 5909; 5910; GFX900-GISEL-LABEL: v_log_f32_0: 5911; GFX900-GISEL: ; %bb.0: 5912; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5913; GFX900-GISEL-NEXT: v_log_f32_e32 v0, 0 5914; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 5915; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x3377d1cf 5916; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x7f800000 5917; GFX900-GISEL-NEXT: v_mul_f32_e32 v4, 0x3f317217, v0 5918; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v4 5919; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v2, v1 5920; GFX900-GISEL-NEXT: v_add_f32_e32 v1, v4, v1 5921; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v3 5922; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 5923; GFX900-GISEL-NEXT: v_subrev_f32_e32 v0, 0x41b17218, v0 5924; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 5925; 5926; GFX1100-SDAG-LABEL: v_log_f32_0: 5927; GFX1100-SDAG: ; %bb.0: 5928; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5929; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, 0 5930; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 5931; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5932; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 5933; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 5934; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 5935; GFX1100-SDAG-NEXT: v_fmamk_f32 v2, v0, 0x3377d1cf, v2 5936; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 5937; GFX1100-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 5938; GFX1100-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 5939; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) 5940; GFX1100-SDAG-NEXT: v_add_f32_e32 v0, 0xc1b17218, v0 5941; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 5942; 5943; GFX1100-GISEL-LABEL: v_log_f32_0: 5944; GFX1100-GISEL: ; %bb.0: 5945; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5946; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, 0 5947; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 5948; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5949; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 5950; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 5951; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 5952; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 5953; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 5954; GFX1100-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 5955; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 5956; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) 5957; GFX1100-GISEL-NEXT: v_subrev_f32_e32 v0, 0x41b17218, v0 5958; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 5959; 5960; R600-LABEL: v_log_f32_0: 5961; R600: ; %bb.0: 5962; R600-NEXT: CF_END 5963; R600-NEXT: PAD 5964; 5965; CM-LABEL: v_log_f32_0: 5966; CM: ; %bb.0: 5967; CM-NEXT: CF_END 5968; CM-NEXT: PAD 5969 %result = call float @llvm.log.f32(float 0.0) 5970 ret float %result 5971} 5972 5973define float @v_log_f32_from_fpext_f16(i16 %src.i) { 5974; SI-SDAG-LABEL: v_log_f32_from_fpext_f16: 5975; SI-SDAG: ; %bb.0: 5976; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5977; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 5978; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 5979; SI-SDAG-NEXT: s_mov_b32 s5, 0x3377d1cf 5980; SI-SDAG-NEXT: s_mov_b32 s6, 0x7f800000 5981; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 5982; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 5983; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 5984; SI-SDAG-NEXT: v_fma_f32 v2, v0, s5, v2 5985; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 5986; SI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s6 5987; SI-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 5988; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 5989; 5990; SI-GISEL-LABEL: v_log_f32_from_fpext_f16: 5991; SI-GISEL: ; %bb.0: 5992; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 5993; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 5994; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 5995; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x3377d1cf 5996; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x7f800000 5997; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 5998; SI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3f317217, v0 5999; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v4 6000; SI-GISEL-NEXT: v_fma_f32 v1, v0, v2, v1 6001; SI-GISEL-NEXT: v_add_f32_e32 v1, v4, v1 6002; SI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v3 6003; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 6004; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 6005; 6006; VI-SDAG-LABEL: v_log_f32_from_fpext_f16: 6007; VI-SDAG: ; %bb.0: 6008; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6009; VI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6010; VI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 6011; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 6012; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 6013; VI-SDAG-NEXT: v_sub_f32_e32 v3, v0, v1 6014; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v1 6015; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v3 6016; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317000, v3 6017; VI-SDAG-NEXT: v_add_f32_e32 v2, v2, v4 6018; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 6019; VI-SDAG-NEXT: v_add_f32_e32 v2, v3, v2 6020; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 6021; VI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s4 6022; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 6023; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 6024; 6025; VI-GISEL-LABEL: v_log_f32_from_fpext_f16: 6026; VI-GISEL: ; %bb.0: 6027; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6028; VI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 6029; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x7f800000 6030; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 6031; VI-GISEL-NEXT: v_and_b32_e32 v2, 0xfffff000, v0 6032; VI-GISEL-NEXT: v_sub_f32_e32 v3, v0, v2 6033; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 6034; VI-GISEL-NEXT: v_mul_f32_e32 v5, 0x3805fdf4, v3 6035; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3f317000, v3 6036; VI-GISEL-NEXT: v_add_f32_e32 v4, v4, v5 6037; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 6038; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 6039; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 6040; VI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v1 6041; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc 6042; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 6043; 6044; GFX900-SDAG-LABEL: v_log_f32_from_fpext_f16: 6045; GFX900-SDAG: ; %bb.0: 6046; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6047; GFX900-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6048; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 6049; GFX900-SDAG-NEXT: s_mov_b32 s5, 0x3377d1cf 6050; GFX900-SDAG-NEXT: s_mov_b32 s6, 0x7f800000 6051; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 6052; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 6053; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 6054; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s5, v2 6055; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 6056; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s6 6057; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 6058; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 6059; 6060; GFX900-GISEL-LABEL: v_log_f32_from_fpext_f16: 6061; GFX900-GISEL: ; %bb.0: 6062; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6063; GFX900-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 6064; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 6065; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x3377d1cf 6066; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x7f800000 6067; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 6068; GFX900-GISEL-NEXT: v_mul_f32_e32 v4, 0x3f317217, v0 6069; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v4 6070; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v2, v1 6071; GFX900-GISEL-NEXT: v_add_f32_e32 v1, v4, v1 6072; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v3 6073; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 6074; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 6075; 6076; GFX1100-SDAG-LABEL: v_log_f32_from_fpext_f16: 6077; GFX1100-SDAG: ; %bb.0: 6078; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6079; GFX1100-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6080; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2) 6081; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 6082; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 6083; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 6084; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 6085; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 6086; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 6087; GFX1100-SDAG-NEXT: v_fmamk_f32 v2, v0, 0x3377d1cf, v2 6088; GFX1100-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 6089; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) 6090; GFX1100-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 6091; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 6092; 6093; GFX1100-GISEL-LABEL: v_log_f32_from_fpext_f16: 6094; GFX1100-GISEL: ; %bb.0: 6095; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6096; GFX1100-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 6097; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2) 6098; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 6099; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 6100; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 6101; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 6102; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 6103; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 6104; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 6105; GFX1100-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 6106; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) 6107; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 6108; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 6109; 6110; R600-LABEL: v_log_f32_from_fpext_f16: 6111; R600: ; %bb.0: 6112; R600-NEXT: CF_END 6113; R600-NEXT: PAD 6114; 6115; CM-LABEL: v_log_f32_from_fpext_f16: 6116; CM: ; %bb.0: 6117; CM-NEXT: CF_END 6118; CM-NEXT: PAD 6119 %src = bitcast i16 %src.i to half 6120 %fpext = fpext half %src to float 6121 %result = call float @llvm.log.f32(float %fpext) 6122 ret float %result 6123} 6124 6125define float @v_log_f32_from_fpext_math_f16(i16 %src0.i, i16 %src1.i) { 6126; SI-SDAG-LABEL: v_log_f32_from_fpext_math_f16: 6127; SI-SDAG: ; %bb.0: 6128; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6129; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6130; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1 6131; SI-SDAG-NEXT: s_mov_b32 s4, 0x800000 6132; SI-SDAG-NEXT: s_mov_b32 s5, 0x3377d1cf 6133; SI-SDAG-NEXT: v_add_f32_e32 v0, v0, v1 6134; SI-SDAG-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 6135; SI-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 6136; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 5, v1 6137; SI-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v1 6138; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 6139; SI-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 6140; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 6141; SI-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 6142; SI-SDAG-NEXT: v_fma_f32 v2, v0, s5, v2 6143; SI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 6144; SI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 6145; SI-SDAG-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 6146; SI-SDAG-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 6147; SI-SDAG-NEXT: v_mov_b32_e32 v1, 0x41b17218 6148; SI-SDAG-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 6149; SI-SDAG-NEXT: v_sub_f32_e32 v0, v0, v1 6150; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 6151; 6152; SI-GISEL-LABEL: v_log_f32_from_fpext_math_f16: 6153; SI-GISEL: ; %bb.0: 6154; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6155; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 6156; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v1 6157; SI-GISEL-NEXT: v_mov_b32_e32 v2, 0x3377d1cf 6158; SI-GISEL-NEXT: v_mov_b32_e32 v3, 0x7f800000 6159; SI-GISEL-NEXT: v_add_f32_e32 v0, v0, v1 6160; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0 6161; SI-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 6162; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 6163; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 6164; SI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3f317217, v0 6165; SI-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v4 6166; SI-GISEL-NEXT: v_fma_f32 v1, v0, v2, v1 6167; SI-GISEL-NEXT: v_add_f32_e32 v1, v4, v1 6168; SI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v3 6169; SI-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 6170; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 6171; 6172; VI-SDAG-LABEL: v_log_f32_from_fpext_math_f16: 6173; VI-SDAG: ; %bb.0: 6174; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6175; VI-SDAG-NEXT: v_add_f16_e32 v0, v0, v1 6176; VI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6177; VI-SDAG-NEXT: s_mov_b32 s4, 0x7f800000 6178; VI-SDAG-NEXT: v_log_f32_e32 v0, v0 6179; VI-SDAG-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 6180; VI-SDAG-NEXT: v_sub_f32_e32 v2, v0, v1 6181; VI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3805fdf4, v1 6182; VI-SDAG-NEXT: v_mul_f32_e32 v4, 0x3f317000, v2 6183; VI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v2 6184; VI-SDAG-NEXT: v_add_f32_e32 v2, v3, v2 6185; VI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 6186; VI-SDAG-NEXT: v_add_f32_e32 v2, v4, v2 6187; VI-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 6188; VI-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s4 6189; VI-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 6190; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 6191; 6192; VI-GISEL-LABEL: v_log_f32_from_fpext_math_f16: 6193; VI-GISEL: ; %bb.0: 6194; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6195; VI-GISEL-NEXT: v_add_f16_e32 v0, v0, v1 6196; VI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 6197; VI-GISEL-NEXT: v_mov_b32_e32 v1, 0x7f800000 6198; VI-GISEL-NEXT: v_log_f32_e32 v0, v0 6199; VI-GISEL-NEXT: v_and_b32_e32 v2, 0xfffff000, v0 6200; VI-GISEL-NEXT: v_sub_f32_e32 v3, v0, v2 6201; VI-GISEL-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v2 6202; VI-GISEL-NEXT: v_mul_f32_e32 v5, 0x3805fdf4, v3 6203; VI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3f317000, v3 6204; VI-GISEL-NEXT: v_add_f32_e32 v4, v4, v5 6205; VI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317000, v2 6206; VI-GISEL-NEXT: v_add_f32_e32 v3, v3, v4 6207; VI-GISEL-NEXT: v_add_f32_e32 v2, v2, v3 6208; VI-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v1 6209; VI-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc 6210; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 6211; 6212; GFX900-SDAG-LABEL: v_log_f32_from_fpext_math_f16: 6213; GFX900-SDAG: ; %bb.0: 6214; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6215; GFX900-SDAG-NEXT: v_add_f16_e32 v0, v0, v1 6216; GFX900-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6217; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x3f317217 6218; GFX900-SDAG-NEXT: s_mov_b32 s5, 0x3377d1cf 6219; GFX900-SDAG-NEXT: s_mov_b32 s6, 0x7f800000 6220; GFX900-SDAG-NEXT: v_log_f32_e32 v0, v0 6221; GFX900-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 6222; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s4, -v1 6223; GFX900-SDAG-NEXT: v_fma_f32 v2, v0, s5, v2 6224; GFX900-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 6225; GFX900-SDAG-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, s6 6226; GFX900-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 6227; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 6228; 6229; GFX900-GISEL-LABEL: v_log_f32_from_fpext_math_f16: 6230; GFX900-GISEL: ; %bb.0: 6231; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6232; GFX900-GISEL-NEXT: v_add_f16_e32 v0, v0, v1 6233; GFX900-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 6234; GFX900-GISEL-NEXT: v_mov_b32_e32 v1, 0x3f317217 6235; GFX900-GISEL-NEXT: v_mov_b32_e32 v2, 0x3377d1cf 6236; GFX900-GISEL-NEXT: v_mov_b32_e32 v3, 0x7f800000 6237; GFX900-GISEL-NEXT: v_log_f32_e32 v0, v0 6238; GFX900-GISEL-NEXT: v_mul_f32_e32 v4, 0x3f317217, v0 6239; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v1, -v4 6240; GFX900-GISEL-NEXT: v_fma_f32 v1, v0, v2, v1 6241; GFX900-GISEL-NEXT: v_add_f32_e32 v1, v4, v1 6242; GFX900-GISEL-NEXT: v_cmp_lt_f32_e64 vcc, |v0|, v3 6243; GFX900-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 6244; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 6245; 6246; GFX1100-SDAG-LABEL: v_log_f32_from_fpext_math_f16: 6247; GFX1100-SDAG: ; %bb.0: 6248; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6249; GFX1100-SDAG-NEXT: v_add_f16_e32 v0, v0, v1 6250; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 6251; GFX1100-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6252; GFX1100-SDAG-NEXT: v_log_f32_e32 v0, v0 6253; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 6254; GFX1100-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 6255; GFX1100-SDAG-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 6256; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 6257; GFX1100-SDAG-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 6258; GFX1100-SDAG-NEXT: v_fmamk_f32 v2, v0, 0x3377d1cf, v2 6259; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 6260; GFX1100-SDAG-NEXT: v_add_f32_e32 v1, v1, v2 6261; GFX1100-SDAG-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 6262; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 6263; 6264; GFX1100-GISEL-LABEL: v_log_f32_from_fpext_math_f16: 6265; GFX1100-GISEL: ; %bb.0: 6266; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6267; GFX1100-GISEL-NEXT: v_add_f16_e32 v0, v0, v1 6268; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 6269; GFX1100-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 6270; GFX1100-GISEL-NEXT: v_log_f32_e32 v0, v0 6271; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 6272; GFX1100-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 6273; GFX1100-GISEL-NEXT: v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0| 6274; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 6275; GFX1100-GISEL-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 6276; GFX1100-GISEL-NEXT: v_fmac_f32_e32 v2, 0x3377d1cf, v0 6277; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 6278; GFX1100-GISEL-NEXT: v_add_f32_e32 v1, v1, v2 6279; GFX1100-GISEL-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 6280; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 6281; 6282; R600-LABEL: v_log_f32_from_fpext_math_f16: 6283; R600: ; %bb.0: 6284; R600-NEXT: CF_END 6285; R600-NEXT: PAD 6286; 6287; CM-LABEL: v_log_f32_from_fpext_math_f16: 6288; CM: ; %bb.0: 6289; CM-NEXT: CF_END 6290; CM-NEXT: PAD 6291 %src0 = bitcast i16 %src0.i to half 6292 %src1 = bitcast i16 %src1.i to half 6293 %fadd = fadd half %src0, %src1 6294 %fpext = fpext half %fadd to float 6295 %result = call float @llvm.log.f32(float %fpext) 6296 ret float %result 6297} 6298 6299define float @v_log_f32_from_fpext_bf16(bfloat %src) { 6300; SI-LABEL: v_log_f32_from_fpext_bf16: 6301; SI: ; %bb.0: 6302; SI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6303; SI-NEXT: s_mov_b32 s4, 0x800000 6304; SI-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 6305; SI-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 6306; SI-NEXT: v_lshlrev_b32_e32 v1, 5, v1 6307; SI-NEXT: v_ldexp_f32_e32 v0, v0, v1 6308; SI-NEXT: v_log_f32_e32 v0, v0 6309; SI-NEXT: s_mov_b32 s4, 0x3f317217 6310; SI-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 6311; SI-NEXT: v_fma_f32 v2, v0, s4, -v1 6312; SI-NEXT: s_mov_b32 s4, 0x3377d1cf 6313; SI-NEXT: v_fma_f32 v2, v0, s4, v2 6314; SI-NEXT: s_mov_b32 s4, 0x7f800000 6315; SI-NEXT: v_add_f32_e32 v1, v1, v2 6316; SI-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 6317; SI-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 6318; SI-NEXT: v_mov_b32_e32 v1, 0x41b17218 6319; SI-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 6320; SI-NEXT: v_sub_f32_e32 v0, v0, v1 6321; SI-NEXT: s_setpc_b64 s[30:31] 6322; 6323; VI-LABEL: v_log_f32_from_fpext_bf16: 6324; VI: ; %bb.0: 6325; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6326; VI-NEXT: v_lshlrev_b32_e32 v0, 16, v0 6327; VI-NEXT: s_mov_b32 s4, 0x800000 6328; VI-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 6329; VI-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 6330; VI-NEXT: v_lshlrev_b32_e32 v1, 5, v1 6331; VI-NEXT: v_ldexp_f32 v0, v0, v1 6332; VI-NEXT: v_log_f32_e32 v0, v0 6333; VI-NEXT: s_mov_b32 s4, 0x7f800000 6334; VI-NEXT: v_and_b32_e32 v1, 0xfffff000, v0 6335; VI-NEXT: v_sub_f32_e32 v2, v0, v1 6336; VI-NEXT: v_mul_f32_e32 v3, 0x3f317000, v2 6337; VI-NEXT: v_mul_f32_e32 v2, 0x3805fdf4, v2 6338; VI-NEXT: v_mul_f32_e32 v4, 0x3805fdf4, v1 6339; VI-NEXT: v_add_f32_e32 v2, v4, v2 6340; VI-NEXT: v_add_f32_e32 v2, v3, v2 6341; VI-NEXT: v_mul_f32_e32 v1, 0x3f317000, v1 6342; VI-NEXT: v_add_f32_e32 v1, v1, v2 6343; VI-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 6344; VI-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 6345; VI-NEXT: v_mov_b32_e32 v1, 0x41b17218 6346; VI-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 6347; VI-NEXT: v_sub_f32_e32 v0, v0, v1 6348; VI-NEXT: s_setpc_b64 s[30:31] 6349; 6350; GFX900-LABEL: v_log_f32_from_fpext_bf16: 6351; GFX900: ; %bb.0: 6352; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6353; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v0 6354; GFX900-NEXT: s_mov_b32 s4, 0x800000 6355; GFX900-NEXT: v_cmp_gt_f32_e32 vcc, s4, v0 6356; GFX900-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc 6357; GFX900-NEXT: v_lshlrev_b32_e32 v1, 5, v1 6358; GFX900-NEXT: v_ldexp_f32 v0, v0, v1 6359; GFX900-NEXT: v_log_f32_e32 v0, v0 6360; GFX900-NEXT: s_mov_b32 s4, 0x3f317217 6361; GFX900-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 6362; GFX900-NEXT: v_fma_f32 v2, v0, s4, -v1 6363; GFX900-NEXT: s_mov_b32 s4, 0x3377d1cf 6364; GFX900-NEXT: v_fma_f32 v2, v0, s4, v2 6365; GFX900-NEXT: s_mov_b32 s4, 0x7f800000 6366; GFX900-NEXT: v_add_f32_e32 v1, v1, v2 6367; GFX900-NEXT: v_cmp_lt_f32_e64 s[4:5], |v0|, s4 6368; GFX900-NEXT: v_cndmask_b32_e64 v0, v0, v1, s[4:5] 6369; GFX900-NEXT: v_mov_b32_e32 v1, 0x41b17218 6370; GFX900-NEXT: v_cndmask_b32_e32 v1, 0, v1, vcc 6371; GFX900-NEXT: v_sub_f32_e32 v0, v0, v1 6372; GFX900-NEXT: s_setpc_b64 s[30:31] 6373; 6374; GFX1100-LABEL: v_log_f32_from_fpext_bf16: 6375; GFX1100: ; %bb.0: 6376; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6377; GFX1100-NEXT: v_lshlrev_b32_e32 v0, 16, v0 6378; GFX1100-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 6379; GFX1100-NEXT: v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0 6380; GFX1100-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo 6381; GFX1100-NEXT: v_lshlrev_b32_e32 v1, 5, v1 6382; GFX1100-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 6383; GFX1100-NEXT: v_ldexp_f32 v0, v0, v1 6384; GFX1100-NEXT: v_log_f32_e32 v0, v0 6385; GFX1100-NEXT: s_waitcnt_depctr 0xfff 6386; GFX1100-NEXT: v_mul_f32_e32 v1, 0x3f317217, v0 6387; GFX1100-NEXT: v_cmp_gt_f32_e64 s0, 0x7f800000, |v0| 6388; GFX1100-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 6389; GFX1100-NEXT: v_fma_f32 v2, 0x3f317217, v0, -v1 6390; GFX1100-NEXT: v_fmamk_f32 v2, v0, 0x3377d1cf, v2 6391; GFX1100-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 6392; GFX1100-NEXT: v_add_f32_e32 v1, v1, v2 6393; GFX1100-NEXT: v_cndmask_b32_e64 v0, v0, v1, s0 6394; GFX1100-NEXT: v_cndmask_b32_e64 v1, 0, 0x41b17218, vcc_lo 6395; GFX1100-NEXT: s_delay_alu instid0(VALU_DEP_1) 6396; GFX1100-NEXT: v_sub_f32_e32 v0, v0, v1 6397; GFX1100-NEXT: s_setpc_b64 s[30:31] 6398; 6399; R600-LABEL: v_log_f32_from_fpext_bf16: 6400; R600: ; %bb.0: 6401; R600-NEXT: CF_END 6402; R600-NEXT: PAD 6403; 6404; CM-LABEL: v_log_f32_from_fpext_bf16: 6405; CM: ; %bb.0: 6406; CM-NEXT: CF_END 6407; CM-NEXT: PAD 6408 %fpext = fpext bfloat %src to float 6409 %result = call float @llvm.log.f32(float %fpext) 6410 ret float %result 6411} 6412 6413define half @v_log_f16(half %in) { 6414; SI-SDAG-LABEL: v_log_f16: 6415; SI-SDAG: ; %bb.0: 6416; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6417; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 6418; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6419; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 6420; SI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 6421; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 6422; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6423; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 6424; 6425; SI-GISEL-LABEL: v_log_f16: 6426; SI-GISEL: ; %bb.0: 6427; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6428; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 6429; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 6430; SI-GISEL-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 6431; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0 6432; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 6433; 6434; VI-LABEL: v_log_f16: 6435; VI: ; %bb.0: 6436; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6437; VI-NEXT: v_log_f16_e32 v0, v0 6438; VI-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6439; VI-NEXT: s_setpc_b64 s[30:31] 6440; 6441; GFX900-LABEL: v_log_f16: 6442; GFX900: ; %bb.0: 6443; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6444; GFX900-NEXT: v_log_f16_e32 v0, v0 6445; GFX900-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6446; GFX900-NEXT: s_setpc_b64 s[30:31] 6447; 6448; GFX1100-LABEL: v_log_f16: 6449; GFX1100: ; %bb.0: 6450; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6451; GFX1100-NEXT: v_log_f16_e32 v0, v0 6452; GFX1100-NEXT: s_waitcnt_depctr 0xfff 6453; GFX1100-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6454; GFX1100-NEXT: s_setpc_b64 s[30:31] 6455; 6456; R600-LABEL: v_log_f16: 6457; R600: ; %bb.0: 6458; R600-NEXT: CF_END 6459; R600-NEXT: PAD 6460; 6461; CM-LABEL: v_log_f16: 6462; CM: ; %bb.0: 6463; CM-NEXT: CF_END 6464; CM-NEXT: PAD 6465 %result = call half @llvm.log.f16(half %in) 6466 ret half %result 6467} 6468 6469define half @v_log_fabs_f16(half %in) { 6470; SI-SDAG-LABEL: v_log_fabs_f16: 6471; SI-SDAG: ; %bb.0: 6472; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6473; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 6474; SI-SDAG-NEXT: v_cvt_f32_f16_e64 v0, |v0| 6475; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 6476; SI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 6477; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 6478; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6479; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 6480; 6481; SI-GISEL-LABEL: v_log_fabs_f16: 6482; SI-GISEL: ; %bb.0: 6483; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6484; SI-GISEL-NEXT: v_cvt_f32_f16_e64 v0, |v0| 6485; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 6486; SI-GISEL-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 6487; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0 6488; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 6489; 6490; VI-LABEL: v_log_fabs_f16: 6491; VI: ; %bb.0: 6492; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6493; VI-NEXT: v_log_f16_e64 v0, |v0| 6494; VI-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6495; VI-NEXT: s_setpc_b64 s[30:31] 6496; 6497; GFX900-LABEL: v_log_fabs_f16: 6498; GFX900: ; %bb.0: 6499; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6500; GFX900-NEXT: v_log_f16_e64 v0, |v0| 6501; GFX900-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6502; GFX900-NEXT: s_setpc_b64 s[30:31] 6503; 6504; GFX1100-LABEL: v_log_fabs_f16: 6505; GFX1100: ; %bb.0: 6506; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6507; GFX1100-NEXT: v_log_f16_e64 v0, |v0| 6508; GFX1100-NEXT: s_waitcnt_depctr 0xfff 6509; GFX1100-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6510; GFX1100-NEXT: s_setpc_b64 s[30:31] 6511; 6512; R600-LABEL: v_log_fabs_f16: 6513; R600: ; %bb.0: 6514; R600-NEXT: CF_END 6515; R600-NEXT: PAD 6516; 6517; CM-LABEL: v_log_fabs_f16: 6518; CM: ; %bb.0: 6519; CM-NEXT: CF_END 6520; CM-NEXT: PAD 6521 %fabs = call half @llvm.fabs.f16(half %in) 6522 %result = call half @llvm.log.f16(half %fabs) 6523 ret half %result 6524} 6525 6526define half @v_log_fneg_fabs_f16(half %in) { 6527; SI-SDAG-LABEL: v_log_fneg_fabs_f16: 6528; SI-SDAG: ; %bb.0: 6529; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6530; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 6531; SI-SDAG-NEXT: v_cvt_f32_f16_e64 v0, -|v0| 6532; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 6533; SI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 6534; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 6535; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6536; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 6537; 6538; SI-GISEL-LABEL: v_log_fneg_fabs_f16: 6539; SI-GISEL: ; %bb.0: 6540; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6541; SI-GISEL-NEXT: v_cvt_f32_f16_e64 v0, -|v0| 6542; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 6543; SI-GISEL-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 6544; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0 6545; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 6546; 6547; VI-LABEL: v_log_fneg_fabs_f16: 6548; VI: ; %bb.0: 6549; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6550; VI-NEXT: v_log_f16_e64 v0, -|v0| 6551; VI-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6552; VI-NEXT: s_setpc_b64 s[30:31] 6553; 6554; GFX900-LABEL: v_log_fneg_fabs_f16: 6555; GFX900: ; %bb.0: 6556; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6557; GFX900-NEXT: v_log_f16_e64 v0, -|v0| 6558; GFX900-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6559; GFX900-NEXT: s_setpc_b64 s[30:31] 6560; 6561; GFX1100-LABEL: v_log_fneg_fabs_f16: 6562; GFX1100: ; %bb.0: 6563; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6564; GFX1100-NEXT: v_log_f16_e64 v0, -|v0| 6565; GFX1100-NEXT: s_waitcnt_depctr 0xfff 6566; GFX1100-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6567; GFX1100-NEXT: s_setpc_b64 s[30:31] 6568; 6569; R600-LABEL: v_log_fneg_fabs_f16: 6570; R600: ; %bb.0: 6571; R600-NEXT: CF_END 6572; R600-NEXT: PAD 6573; 6574; CM-LABEL: v_log_fneg_fabs_f16: 6575; CM: ; %bb.0: 6576; CM-NEXT: CF_END 6577; CM-NEXT: PAD 6578 %fabs = call half @llvm.fabs.f16(half %in) 6579 %fneg.fabs = fneg half %fabs 6580 %result = call half @llvm.log.f16(half %fneg.fabs) 6581 ret half %result 6582} 6583 6584define half @v_log_fneg_f16(half %in) { 6585; SI-SDAG-LABEL: v_log_fneg_f16: 6586; SI-SDAG: ; %bb.0: 6587; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6588; SI-SDAG-NEXT: v_cvt_f16_f32_e64 v0, -v0 6589; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6590; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 6591; SI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 6592; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 6593; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6594; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 6595; 6596; SI-GISEL-LABEL: v_log_fneg_f16: 6597; SI-GISEL: ; %bb.0: 6598; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6599; SI-GISEL-NEXT: v_cvt_f32_f16_e64 v0, -v0 6600; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 6601; SI-GISEL-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 6602; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0 6603; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 6604; 6605; VI-LABEL: v_log_fneg_f16: 6606; VI: ; %bb.0: 6607; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6608; VI-NEXT: v_log_f16_e64 v0, -v0 6609; VI-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6610; VI-NEXT: s_setpc_b64 s[30:31] 6611; 6612; GFX900-LABEL: v_log_fneg_f16: 6613; GFX900: ; %bb.0: 6614; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6615; GFX900-NEXT: v_log_f16_e64 v0, -v0 6616; GFX900-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6617; GFX900-NEXT: s_setpc_b64 s[30:31] 6618; 6619; GFX1100-LABEL: v_log_fneg_f16: 6620; GFX1100: ; %bb.0: 6621; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6622; GFX1100-NEXT: v_log_f16_e64 v0, -v0 6623; GFX1100-NEXT: s_waitcnt_depctr 0xfff 6624; GFX1100-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6625; GFX1100-NEXT: s_setpc_b64 s[30:31] 6626; 6627; R600-LABEL: v_log_fneg_f16: 6628; R600: ; %bb.0: 6629; R600-NEXT: CF_END 6630; R600-NEXT: PAD 6631; 6632; CM-LABEL: v_log_fneg_f16: 6633; CM: ; %bb.0: 6634; CM-NEXT: CF_END 6635; CM-NEXT: PAD 6636 %fneg = fneg half %in 6637 %result = call half @llvm.log.f16(half %fneg) 6638 ret half %result 6639} 6640 6641define half @v_log_f16_fast(half %in) { 6642; SI-SDAG-LABEL: v_log_f16_fast: 6643; SI-SDAG: ; %bb.0: 6644; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6645; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 6646; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6647; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 6648; SI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 6649; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 6650; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6651; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 6652; 6653; SI-GISEL-LABEL: v_log_f16_fast: 6654; SI-GISEL: ; %bb.0: 6655; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6656; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 6657; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 6658; SI-GISEL-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 6659; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0 6660; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 6661; 6662; VI-LABEL: v_log_f16_fast: 6663; VI: ; %bb.0: 6664; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6665; VI-NEXT: v_log_f16_e32 v0, v0 6666; VI-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6667; VI-NEXT: s_setpc_b64 s[30:31] 6668; 6669; GFX900-LABEL: v_log_f16_fast: 6670; GFX900: ; %bb.0: 6671; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6672; GFX900-NEXT: v_log_f16_e32 v0, v0 6673; GFX900-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6674; GFX900-NEXT: s_setpc_b64 s[30:31] 6675; 6676; GFX1100-LABEL: v_log_f16_fast: 6677; GFX1100: ; %bb.0: 6678; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6679; GFX1100-NEXT: v_log_f16_e32 v0, v0 6680; GFX1100-NEXT: s_waitcnt_depctr 0xfff 6681; GFX1100-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6682; GFX1100-NEXT: s_setpc_b64 s[30:31] 6683; 6684; R600-LABEL: v_log_f16_fast: 6685; R600: ; %bb.0: 6686; R600-NEXT: CF_END 6687; R600-NEXT: PAD 6688; 6689; CM-LABEL: v_log_f16_fast: 6690; CM: ; %bb.0: 6691; CM-NEXT: CF_END 6692; CM-NEXT: PAD 6693 %result = call fast half @llvm.log.f16(half %in) 6694 ret half %result 6695} 6696 6697define <2 x half> @v_log_v2f16(<2 x half> %in) { 6698; SI-SDAG-LABEL: v_log_v2f16: 6699; SI-SDAG: ; %bb.0: 6700; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6701; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 6702; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1 6703; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6704; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1 6705; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 6706; SI-SDAG-NEXT: v_log_f32_e32 v1, v1 6707; SI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 6708; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317218, v1 6709; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 6710; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1 6711; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6712; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1 6713; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 6714; 6715; SI-GISEL-LABEL: v_log_v2f16: 6716; SI-GISEL: ; %bb.0: 6717; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6718; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 6719; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v1 6720; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 6721; SI-GISEL-NEXT: v_log_f32_e32 v1, v1 6722; SI-GISEL-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 6723; SI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317218, v1 6724; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0 6725; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v1 6726; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 6727; 6728; VI-SDAG-LABEL: v_log_v2f16: 6729; VI-SDAG: ; %bb.0: 6730; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6731; VI-SDAG-NEXT: v_log_f16_sdwa v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 6732; VI-SDAG-NEXT: v_log_f16_e32 v0, v0 6733; VI-SDAG-NEXT: v_mov_b32_e32 v2, 0x398c 6734; VI-SDAG-NEXT: v_mul_f16_sdwa v1, v1, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 6735; VI-SDAG-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6736; VI-SDAG-NEXT: v_or_b32_e32 v0, v0, v1 6737; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 6738; 6739; VI-GISEL-LABEL: v_log_v2f16: 6740; VI-GISEL: ; %bb.0: 6741; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6742; VI-GISEL-NEXT: v_log_f16_e32 v1, v0 6743; VI-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 6744; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x398c 6745; VI-GISEL-NEXT: v_mul_f16_e32 v1, 0x398c, v1 6746; VI-GISEL-NEXT: v_mul_f16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 6747; VI-GISEL-NEXT: v_or_b32_e32 v0, v1, v0 6748; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 6749; 6750; GFX900-LABEL: v_log_v2f16: 6751; GFX900: ; %bb.0: 6752; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6753; GFX900-NEXT: v_log_f16_e32 v1, v0 6754; GFX900-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 6755; GFX900-NEXT: v_mul_f16_e32 v1, 0x398c, v1 6756; GFX900-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6757; GFX900-NEXT: v_pack_b32_f16 v0, v1, v0 6758; GFX900-NEXT: s_setpc_b64 s[30:31] 6759; 6760; GFX1100-LABEL: v_log_v2f16: 6761; GFX1100: ; %bb.0: 6762; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6763; GFX1100-NEXT: v_lshrrev_b32_e32 v1, 16, v0 6764; GFX1100-NEXT: v_log_f16_e32 v0, v0 6765; GFX1100-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_1) 6766; GFX1100-NEXT: v_log_f16_e32 v1, v1 6767; GFX1100-NEXT: s_waitcnt_depctr 0xfff 6768; GFX1100-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6769; GFX1100-NEXT: v_mul_f16_e32 v1, 0x398c, v1 6770; GFX1100-NEXT: v_pack_b32_f16 v0, v0, v1 6771; GFX1100-NEXT: s_setpc_b64 s[30:31] 6772; 6773; R600-LABEL: v_log_v2f16: 6774; R600: ; %bb.0: 6775; R600-NEXT: CF_END 6776; R600-NEXT: PAD 6777; 6778; CM-LABEL: v_log_v2f16: 6779; CM: ; %bb.0: 6780; CM-NEXT: CF_END 6781; CM-NEXT: PAD 6782 %result = call <2 x half> @llvm.log.v2f16(<2 x half> %in) 6783 ret <2 x half> %result 6784} 6785 6786define <2 x half> @v_log_fabs_v2f16(<2 x half> %in) { 6787; SI-SDAG-LABEL: v_log_fabs_v2f16: 6788; SI-SDAG: ; %bb.0: 6789; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6790; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 6791; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1 6792; SI-SDAG-NEXT: v_cvt_f32_f16_e64 v0, |v0| 6793; SI-SDAG-NEXT: v_cvt_f32_f16_e64 v1, |v1| 6794; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 6795; SI-SDAG-NEXT: v_log_f32_e32 v1, v1 6796; SI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 6797; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317218, v1 6798; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 6799; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1 6800; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6801; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1 6802; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 6803; 6804; SI-GISEL-LABEL: v_log_fabs_v2f16: 6805; SI-GISEL: ; %bb.0: 6806; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6807; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v1 6808; SI-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0 6809; SI-GISEL-NEXT: v_or_b32_e32 v0, v1, v0 6810; SI-GISEL-NEXT: v_and_b32_e32 v0, 0x7fff7fff, v0 6811; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v0 6812; SI-GISEL-NEXT: v_lshrrev_b32_e32 v0, 16, v0 6813; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 6814; SI-GISEL-NEXT: v_log_f32_e32 v1, v1 6815; SI-GISEL-NEXT: v_log_f32_e32 v2, v0 6816; SI-GISEL-NEXT: v_mul_f32_e32 v0, 0x3f317218, v1 6817; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0 6818; SI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317218, v2 6819; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v1 6820; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 6821; 6822; VI-SDAG-LABEL: v_log_fabs_v2f16: 6823; VI-SDAG: ; %bb.0: 6824; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6825; VI-SDAG-NEXT: v_log_f16_sdwa v1, |v0| dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 6826; VI-SDAG-NEXT: v_log_f16_e64 v0, |v0| 6827; VI-SDAG-NEXT: v_mov_b32_e32 v2, 0x398c 6828; VI-SDAG-NEXT: v_mul_f16_sdwa v1, v1, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 6829; VI-SDAG-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6830; VI-SDAG-NEXT: v_or_b32_e32 v0, v0, v1 6831; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 6832; 6833; VI-GISEL-LABEL: v_log_fabs_v2f16: 6834; VI-GISEL: ; %bb.0: 6835; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6836; VI-GISEL-NEXT: v_and_b32_e32 v0, 0x7fff7fff, v0 6837; VI-GISEL-NEXT: v_log_f16_e32 v1, v0 6838; VI-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 6839; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x398c 6840; VI-GISEL-NEXT: v_mul_f16_e32 v1, 0x398c, v1 6841; VI-GISEL-NEXT: v_mul_f16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 6842; VI-GISEL-NEXT: v_or_b32_e32 v0, v1, v0 6843; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 6844; 6845; GFX900-SDAG-LABEL: v_log_fabs_v2f16: 6846; GFX900-SDAG: ; %bb.0: 6847; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6848; GFX900-SDAG-NEXT: v_log_f16_e64 v1, |v0| 6849; GFX900-SDAG-NEXT: v_log_f16_sdwa v0, |v0| dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 6850; GFX900-SDAG-NEXT: v_mul_f16_e32 v1, 0x398c, v1 6851; GFX900-SDAG-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6852; GFX900-SDAG-NEXT: v_pack_b32_f16 v0, v1, v0 6853; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 6854; 6855; GFX900-GISEL-LABEL: v_log_fabs_v2f16: 6856; GFX900-GISEL: ; %bb.0: 6857; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6858; GFX900-GISEL-NEXT: v_and_b32_e32 v0, 0x7fff7fff, v0 6859; GFX900-GISEL-NEXT: v_log_f16_e32 v1, v0 6860; GFX900-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 6861; GFX900-GISEL-NEXT: v_mul_f16_e32 v1, 0x398c, v1 6862; GFX900-GISEL-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6863; GFX900-GISEL-NEXT: v_pack_b32_f16 v0, v1, v0 6864; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 6865; 6866; GFX1100-SDAG-LABEL: v_log_fabs_v2f16: 6867; GFX1100-SDAG: ; %bb.0: 6868; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6869; GFX1100-SDAG-NEXT: v_lshrrev_b32_e32 v1, 16, v0 6870; GFX1100-SDAG-NEXT: v_log_f16_e64 v0, |v0| 6871; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_1) 6872; GFX1100-SDAG-NEXT: v_log_f16_e64 v1, |v1| 6873; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 6874; GFX1100-SDAG-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6875; GFX1100-SDAG-NEXT: v_mul_f16_e32 v1, 0x398c, v1 6876; GFX1100-SDAG-NEXT: v_pack_b32_f16 v0, v0, v1 6877; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 6878; 6879; GFX1100-GISEL-LABEL: v_log_fabs_v2f16: 6880; GFX1100-GISEL: ; %bb.0: 6881; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6882; GFX1100-GISEL-NEXT: v_and_b32_e32 v0, 0x7fff7fff, v0 6883; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 6884; GFX1100-GISEL-NEXT: v_lshrrev_b32_e32 v1, 16, v0 6885; GFX1100-GISEL-NEXT: v_log_f16_e32 v0, v0 6886; GFX1100-GISEL-NEXT: v_log_f16_e32 v1, v1 6887; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 6888; GFX1100-GISEL-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6889; GFX1100-GISEL-NEXT: v_mul_f16_e32 v1, 0x398c, v1 6890; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) 6891; GFX1100-GISEL-NEXT: v_pack_b32_f16 v0, v0, v1 6892; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 6893; 6894; R600-LABEL: v_log_fabs_v2f16: 6895; R600: ; %bb.0: 6896; R600-NEXT: CF_END 6897; R600-NEXT: PAD 6898; 6899; CM-LABEL: v_log_fabs_v2f16: 6900; CM: ; %bb.0: 6901; CM-NEXT: CF_END 6902; CM-NEXT: PAD 6903 %fabs = call <2 x half> @llvm.fabs.v2f16(<2 x half> %in) 6904 %result = call <2 x half> @llvm.log.v2f16(<2 x half> %fabs) 6905 ret <2 x half> %result 6906} 6907 6908define <2 x half> @v_log_fneg_fabs_v2f16(<2 x half> %in) { 6909; SI-SDAG-LABEL: v_log_fneg_fabs_v2f16: 6910; SI-SDAG: ; %bb.0: 6911; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6912; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1 6913; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 6914; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 16, v1 6915; SI-SDAG-NEXT: v_or_b32_e32 v0, v0, v1 6916; SI-SDAG-NEXT: v_or_b32_e32 v0, 0x80008000, v0 6917; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v0 6918; SI-SDAG-NEXT: v_lshrrev_b32_e32 v0, 16, v0 6919; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 6920; SI-SDAG-NEXT: v_log_f32_e32 v1, v1 6921; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 6922; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317218, v1 6923; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1 6924; SI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 6925; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v0 6926; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v1 6927; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v2 6928; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 6929; 6930; SI-GISEL-LABEL: v_log_fneg_fabs_v2f16: 6931; SI-GISEL: ; %bb.0: 6932; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6933; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v1 6934; SI-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0 6935; SI-GISEL-NEXT: v_or_b32_e32 v0, v1, v0 6936; SI-GISEL-NEXT: v_or_b32_e32 v0, 0x80008000, v0 6937; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v0 6938; SI-GISEL-NEXT: v_lshrrev_b32_e32 v0, 16, v0 6939; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 6940; SI-GISEL-NEXT: v_log_f32_e32 v1, v1 6941; SI-GISEL-NEXT: v_log_f32_e32 v2, v0 6942; SI-GISEL-NEXT: v_mul_f32_e32 v0, 0x3f317218, v1 6943; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0 6944; SI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317218, v2 6945; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v1 6946; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 6947; 6948; VI-SDAG-LABEL: v_log_fneg_fabs_v2f16: 6949; VI-SDAG: ; %bb.0: 6950; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6951; VI-SDAG-NEXT: v_log_f16_sdwa v1, -|v0| dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 6952; VI-SDAG-NEXT: v_log_f16_e64 v0, -|v0| 6953; VI-SDAG-NEXT: v_mov_b32_e32 v2, 0x398c 6954; VI-SDAG-NEXT: v_mul_f16_sdwa v1, v1, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 6955; VI-SDAG-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6956; VI-SDAG-NEXT: v_or_b32_e32 v0, v0, v1 6957; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 6958; 6959; VI-GISEL-LABEL: v_log_fneg_fabs_v2f16: 6960; VI-GISEL: ; %bb.0: 6961; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6962; VI-GISEL-NEXT: v_or_b32_e32 v0, 0x80008000, v0 6963; VI-GISEL-NEXT: v_log_f16_e32 v1, v0 6964; VI-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 6965; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x398c 6966; VI-GISEL-NEXT: v_mul_f16_e32 v1, 0x398c, v1 6967; VI-GISEL-NEXT: v_mul_f16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 6968; VI-GISEL-NEXT: v_or_b32_e32 v0, v1, v0 6969; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 6970; 6971; GFX900-SDAG-LABEL: v_log_fneg_fabs_v2f16: 6972; GFX900-SDAG: ; %bb.0: 6973; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6974; GFX900-SDAG-NEXT: v_log_f16_e64 v1, -|v0| 6975; GFX900-SDAG-NEXT: v_log_f16_sdwa v0, -|v0| dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 6976; GFX900-SDAG-NEXT: v_mul_f16_e32 v1, 0x398c, v1 6977; GFX900-SDAG-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6978; GFX900-SDAG-NEXT: v_pack_b32_f16 v0, v1, v0 6979; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 6980; 6981; GFX900-GISEL-LABEL: v_log_fneg_fabs_v2f16: 6982; GFX900-GISEL: ; %bb.0: 6983; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6984; GFX900-GISEL-NEXT: v_or_b32_e32 v0, 0x80008000, v0 6985; GFX900-GISEL-NEXT: v_log_f16_e32 v1, v0 6986; GFX900-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 6987; GFX900-GISEL-NEXT: v_mul_f16_e32 v1, 0x398c, v1 6988; GFX900-GISEL-NEXT: v_mul_f16_e32 v0, 0x398c, v0 6989; GFX900-GISEL-NEXT: v_pack_b32_f16 v0, v1, v0 6990; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 6991; 6992; GFX1100-SDAG-LABEL: v_log_fneg_fabs_v2f16: 6993; GFX1100-SDAG: ; %bb.0: 6994; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 6995; GFX1100-SDAG-NEXT: v_lshrrev_b32_e32 v1, 16, v0 6996; GFX1100-SDAG-NEXT: v_log_f16_e64 v0, -|v0| 6997; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_1) 6998; GFX1100-SDAG-NEXT: v_log_f16_e64 v1, -|v1| 6999; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 7000; GFX1100-SDAG-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7001; GFX1100-SDAG-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7002; GFX1100-SDAG-NEXT: v_pack_b32_f16 v0, v0, v1 7003; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 7004; 7005; GFX1100-GISEL-LABEL: v_log_fneg_fabs_v2f16: 7006; GFX1100-GISEL: ; %bb.0: 7007; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7008; GFX1100-GISEL-NEXT: v_or_b32_e32 v0, 0x80008000, v0 7009; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 7010; GFX1100-GISEL-NEXT: v_lshrrev_b32_e32 v1, 16, v0 7011; GFX1100-GISEL-NEXT: v_log_f16_e32 v0, v0 7012; GFX1100-GISEL-NEXT: v_log_f16_e32 v1, v1 7013; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 7014; GFX1100-GISEL-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7015; GFX1100-GISEL-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7016; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) 7017; GFX1100-GISEL-NEXT: v_pack_b32_f16 v0, v0, v1 7018; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 7019; 7020; R600-LABEL: v_log_fneg_fabs_v2f16: 7021; R600: ; %bb.0: 7022; R600-NEXT: CF_END 7023; R600-NEXT: PAD 7024; 7025; CM-LABEL: v_log_fneg_fabs_v2f16: 7026; CM: ; %bb.0: 7027; CM-NEXT: CF_END 7028; CM-NEXT: PAD 7029 %fabs = call <2 x half> @llvm.fabs.v2f16(<2 x half> %in) 7030 %fneg.fabs = fneg <2 x half> %fabs 7031 %result = call <2 x half> @llvm.log.v2f16(<2 x half> %fneg.fabs) 7032 ret <2 x half> %result 7033} 7034 7035define <2 x half> @v_log_fneg_v2f16(<2 x half> %in) { 7036; SI-SDAG-LABEL: v_log_fneg_v2f16: 7037; SI-SDAG: ; %bb.0: 7038; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7039; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1 7040; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 7041; SI-SDAG-NEXT: v_lshlrev_b32_e32 v1, 16, v1 7042; SI-SDAG-NEXT: v_or_b32_e32 v0, v0, v1 7043; SI-SDAG-NEXT: v_xor_b32_e32 v0, 0x80008000, v0 7044; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v0 7045; SI-SDAG-NEXT: v_lshrrev_b32_e32 v0, 16, v0 7046; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 7047; SI-SDAG-NEXT: v_log_f32_e32 v1, v1 7048; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 7049; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317218, v1 7050; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1 7051; SI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 7052; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v0 7053; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v1 7054; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v2 7055; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 7056; 7057; SI-GISEL-LABEL: v_log_fneg_v2f16: 7058; SI-GISEL: ; %bb.0: 7059; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7060; SI-GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v1 7061; SI-GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0 7062; SI-GISEL-NEXT: v_or_b32_e32 v0, v1, v0 7063; SI-GISEL-NEXT: v_xor_b32_e32 v0, 0x80008000, v0 7064; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v0 7065; SI-GISEL-NEXT: v_lshrrev_b32_e32 v0, 16, v0 7066; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 7067; SI-GISEL-NEXT: v_log_f32_e32 v1, v1 7068; SI-GISEL-NEXT: v_log_f32_e32 v2, v0 7069; SI-GISEL-NEXT: v_mul_f32_e32 v0, 0x3f317218, v1 7070; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0 7071; SI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317218, v2 7072; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v1 7073; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 7074; 7075; VI-SDAG-LABEL: v_log_fneg_v2f16: 7076; VI-SDAG: ; %bb.0: 7077; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7078; VI-SDAG-NEXT: v_log_f16_sdwa v1, -v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7079; VI-SDAG-NEXT: v_log_f16_e64 v0, -v0 7080; VI-SDAG-NEXT: v_mov_b32_e32 v2, 0x398c 7081; VI-SDAG-NEXT: v_mul_f16_sdwa v1, v1, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 7082; VI-SDAG-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7083; VI-SDAG-NEXT: v_or_b32_e32 v0, v0, v1 7084; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 7085; 7086; VI-GISEL-LABEL: v_log_fneg_v2f16: 7087; VI-GISEL: ; %bb.0: 7088; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7089; VI-GISEL-NEXT: v_xor_b32_e32 v0, 0x80008000, v0 7090; VI-GISEL-NEXT: v_log_f16_e32 v1, v0 7091; VI-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7092; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x398c 7093; VI-GISEL-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7094; VI-GISEL-NEXT: v_mul_f16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 7095; VI-GISEL-NEXT: v_or_b32_e32 v0, v1, v0 7096; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 7097; 7098; GFX900-SDAG-LABEL: v_log_fneg_v2f16: 7099; GFX900-SDAG: ; %bb.0: 7100; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7101; GFX900-SDAG-NEXT: v_log_f16_e64 v1, -v0 7102; GFX900-SDAG-NEXT: v_log_f16_sdwa v0, -v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7103; GFX900-SDAG-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7104; GFX900-SDAG-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7105; GFX900-SDAG-NEXT: v_pack_b32_f16 v0, v1, v0 7106; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 7107; 7108; GFX900-GISEL-LABEL: v_log_fneg_v2f16: 7109; GFX900-GISEL: ; %bb.0: 7110; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7111; GFX900-GISEL-NEXT: v_xor_b32_e32 v0, 0x80008000, v0 7112; GFX900-GISEL-NEXT: v_log_f16_e32 v1, v0 7113; GFX900-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7114; GFX900-GISEL-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7115; GFX900-GISEL-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7116; GFX900-GISEL-NEXT: v_pack_b32_f16 v0, v1, v0 7117; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 7118; 7119; GFX1100-SDAG-LABEL: v_log_fneg_v2f16: 7120; GFX1100-SDAG: ; %bb.0: 7121; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7122; GFX1100-SDAG-NEXT: v_lshrrev_b32_e32 v1, 16, v0 7123; GFX1100-SDAG-NEXT: v_log_f16_e64 v0, -v0 7124; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_1) 7125; GFX1100-SDAG-NEXT: v_log_f16_e64 v1, -v1 7126; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 7127; GFX1100-SDAG-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7128; GFX1100-SDAG-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7129; GFX1100-SDAG-NEXT: v_pack_b32_f16 v0, v0, v1 7130; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 7131; 7132; GFX1100-GISEL-LABEL: v_log_fneg_v2f16: 7133; GFX1100-GISEL: ; %bb.0: 7134; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7135; GFX1100-GISEL-NEXT: v_xor_b32_e32 v0, 0x80008000, v0 7136; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1) 7137; GFX1100-GISEL-NEXT: v_lshrrev_b32_e32 v1, 16, v0 7138; GFX1100-GISEL-NEXT: v_log_f16_e32 v0, v0 7139; GFX1100-GISEL-NEXT: v_log_f16_e32 v1, v1 7140; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 7141; GFX1100-GISEL-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7142; GFX1100-GISEL-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7143; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) 7144; GFX1100-GISEL-NEXT: v_pack_b32_f16 v0, v0, v1 7145; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 7146; 7147; R600-LABEL: v_log_fneg_v2f16: 7148; R600: ; %bb.0: 7149; R600-NEXT: CF_END 7150; R600-NEXT: PAD 7151; 7152; CM-LABEL: v_log_fneg_v2f16: 7153; CM: ; %bb.0: 7154; CM-NEXT: CF_END 7155; CM-NEXT: PAD 7156 %fneg = fneg <2 x half> %in 7157 %result = call <2 x half> @llvm.log.v2f16(<2 x half> %fneg) 7158 ret <2 x half> %result 7159} 7160 7161define <2 x half> @v_log_v2f16_fast(<2 x half> %in) { 7162; SI-SDAG-LABEL: v_log_v2f16_fast: 7163; SI-SDAG: ; %bb.0: 7164; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7165; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 7166; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1 7167; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 7168; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1 7169; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 7170; SI-SDAG-NEXT: v_log_f32_e32 v1, v1 7171; SI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 7172; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317218, v1 7173; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 7174; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1 7175; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 7176; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1 7177; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 7178; 7179; SI-GISEL-LABEL: v_log_v2f16_fast: 7180; SI-GISEL: ; %bb.0: 7181; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7182; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 7183; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v1 7184; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 7185; SI-GISEL-NEXT: v_log_f32_e32 v1, v1 7186; SI-GISEL-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 7187; SI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317218, v1 7188; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0 7189; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v1 7190; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 7191; 7192; VI-SDAG-LABEL: v_log_v2f16_fast: 7193; VI-SDAG: ; %bb.0: 7194; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7195; VI-SDAG-NEXT: v_log_f16_sdwa v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7196; VI-SDAG-NEXT: v_log_f16_e32 v0, v0 7197; VI-SDAG-NEXT: v_mov_b32_e32 v2, 0x398c 7198; VI-SDAG-NEXT: v_mul_f16_sdwa v1, v1, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 7199; VI-SDAG-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7200; VI-SDAG-NEXT: v_or_b32_e32 v0, v0, v1 7201; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 7202; 7203; VI-GISEL-LABEL: v_log_v2f16_fast: 7204; VI-GISEL: ; %bb.0: 7205; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7206; VI-GISEL-NEXT: v_log_f16_e32 v1, v0 7207; VI-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7208; VI-GISEL-NEXT: v_mov_b32_e32 v2, 0x398c 7209; VI-GISEL-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7210; VI-GISEL-NEXT: v_mul_f16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 7211; VI-GISEL-NEXT: v_or_b32_e32 v0, v1, v0 7212; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 7213; 7214; GFX900-LABEL: v_log_v2f16_fast: 7215; GFX900: ; %bb.0: 7216; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7217; GFX900-NEXT: v_log_f16_e32 v1, v0 7218; GFX900-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7219; GFX900-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7220; GFX900-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7221; GFX900-NEXT: v_pack_b32_f16 v0, v1, v0 7222; GFX900-NEXT: s_setpc_b64 s[30:31] 7223; 7224; GFX1100-LABEL: v_log_v2f16_fast: 7225; GFX1100: ; %bb.0: 7226; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7227; GFX1100-NEXT: v_lshrrev_b32_e32 v1, 16, v0 7228; GFX1100-NEXT: v_log_f16_e32 v0, v0 7229; GFX1100-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_1) 7230; GFX1100-NEXT: v_log_f16_e32 v1, v1 7231; GFX1100-NEXT: s_waitcnt_depctr 0xfff 7232; GFX1100-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7233; GFX1100-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7234; GFX1100-NEXT: v_pack_b32_f16 v0, v0, v1 7235; GFX1100-NEXT: s_setpc_b64 s[30:31] 7236; 7237; R600-LABEL: v_log_v2f16_fast: 7238; R600: ; %bb.0: 7239; R600-NEXT: CF_END 7240; R600-NEXT: PAD 7241; 7242; CM-LABEL: v_log_v2f16_fast: 7243; CM: ; %bb.0: 7244; CM-NEXT: CF_END 7245; CM-NEXT: PAD 7246 %result = call fast <2 x half> @llvm.log.v2f16(<2 x half> %in) 7247 ret <2 x half> %result 7248} 7249 7250define <3 x half> @v_log_v3f16(<3 x half> %in) { 7251; SI-SDAG-LABEL: v_log_v3f16: 7252; SI-SDAG: ; %bb.0: 7253; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7254; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 7255; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1 7256; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v2 7257; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 7258; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1 7259; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v2, v2 7260; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 7261; SI-SDAG-NEXT: v_log_f32_e32 v1, v1 7262; SI-SDAG-NEXT: v_log_f32_e32 v2, v2 7263; SI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 7264; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317218, v1 7265; SI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3f317218, v2 7266; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 7267; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1 7268; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v2 7269; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 7270; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1 7271; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v2, v2 7272; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 7273; 7274; SI-GISEL-LABEL: v_log_v3f16: 7275; SI-GISEL: ; %bb.0: 7276; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7277; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 7278; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v1 7279; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v2, v2 7280; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 7281; SI-GISEL-NEXT: v_log_f32_e32 v1, v1 7282; SI-GISEL-NEXT: v_log_f32_e32 v2, v2 7283; SI-GISEL-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 7284; SI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317218, v1 7285; SI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317218, v2 7286; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0 7287; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v1 7288; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v2, v2 7289; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 7290; 7291; VI-LABEL: v_log_v3f16: 7292; VI: ; %bb.0: 7293; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7294; VI-NEXT: v_log_f16_e32 v2, v0 7295; VI-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7296; VI-NEXT: v_log_f16_e32 v1, v1 7297; VI-NEXT: v_mov_b32_e32 v3, 0x398c 7298; VI-NEXT: v_mul_f16_e32 v2, 0x398c, v2 7299; VI-NEXT: v_mul_f16_sdwa v0, v0, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 7300; VI-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7301; VI-NEXT: v_or_b32_e32 v0, v2, v0 7302; VI-NEXT: s_setpc_b64 s[30:31] 7303; 7304; GFX900-LABEL: v_log_v3f16: 7305; GFX900: ; %bb.0: 7306; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7307; GFX900-NEXT: v_log_f16_e32 v2, v0 7308; GFX900-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7309; GFX900-NEXT: v_log_f16_e32 v1, v1 7310; GFX900-NEXT: v_mul_f16_e32 v2, 0x398c, v2 7311; GFX900-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7312; GFX900-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7313; GFX900-NEXT: v_pack_b32_f16 v0, v2, v0 7314; GFX900-NEXT: s_setpc_b64 s[30:31] 7315; 7316; GFX1100-LABEL: v_log_v3f16: 7317; GFX1100: ; %bb.0: 7318; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7319; GFX1100-NEXT: v_lshrrev_b32_e32 v2, 16, v0 7320; GFX1100-NEXT: v_log_f16_e32 v0, v0 7321; GFX1100-NEXT: v_log_f16_e32 v1, v1 7322; GFX1100-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(TRANS32_DEP_3) 7323; GFX1100-NEXT: v_log_f16_e32 v2, v2 7324; GFX1100-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7325; GFX1100-NEXT: s_waitcnt_depctr 0xfff 7326; GFX1100-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7327; GFX1100-NEXT: v_mul_f16_e32 v2, 0x398c, v2 7328; GFX1100-NEXT: s_delay_alu instid0(VALU_DEP_1) 7329; GFX1100-NEXT: v_pack_b32_f16 v0, v0, v2 7330; GFX1100-NEXT: s_setpc_b64 s[30:31] 7331; 7332; R600-LABEL: v_log_v3f16: 7333; R600: ; %bb.0: 7334; R600-NEXT: CF_END 7335; R600-NEXT: PAD 7336; 7337; CM-LABEL: v_log_v3f16: 7338; CM: ; %bb.0: 7339; CM-NEXT: CF_END 7340; CM-NEXT: PAD 7341 %result = call <3 x half> @llvm.log.v3f16(<3 x half> %in) 7342 ret <3 x half> %result 7343} 7344 7345define <3 x half> @v_log_v3f16_fast(<3 x half> %in) { 7346; SI-SDAG-LABEL: v_log_v3f16_fast: 7347; SI-SDAG: ; %bb.0: 7348; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7349; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 7350; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1 7351; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v2 7352; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 7353; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1 7354; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v2, v2 7355; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 7356; SI-SDAG-NEXT: v_log_f32_e32 v1, v1 7357; SI-SDAG-NEXT: v_log_f32_e32 v2, v2 7358; SI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 7359; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317218, v1 7360; SI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3f317218, v2 7361; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 7362; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1 7363; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v2 7364; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 7365; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1 7366; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v2, v2 7367; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 7368; 7369; SI-GISEL-LABEL: v_log_v3f16_fast: 7370; SI-GISEL: ; %bb.0: 7371; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7372; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 7373; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v1 7374; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v2, v2 7375; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 7376; SI-GISEL-NEXT: v_log_f32_e32 v1, v1 7377; SI-GISEL-NEXT: v_log_f32_e32 v2, v2 7378; SI-GISEL-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 7379; SI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317218, v1 7380; SI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317218, v2 7381; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0 7382; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v1 7383; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v2, v2 7384; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 7385; 7386; VI-LABEL: v_log_v3f16_fast: 7387; VI: ; %bb.0: 7388; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7389; VI-NEXT: v_log_f16_e32 v2, v0 7390; VI-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7391; VI-NEXT: v_log_f16_e32 v1, v1 7392; VI-NEXT: v_mov_b32_e32 v3, 0x398c 7393; VI-NEXT: v_mul_f16_e32 v2, 0x398c, v2 7394; VI-NEXT: v_mul_f16_sdwa v0, v0, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 7395; VI-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7396; VI-NEXT: v_or_b32_e32 v0, v2, v0 7397; VI-NEXT: s_setpc_b64 s[30:31] 7398; 7399; GFX900-LABEL: v_log_v3f16_fast: 7400; GFX900: ; %bb.0: 7401; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7402; GFX900-NEXT: v_log_f16_e32 v2, v0 7403; GFX900-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7404; GFX900-NEXT: v_log_f16_e32 v1, v1 7405; GFX900-NEXT: v_mul_f16_e32 v2, 0x398c, v2 7406; GFX900-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7407; GFX900-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7408; GFX900-NEXT: v_pack_b32_f16 v0, v2, v0 7409; GFX900-NEXT: s_setpc_b64 s[30:31] 7410; 7411; GFX1100-LABEL: v_log_v3f16_fast: 7412; GFX1100: ; %bb.0: 7413; GFX1100-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7414; GFX1100-NEXT: v_lshrrev_b32_e32 v2, 16, v0 7415; GFX1100-NEXT: v_log_f16_e32 v0, v0 7416; GFX1100-NEXT: v_log_f16_e32 v1, v1 7417; GFX1100-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(TRANS32_DEP_3) 7418; GFX1100-NEXT: v_log_f16_e32 v2, v2 7419; GFX1100-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7420; GFX1100-NEXT: s_waitcnt_depctr 0xfff 7421; GFX1100-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7422; GFX1100-NEXT: v_mul_f16_e32 v2, 0x398c, v2 7423; GFX1100-NEXT: s_delay_alu instid0(VALU_DEP_1) 7424; GFX1100-NEXT: v_pack_b32_f16 v0, v0, v2 7425; GFX1100-NEXT: s_setpc_b64 s[30:31] 7426; 7427; R600-LABEL: v_log_v3f16_fast: 7428; R600: ; %bb.0: 7429; R600-NEXT: CF_END 7430; R600-NEXT: PAD 7431; 7432; CM-LABEL: v_log_v3f16_fast: 7433; CM: ; %bb.0: 7434; CM-NEXT: CF_END 7435; CM-NEXT: PAD 7436 %result = call fast <3 x half> @llvm.log.v3f16(<3 x half> %in) 7437 ret <3 x half> %result 7438} 7439 7440define <4 x half> @v_log_v4f16(<4 x half> %in) { 7441; SI-SDAG-LABEL: v_log_v4f16: 7442; SI-SDAG: ; %bb.0: 7443; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7444; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 7445; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1 7446; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v3, v3 7447; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v2 7448; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 7449; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1 7450; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v3, v3 7451; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v2, v2 7452; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 7453; SI-SDAG-NEXT: v_log_f32_e32 v1, v1 7454; SI-SDAG-NEXT: v_log_f32_e32 v3, v3 7455; SI-SDAG-NEXT: v_log_f32_e32 v2, v2 7456; SI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 7457; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317218, v1 7458; SI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317218, v3 7459; SI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3f317218, v2 7460; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 7461; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1 7462; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v2 7463; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v3, v3 7464; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 7465; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1 7466; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v2, v2 7467; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v3, v3 7468; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 7469; 7470; SI-GISEL-LABEL: v_log_v4f16: 7471; SI-GISEL: ; %bb.0: 7472; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7473; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 7474; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v1 7475; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v2, v2 7476; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v3, v3 7477; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 7478; SI-GISEL-NEXT: v_log_f32_e32 v1, v1 7479; SI-GISEL-NEXT: v_log_f32_e32 v2, v2 7480; SI-GISEL-NEXT: v_log_f32_e32 v3, v3 7481; SI-GISEL-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 7482; SI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317218, v1 7483; SI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317218, v2 7484; SI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3f317218, v3 7485; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0 7486; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v1 7487; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v2, v2 7488; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v3, v3 7489; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 7490; 7491; VI-SDAG-LABEL: v_log_v4f16: 7492; VI-SDAG: ; %bb.0: 7493; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7494; VI-SDAG-NEXT: v_log_f16_e32 v2, v1 7495; VI-SDAG-NEXT: v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7496; VI-SDAG-NEXT: v_log_f16_e32 v3, v0 7497; VI-SDAG-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7498; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0x398c 7499; VI-SDAG-NEXT: v_mul_f16_e32 v2, 0x398c, v2 7500; VI-SDAG-NEXT: v_mul_f16_sdwa v1, v1, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 7501; VI-SDAG-NEXT: v_mul_f16_e32 v3, 0x398c, v3 7502; VI-SDAG-NEXT: v_mul_f16_sdwa v0, v0, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 7503; VI-SDAG-NEXT: v_or_b32_e32 v0, v3, v0 7504; VI-SDAG-NEXT: v_or_b32_e32 v1, v2, v1 7505; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 7506; 7507; VI-GISEL-LABEL: v_log_v4f16: 7508; VI-GISEL: ; %bb.0: 7509; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7510; VI-GISEL-NEXT: v_log_f16_e32 v2, v0 7511; VI-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7512; VI-GISEL-NEXT: v_log_f16_e32 v4, v1 7513; VI-GISEL-NEXT: v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7514; VI-GISEL-NEXT: v_mov_b32_e32 v3, 0x398c 7515; VI-GISEL-NEXT: v_mul_f16_e32 v2, 0x398c, v2 7516; VI-GISEL-NEXT: v_mul_f16_sdwa v0, v0, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 7517; VI-GISEL-NEXT: v_mul_f16_e32 v4, 0x398c, v4 7518; VI-GISEL-NEXT: v_mul_f16_sdwa v1, v1, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 7519; VI-GISEL-NEXT: v_or_b32_e32 v0, v2, v0 7520; VI-GISEL-NEXT: v_or_b32_e32 v1, v4, v1 7521; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 7522; 7523; GFX900-SDAG-LABEL: v_log_v4f16: 7524; GFX900-SDAG: ; %bb.0: 7525; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7526; GFX900-SDAG-NEXT: v_log_f16_e32 v2, v1 7527; GFX900-SDAG-NEXT: v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7528; GFX900-SDAG-NEXT: v_log_f16_e32 v3, v0 7529; GFX900-SDAG-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7530; GFX900-SDAG-NEXT: v_mul_f16_e32 v2, 0x398c, v2 7531; GFX900-SDAG-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7532; GFX900-SDAG-NEXT: v_mul_f16_e32 v3, 0x398c, v3 7533; GFX900-SDAG-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7534; GFX900-SDAG-NEXT: v_pack_b32_f16 v0, v3, v0 7535; GFX900-SDAG-NEXT: v_pack_b32_f16 v1, v2, v1 7536; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 7537; 7538; GFX900-GISEL-LABEL: v_log_v4f16: 7539; GFX900-GISEL: ; %bb.0: 7540; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7541; GFX900-GISEL-NEXT: v_log_f16_e32 v2, v0 7542; GFX900-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7543; GFX900-GISEL-NEXT: v_log_f16_e32 v3, v1 7544; GFX900-GISEL-NEXT: v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7545; GFX900-GISEL-NEXT: v_mul_f16_e32 v2, 0x398c, v2 7546; GFX900-GISEL-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7547; GFX900-GISEL-NEXT: v_mul_f16_e32 v3, 0x398c, v3 7548; GFX900-GISEL-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7549; GFX900-GISEL-NEXT: v_pack_b32_f16 v0, v2, v0 7550; GFX900-GISEL-NEXT: v_pack_b32_f16 v1, v3, v1 7551; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 7552; 7553; GFX1100-SDAG-LABEL: v_log_v4f16: 7554; GFX1100-SDAG: ; %bb.0: 7555; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7556; GFX1100-SDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v0 7557; GFX1100-SDAG-NEXT: v_lshrrev_b32_e32 v3, 16, v1 7558; GFX1100-SDAG-NEXT: v_log_f16_e32 v1, v1 7559; GFX1100-SDAG-NEXT: v_log_f16_e32 v0, v0 7560; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 7561; GFX1100-SDAG-NEXT: v_log_f16_e32 v2, v2 7562; GFX1100-SDAG-NEXT: v_log_f16_e32 v3, v3 7563; GFX1100-SDAG-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7564; GFX1100-SDAG-NEXT: s_delay_alu instid0(TRANS32_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_2) 7565; GFX1100-SDAG-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7566; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 7567; GFX1100-SDAG-NEXT: v_mul_f16_e32 v2, 0x398c, v2 7568; GFX1100-SDAG-NEXT: v_mul_f16_e32 v3, 0x398c, v3 7569; GFX1100-SDAG-NEXT: v_pack_b32_f16 v0, v0, v2 7570; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) 7571; GFX1100-SDAG-NEXT: v_pack_b32_f16 v1, v1, v3 7572; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 7573; 7574; GFX1100-GISEL-LABEL: v_log_v4f16: 7575; GFX1100-GISEL: ; %bb.0: 7576; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7577; GFX1100-GISEL-NEXT: v_lshrrev_b32_e32 v2, 16, v0 7578; GFX1100-GISEL-NEXT: v_lshrrev_b32_e32 v3, 16, v1 7579; GFX1100-GISEL-NEXT: v_log_f16_e32 v0, v0 7580; GFX1100-GISEL-NEXT: v_log_f16_e32 v1, v1 7581; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 7582; GFX1100-GISEL-NEXT: v_log_f16_e32 v2, v2 7583; GFX1100-GISEL-NEXT: v_log_f16_e32 v3, v3 7584; GFX1100-GISEL-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7585; GFX1100-GISEL-NEXT: s_delay_alu instid0(TRANS32_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_2) 7586; GFX1100-GISEL-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7587; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 7588; GFX1100-GISEL-NEXT: v_mul_f16_e32 v2, 0x398c, v2 7589; GFX1100-GISEL-NEXT: v_mul_f16_e32 v3, 0x398c, v3 7590; GFX1100-GISEL-NEXT: v_pack_b32_f16 v0, v0, v2 7591; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) 7592; GFX1100-GISEL-NEXT: v_pack_b32_f16 v1, v1, v3 7593; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 7594; 7595; R600-LABEL: v_log_v4f16: 7596; R600: ; %bb.0: 7597; R600-NEXT: CF_END 7598; R600-NEXT: PAD 7599; 7600; CM-LABEL: v_log_v4f16: 7601; CM: ; %bb.0: 7602; CM-NEXT: CF_END 7603; CM-NEXT: PAD 7604 %result = call <4 x half> @llvm.log.v4f16(<4 x half> %in) 7605 ret <4 x half> %result 7606} 7607 7608define <4 x half> @v_log_v4f16_fast(<4 x half> %in) { 7609; SI-SDAG-LABEL: v_log_v4f16_fast: 7610; SI-SDAG: ; %bb.0: 7611; SI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7612; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 7613; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1 7614; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v3, v3 7615; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v2 7616; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 7617; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1 7618; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v3, v3 7619; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v2, v2 7620; SI-SDAG-NEXT: v_log_f32_e32 v0, v0 7621; SI-SDAG-NEXT: v_log_f32_e32 v1, v1 7622; SI-SDAG-NEXT: v_log_f32_e32 v3, v3 7623; SI-SDAG-NEXT: v_log_f32_e32 v2, v2 7624; SI-SDAG-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 7625; SI-SDAG-NEXT: v_mul_f32_e32 v1, 0x3f317218, v1 7626; SI-SDAG-NEXT: v_mul_f32_e32 v3, 0x3f317218, v3 7627; SI-SDAG-NEXT: v_mul_f32_e32 v2, 0x3f317218, v2 7628; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0 7629; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1 7630; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v2 7631; SI-SDAG-NEXT: v_cvt_f16_f32_e32 v3, v3 7632; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0 7633; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1 7634; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v2, v2 7635; SI-SDAG-NEXT: v_cvt_f32_f16_e32 v3, v3 7636; SI-SDAG-NEXT: s_setpc_b64 s[30:31] 7637; 7638; SI-GISEL-LABEL: v_log_v4f16_fast: 7639; SI-GISEL: ; %bb.0: 7640; SI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7641; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0 7642; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v1 7643; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v2, v2 7644; SI-GISEL-NEXT: v_cvt_f32_f16_e32 v3, v3 7645; SI-GISEL-NEXT: v_log_f32_e32 v0, v0 7646; SI-GISEL-NEXT: v_log_f32_e32 v1, v1 7647; SI-GISEL-NEXT: v_log_f32_e32 v2, v2 7648; SI-GISEL-NEXT: v_log_f32_e32 v3, v3 7649; SI-GISEL-NEXT: v_mul_f32_e32 v0, 0x3f317218, v0 7650; SI-GISEL-NEXT: v_mul_f32_e32 v1, 0x3f317218, v1 7651; SI-GISEL-NEXT: v_mul_f32_e32 v2, 0x3f317218, v2 7652; SI-GISEL-NEXT: v_mul_f32_e32 v3, 0x3f317218, v3 7653; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0 7654; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v1 7655; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v2, v2 7656; SI-GISEL-NEXT: v_cvt_f16_f32_e32 v3, v3 7657; SI-GISEL-NEXT: s_setpc_b64 s[30:31] 7658; 7659; VI-SDAG-LABEL: v_log_v4f16_fast: 7660; VI-SDAG: ; %bb.0: 7661; VI-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7662; VI-SDAG-NEXT: v_log_f16_e32 v2, v1 7663; VI-SDAG-NEXT: v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7664; VI-SDAG-NEXT: v_log_f16_e32 v3, v0 7665; VI-SDAG-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7666; VI-SDAG-NEXT: v_mov_b32_e32 v4, 0x398c 7667; VI-SDAG-NEXT: v_mul_f16_e32 v2, 0x398c, v2 7668; VI-SDAG-NEXT: v_mul_f16_sdwa v1, v1, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 7669; VI-SDAG-NEXT: v_mul_f16_e32 v3, 0x398c, v3 7670; VI-SDAG-NEXT: v_mul_f16_sdwa v0, v0, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 7671; VI-SDAG-NEXT: v_or_b32_e32 v0, v3, v0 7672; VI-SDAG-NEXT: v_or_b32_e32 v1, v2, v1 7673; VI-SDAG-NEXT: s_setpc_b64 s[30:31] 7674; 7675; VI-GISEL-LABEL: v_log_v4f16_fast: 7676; VI-GISEL: ; %bb.0: 7677; VI-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7678; VI-GISEL-NEXT: v_log_f16_e32 v2, v0 7679; VI-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7680; VI-GISEL-NEXT: v_log_f16_e32 v4, v1 7681; VI-GISEL-NEXT: v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7682; VI-GISEL-NEXT: v_mov_b32_e32 v3, 0x398c 7683; VI-GISEL-NEXT: v_mul_f16_e32 v2, 0x398c, v2 7684; VI-GISEL-NEXT: v_mul_f16_sdwa v0, v0, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 7685; VI-GISEL-NEXT: v_mul_f16_e32 v4, 0x398c, v4 7686; VI-GISEL-NEXT: v_mul_f16_sdwa v1, v1, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD 7687; VI-GISEL-NEXT: v_or_b32_e32 v0, v2, v0 7688; VI-GISEL-NEXT: v_or_b32_e32 v1, v4, v1 7689; VI-GISEL-NEXT: s_setpc_b64 s[30:31] 7690; 7691; GFX900-SDAG-LABEL: v_log_v4f16_fast: 7692; GFX900-SDAG: ; %bb.0: 7693; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7694; GFX900-SDAG-NEXT: v_log_f16_e32 v2, v1 7695; GFX900-SDAG-NEXT: v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7696; GFX900-SDAG-NEXT: v_log_f16_e32 v3, v0 7697; GFX900-SDAG-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7698; GFX900-SDAG-NEXT: v_mul_f16_e32 v2, 0x398c, v2 7699; GFX900-SDAG-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7700; GFX900-SDAG-NEXT: v_mul_f16_e32 v3, 0x398c, v3 7701; GFX900-SDAG-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7702; GFX900-SDAG-NEXT: v_pack_b32_f16 v0, v3, v0 7703; GFX900-SDAG-NEXT: v_pack_b32_f16 v1, v2, v1 7704; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31] 7705; 7706; GFX900-GISEL-LABEL: v_log_v4f16_fast: 7707; GFX900-GISEL: ; %bb.0: 7708; GFX900-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7709; GFX900-GISEL-NEXT: v_log_f16_e32 v2, v0 7710; GFX900-GISEL-NEXT: v_log_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7711; GFX900-GISEL-NEXT: v_log_f16_e32 v3, v1 7712; GFX900-GISEL-NEXT: v_log_f16_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 7713; GFX900-GISEL-NEXT: v_mul_f16_e32 v2, 0x398c, v2 7714; GFX900-GISEL-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7715; GFX900-GISEL-NEXT: v_mul_f16_e32 v3, 0x398c, v3 7716; GFX900-GISEL-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7717; GFX900-GISEL-NEXT: v_pack_b32_f16 v0, v2, v0 7718; GFX900-GISEL-NEXT: v_pack_b32_f16 v1, v3, v1 7719; GFX900-GISEL-NEXT: s_setpc_b64 s[30:31] 7720; 7721; GFX1100-SDAG-LABEL: v_log_v4f16_fast: 7722; GFX1100-SDAG: ; %bb.0: 7723; GFX1100-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7724; GFX1100-SDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v0 7725; GFX1100-SDAG-NEXT: v_lshrrev_b32_e32 v3, 16, v1 7726; GFX1100-SDAG-NEXT: v_log_f16_e32 v1, v1 7727; GFX1100-SDAG-NEXT: v_log_f16_e32 v0, v0 7728; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 7729; GFX1100-SDAG-NEXT: v_log_f16_e32 v2, v2 7730; GFX1100-SDAG-NEXT: v_log_f16_e32 v3, v3 7731; GFX1100-SDAG-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7732; GFX1100-SDAG-NEXT: s_delay_alu instid0(TRANS32_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_2) 7733; GFX1100-SDAG-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7734; GFX1100-SDAG-NEXT: s_waitcnt_depctr 0xfff 7735; GFX1100-SDAG-NEXT: v_mul_f16_e32 v2, 0x398c, v2 7736; GFX1100-SDAG-NEXT: v_mul_f16_e32 v3, 0x398c, v3 7737; GFX1100-SDAG-NEXT: v_pack_b32_f16 v0, v0, v2 7738; GFX1100-SDAG-NEXT: s_delay_alu instid0(VALU_DEP_2) 7739; GFX1100-SDAG-NEXT: v_pack_b32_f16 v1, v1, v3 7740; GFX1100-SDAG-NEXT: s_setpc_b64 s[30:31] 7741; 7742; GFX1100-GISEL-LABEL: v_log_v4f16_fast: 7743; GFX1100-GISEL: ; %bb.0: 7744; GFX1100-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 7745; GFX1100-GISEL-NEXT: v_lshrrev_b32_e32 v2, 16, v0 7746; GFX1100-GISEL-NEXT: v_lshrrev_b32_e32 v3, 16, v1 7747; GFX1100-GISEL-NEXT: v_log_f16_e32 v0, v0 7748; GFX1100-GISEL-NEXT: v_log_f16_e32 v1, v1 7749; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 7750; GFX1100-GISEL-NEXT: v_log_f16_e32 v2, v2 7751; GFX1100-GISEL-NEXT: v_log_f16_e32 v3, v3 7752; GFX1100-GISEL-NEXT: v_mul_f16_e32 v0, 0x398c, v0 7753; GFX1100-GISEL-NEXT: s_delay_alu instid0(TRANS32_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_2) 7754; GFX1100-GISEL-NEXT: v_mul_f16_e32 v1, 0x398c, v1 7755; GFX1100-GISEL-NEXT: s_waitcnt_depctr 0xfff 7756; GFX1100-GISEL-NEXT: v_mul_f16_e32 v2, 0x398c, v2 7757; GFX1100-GISEL-NEXT: v_mul_f16_e32 v3, 0x398c, v3 7758; GFX1100-GISEL-NEXT: v_pack_b32_f16 v0, v0, v2 7759; GFX1100-GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) 7760; GFX1100-GISEL-NEXT: v_pack_b32_f16 v1, v1, v3 7761; GFX1100-GISEL-NEXT: s_setpc_b64 s[30:31] 7762; 7763; R600-LABEL: v_log_v4f16_fast: 7764; R600: ; %bb.0: 7765; R600-NEXT: CF_END 7766; R600-NEXT: PAD 7767; 7768; CM-LABEL: v_log_v4f16_fast: 7769; CM: ; %bb.0: 7770; CM-NEXT: CF_END 7771; CM-NEXT: PAD 7772 %result = call fast <4 x half> @llvm.log.v4f16(<4 x half> %in) 7773 ret <4 x half> %result 7774} 7775 7776declare float @llvm.fabs.f32(float) #2 7777declare float @llvm.log.f32(float) #2 7778declare <2 x float> @llvm.log.v2f32(<2 x float>) #2 7779declare <3 x float> @llvm.log.v3f32(<3 x float>) #2 7780declare <4 x float> @llvm.log.v4f32(<4 x float>) #2 7781declare half @llvm.fabs.f16(half) #2 7782declare half @llvm.log.f16(half) #2 7783declare <2 x half> @llvm.log.v2f16(<2 x half>) #2 7784declare <3 x half> @llvm.log.v3f16(<3 x half>) #2 7785declare <4 x half> @llvm.log.v4f16(<4 x half>) #2 7786declare <2 x half> @llvm.fabs.v2f16(<2 x half>) #2 7787 7788attributes #0 = { "denormal-fp-math-f32"="ieee,preserve-sign" } 7789attributes #1 = { "denormal-fp-math-f32"="dynamic,dynamic" } 7790attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } 7791;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: 7792; GFX689-GISEL: {{.*}} 7793; GFX689-SDAG: {{.*}} 7794