3455 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=pitcairn < %s | FileCheck -check-prefixes=GFX6,GFX6-SDAG %s3; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=fiji < %s | FileCheck -check-prefixes=GFX8,GFX8-SDAG %s4 5; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=pitcairn < %s | FileCheck -check-prefixes=GFX6,GFX6-GISEL %s6; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=fiji < %s | FileCheck -check-prefixes=GFX8,GFX8-GISEL %s7 8define double @v_sqrt_f64(double %x) {9; GFX6-SDAG-LABEL: v_sqrt_f64:10; GFX6-SDAG: ; %bb.0:11; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12; GFX6-SDAG-NEXT: s_mov_b32 s4, 013; GFX6-SDAG-NEXT: s_brev_b32 s5, 814; GFX6-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]15; GFX6-SDAG-NEXT: v_mov_b32_e32 v2, 0x10016; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc17; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v218; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]19; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]20; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.521; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.522; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]23; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]24; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]25; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]26; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]27; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]28; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff8029; GFX6-SDAG-NEXT: v_mov_b32_e32 v5, 0x26030; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc31; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v532; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v433; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc34; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc35; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]36;37; GFX8-SDAG-LABEL: v_sqrt_f64:38; GFX8-SDAG: ; %bb.0:39; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)40; GFX8-SDAG-NEXT: s_mov_b32 s4, 041; GFX8-SDAG-NEXT: s_brev_b32 s5, 842; GFX8-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]43; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x10044; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc45; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v246; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]47; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]48; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.549; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.550; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]51; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]52; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]53; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]54; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]55; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]56; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff8057; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x26058; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc59; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v560; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v461; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc62; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc63; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]64;65; GFX6-GISEL-LABEL: v_sqrt_f64:66; GFX6-GISEL: ; %bb.0:67; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)68; GFX6-GISEL-NEXT: v_mov_b32_e32 v2, 069; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v3, 870; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]71; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc72; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v273; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v274; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]75; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.576; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]77; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.578; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]79; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]80; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]81; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]82; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]83; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]84; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff8085; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x26086; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc87; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v588; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v489; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc90; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc91; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]92;93; GFX8-GISEL-LABEL: v_sqrt_f64:94; GFX8-GISEL: ; %bb.0:95; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)96; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 097; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v3, 898; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]99; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc100; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v2101; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2102; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]103; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5104; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]105; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5106; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]107; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]108; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]109; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]110; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]111; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]112; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80113; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x260114; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc115; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5116; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4117; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc118; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc119; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]120 %result = call double @llvm.sqrt.f64(double %x)121 ret double %result122}123 124define double @v_sqrt_f64_fneg(double %x) {125; GFX6-SDAG-LABEL: v_sqrt_f64_fneg:126; GFX6-SDAG: ; %bb.0:127; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)128; GFX6-SDAG-NEXT: s_mov_b32 s4, 0129; GFX6-SDAG-NEXT: s_brev_b32 s5, 9130; GFX6-SDAG-NEXT: v_cmp_lt_f64_e32 vcc, s[4:5], v[0:1]131; GFX6-SDAG-NEXT: v_mov_b32_e32 v2, 0x100132; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc133; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], -v[0:1], v2134; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]135; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]136; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5137; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5138; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]139; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]140; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]141; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]142; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]143; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]144; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80145; GFX6-SDAG-NEXT: v_mov_b32_e32 v5, 0x260146; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc147; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5148; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4149; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc150; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc151; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]152;153; GFX8-SDAG-LABEL: v_sqrt_f64_fneg:154; GFX8-SDAG: ; %bb.0:155; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)156; GFX8-SDAG-NEXT: s_mov_b32 s4, 0157; GFX8-SDAG-NEXT: s_brev_b32 s5, 9158; GFX8-SDAG-NEXT: v_cmp_lt_f64_e32 vcc, s[4:5], v[0:1]159; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x100160; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc161; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], -v[0:1], v2162; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]163; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]164; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5165; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5166; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]167; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]168; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]169; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]170; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]171; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]172; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80173; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x260174; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc175; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5176; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4177; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc178; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc179; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]180;181; GFX6-GISEL-LABEL: v_sqrt_f64_fneg:182; GFX6-GISEL: ; %bb.0:183; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)184; GFX6-GISEL-NEXT: v_mov_b32_e32 v2, 0185; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v3, 8186; GFX6-GISEL-NEXT: v_cmp_lt_f64_e64 vcc, -v[0:1], v[2:3]187; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc188; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v2189; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], -v[0:1], v2190; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]191; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5192; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]193; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5194; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]195; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]196; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]197; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]198; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]199; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]200; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80201; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x260202; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc203; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5204; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4205; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc206; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc207; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]208;209; GFX8-GISEL-LABEL: v_sqrt_f64_fneg:210; GFX8-GISEL: ; %bb.0:211; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)212; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 0213; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v3, 8214; GFX8-GISEL-NEXT: v_cmp_lt_f64_e64 vcc, -v[0:1], v[2:3]215; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc216; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v2217; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], -v[0:1], v2218; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]219; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5220; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]221; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5222; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]223; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]224; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]225; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]226; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]227; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]228; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80229; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x260230; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc231; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5232; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4233; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc234; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc235; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]236 %x.neg = fneg double %x237 %result = call double @llvm.sqrt.f64(double %x.neg)238 ret double %result239}240 241define double @v_sqrt_f64_fabs(double %x) {242; GFX6-SDAG-LABEL: v_sqrt_f64_fabs:243; GFX6-SDAG: ; %bb.0:244; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)245; GFX6-SDAG-NEXT: s_mov_b32 s4, 0246; GFX6-SDAG-NEXT: s_brev_b32 s5, 8247; GFX6-SDAG-NEXT: v_cmp_lt_f64_e64 vcc, |v[0:1]|, s[4:5]248; GFX6-SDAG-NEXT: v_mov_b32_e32 v2, 0x100249; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc250; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], |v[0:1]|, v2251; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]252; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]253; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5254; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5255; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]256; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]257; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]258; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]259; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]260; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]261; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80262; GFX6-SDAG-NEXT: v_mov_b32_e32 v5, 0x260263; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc264; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5265; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4266; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc267; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc268; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]269;270; GFX8-SDAG-LABEL: v_sqrt_f64_fabs:271; GFX8-SDAG: ; %bb.0:272; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)273; GFX8-SDAG-NEXT: s_mov_b32 s4, 0274; GFX8-SDAG-NEXT: s_brev_b32 s5, 8275; GFX8-SDAG-NEXT: v_cmp_lt_f64_e64 vcc, |v[0:1]|, s[4:5]276; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x100277; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc278; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], |v[0:1]|, v2279; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]280; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]281; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5282; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5283; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]284; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]285; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]286; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]287; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]288; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]289; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80290; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x260291; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc292; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5293; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4294; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc295; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc296; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]297;298; GFX6-GISEL-LABEL: v_sqrt_f64_fabs:299; GFX6-GISEL: ; %bb.0:300; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)301; GFX6-GISEL-NEXT: v_mov_b32_e32 v2, 0302; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v3, 8303; GFX6-GISEL-NEXT: v_cmp_lt_f64_e64 vcc, |v[0:1]|, v[2:3]304; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc305; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v2306; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], |v[0:1]|, v2307; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]308; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5309; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]310; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5311; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]312; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]313; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]314; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]315; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]316; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]317; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80318; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x260319; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc320; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5321; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4322; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc323; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc324; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]325;326; GFX8-GISEL-LABEL: v_sqrt_f64_fabs:327; GFX8-GISEL: ; %bb.0:328; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)329; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 0330; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v3, 8331; GFX8-GISEL-NEXT: v_cmp_lt_f64_e64 vcc, |v[0:1]|, v[2:3]332; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc333; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v2334; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], |v[0:1]|, v2335; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]336; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5337; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]338; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5339; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]340; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]341; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]342; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]343; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]344; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]345; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80346; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x260347; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc348; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5349; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4350; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc351; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc352; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]353 %x.fabs = call double @llvm.fabs.f64(double %x)354 %result = call double @llvm.sqrt.f64(double %x.fabs)355 ret double %result356}357 358define double @v_sqrt_f64_fneg_fabs(double %x) {359; GFX6-SDAG-LABEL: v_sqrt_f64_fneg_fabs:360; GFX6-SDAG: ; %bb.0:361; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)362; GFX6-SDAG-NEXT: s_mov_b32 s4, 0363; GFX6-SDAG-NEXT: s_brev_b32 s5, 9364; GFX6-SDAG-NEXT: v_cmp_gt_f64_e64 vcc, |v[0:1]|, s[4:5]365; GFX6-SDAG-NEXT: v_mov_b32_e32 v2, 0x100366; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc367; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], -|v[0:1]|, v2368; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]369; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]370; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5371; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5372; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]373; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]374; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]375; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]376; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]377; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]378; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80379; GFX6-SDAG-NEXT: v_mov_b32_e32 v5, 0x260380; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc381; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5382; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4383; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc384; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc385; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]386;387; GFX8-SDAG-LABEL: v_sqrt_f64_fneg_fabs:388; GFX8-SDAG: ; %bb.0:389; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)390; GFX8-SDAG-NEXT: s_mov_b32 s4, 0391; GFX8-SDAG-NEXT: s_brev_b32 s5, 9392; GFX8-SDAG-NEXT: v_cmp_gt_f64_e64 vcc, |v[0:1]|, s[4:5]393; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x100394; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc395; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], -|v[0:1]|, v2396; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]397; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]398; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5399; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5400; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]401; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]402; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]403; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]404; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]405; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]406; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80407; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x260408; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc409; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5410; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4411; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc412; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc413; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]414;415; GFX6-GISEL-LABEL: v_sqrt_f64_fneg_fabs:416; GFX6-GISEL: ; %bb.0:417; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)418; GFX6-GISEL-NEXT: v_mov_b32_e32 v2, 0419; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v3, 8420; GFX6-GISEL-NEXT: v_cmp_lt_f64_e64 vcc, -|v[0:1]|, v[2:3]421; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc422; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v2423; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], -|v[0:1]|, v2424; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]425; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5426; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]427; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5428; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]429; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]430; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]431; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]432; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]433; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]434; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80435; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x260436; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc437; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5438; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4439; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc440; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc441; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]442;443; GFX8-GISEL-LABEL: v_sqrt_f64_fneg_fabs:444; GFX8-GISEL: ; %bb.0:445; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)446; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 0447; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v3, 8448; GFX8-GISEL-NEXT: v_cmp_lt_f64_e64 vcc, -|v[0:1]|, v[2:3]449; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc450; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v2451; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], -|v[0:1]|, v2452; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]453; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5454; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]455; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5456; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]457; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]458; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]459; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]460; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]461; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]462; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80463; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x260464; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc465; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5466; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4467; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc468; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc469; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]470 %x.fabs = call double @llvm.fabs.f64(double %x)471 %x.fabs.neg = fneg double %x.fabs472 %result = call double @llvm.sqrt.f64(double %x.fabs.neg)473 ret double %result474}475 476define double @v_sqrt_f64_ninf(double %x) {477; GFX6-SDAG-LABEL: v_sqrt_f64_ninf:478; GFX6-SDAG: ; %bb.0:479; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)480; GFX6-SDAG-NEXT: s_mov_b32 s4, 0481; GFX6-SDAG-NEXT: s_brev_b32 s5, 8482; GFX6-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]483; GFX6-SDAG-NEXT: v_mov_b32_e32 v2, 0x100484; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc485; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2486; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]487; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]488; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5489; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5490; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]491; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]492; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]493; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]494; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]495; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]496; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80497; GFX6-SDAG-NEXT: v_mov_b32_e32 v5, 0x260498; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc499; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5500; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4501; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc502; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc503; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]504;505; GFX8-SDAG-LABEL: v_sqrt_f64_ninf:506; GFX8-SDAG: ; %bb.0:507; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)508; GFX8-SDAG-NEXT: s_mov_b32 s4, 0509; GFX8-SDAG-NEXT: s_brev_b32 s5, 8510; GFX8-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]511; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x100512; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc513; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2514; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]515; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]516; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5517; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5518; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]519; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]520; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]521; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]522; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]523; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]524; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80525; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x260526; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc527; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5528; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4529; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc530; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc531; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]532;533; GFX6-GISEL-LABEL: v_sqrt_f64_ninf:534; GFX6-GISEL: ; %bb.0:535; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)536; GFX6-GISEL-NEXT: v_mov_b32_e32 v2, 0537; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v3, 8538; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]539; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc540; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v2541; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2542; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]543; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5544; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]545; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5546; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]547; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]548; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]549; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]550; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]551; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]552; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80553; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x260554; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc555; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5556; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4557; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc558; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc559; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]560;561; GFX8-GISEL-LABEL: v_sqrt_f64_ninf:562; GFX8-GISEL: ; %bb.0:563; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)564; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 0565; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v3, 8566; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]567; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc568; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v2569; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2570; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]571; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5572; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]573; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5574; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]575; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]576; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]577; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]578; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]579; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]580; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80581; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x260582; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc583; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5584; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4585; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc586; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc587; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]588 %result = call ninf double @llvm.sqrt.f64(double %x)589 ret double %result590}591 592define double @v_sqrt_f64_no_infs_attribute(double %x) "no-infs-fp-math"="true" {593; GFX6-SDAG-LABEL: v_sqrt_f64_no_infs_attribute:594; GFX6-SDAG: ; %bb.0:595; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)596; GFX6-SDAG-NEXT: s_mov_b32 s4, 0597; GFX6-SDAG-NEXT: s_brev_b32 s5, 8598; GFX6-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]599; GFX6-SDAG-NEXT: v_mov_b32_e32 v2, 0x100600; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc601; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2602; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]603; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]604; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5605; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5606; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]607; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]608; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]609; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]610; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]611; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]612; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80613; GFX6-SDAG-NEXT: v_mov_b32_e32 v5, 0x260614; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc615; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5616; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4617; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc618; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc619; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]620;621; GFX8-SDAG-LABEL: v_sqrt_f64_no_infs_attribute:622; GFX8-SDAG: ; %bb.0:623; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)624; GFX8-SDAG-NEXT: s_mov_b32 s4, 0625; GFX8-SDAG-NEXT: s_brev_b32 s5, 8626; GFX8-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]627; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x100628; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc629; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2630; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]631; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]632; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5633; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5634; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]635; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]636; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]637; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]638; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]639; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]640; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80641; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x260642; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc643; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5644; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4645; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc646; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc647; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]648;649; GFX6-GISEL-LABEL: v_sqrt_f64_no_infs_attribute:650; GFX6-GISEL: ; %bb.0:651; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)652; GFX6-GISEL-NEXT: v_mov_b32_e32 v2, 0653; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v3, 8654; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]655; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc656; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v2657; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2658; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]659; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5660; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]661; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5662; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]663; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]664; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]665; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]666; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]667; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]668; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80669; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x260670; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc671; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5672; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4673; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc674; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc675; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]676;677; GFX8-GISEL-LABEL: v_sqrt_f64_no_infs_attribute:678; GFX8-GISEL: ; %bb.0:679; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)680; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 0681; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v3, 8682; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]683; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc684; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v2685; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2686; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]687; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5688; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]689; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5690; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]691; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]692; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]693; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]694; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]695; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]696; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80697; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x260698; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc699; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5700; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4701; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc702; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc703; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]704 %result = call ninf double @llvm.sqrt.f64(double %x)705 ret double %result706}707 708define double @v_sqrt_f64_nnan(double %x) {709; GFX6-SDAG-LABEL: v_sqrt_f64_nnan:710; GFX6-SDAG: ; %bb.0:711; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)712; GFX6-SDAG-NEXT: s_mov_b32 s4, 0713; GFX6-SDAG-NEXT: s_brev_b32 s5, 8714; GFX6-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]715; GFX6-SDAG-NEXT: v_mov_b32_e32 v2, 0x100716; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc717; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2718; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]719; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]720; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5721; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5722; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]723; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]724; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]725; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]726; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]727; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]728; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80729; GFX6-SDAG-NEXT: v_mov_b32_e32 v5, 0x260730; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc731; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5732; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4733; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc734; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc735; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]736;737; GFX8-SDAG-LABEL: v_sqrt_f64_nnan:738; GFX8-SDAG: ; %bb.0:739; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)740; GFX8-SDAG-NEXT: s_mov_b32 s4, 0741; GFX8-SDAG-NEXT: s_brev_b32 s5, 8742; GFX8-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]743; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x100744; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc745; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2746; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]747; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]748; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5749; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5750; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]751; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]752; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]753; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]754; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]755; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]756; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff80757; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x260758; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc759; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5760; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4761; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc762; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc763; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]764;765; GFX6-GISEL-LABEL: v_sqrt_f64_nnan:766; GFX6-GISEL: ; %bb.0:767; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)768; GFX6-GISEL-NEXT: v_mov_b32_e32 v2, 0769; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v3, 8770; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]771; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc772; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v2773; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2774; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]775; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5776; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]777; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5778; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]779; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]780; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]781; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]782; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]783; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]784; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80785; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x260786; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc787; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5788; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4789; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc790; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc791; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]792;793; GFX8-GISEL-LABEL: v_sqrt_f64_nnan:794; GFX8-GISEL: ; %bb.0:795; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)796; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 0797; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v3, 8798; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]799; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc800; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v2801; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2802; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]803; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5804; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]805; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5806; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]807; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]808; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]809; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]810; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]811; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]812; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80813; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x260814; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc815; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5816; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4817; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc818; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc819; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]820 %result = call nnan double @llvm.sqrt.f64(double %x)821 ret double %result822}823 824define amdgpu_ps <2 x i32> @s_sqrt_f64(double inreg %x) {825; GFX6-SDAG-LABEL: s_sqrt_f64:826; GFX6-SDAG: ; %bb.0:827; GFX6-SDAG-NEXT: v_mov_b32_e32 v0, 0828; GFX6-SDAG-NEXT: v_bfrev_b32_e32 v1, 8829; GFX6-SDAG-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]830; GFX6-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec831; GFX6-SDAG-NEXT: s_cselect_b32 s2, 0x100, 0832; GFX6-SDAG-NEXT: v_mov_b32_e32 v0, s2833; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], s[0:1], v0834; GFX6-SDAG-NEXT: s_cselect_b32 s0, 0xffffff80, 0835; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]836; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]837; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5838; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5839; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]840; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]841; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]842; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]843; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]844; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]845; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0x260846; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v4847; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], s0848; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc849; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc850; GFX6-SDAG-NEXT: v_readfirstlane_b32 s0, v0851; GFX6-SDAG-NEXT: v_readfirstlane_b32 s1, v1852; GFX6-SDAG-NEXT: ; return to shader part epilog853;854; GFX8-SDAG-LABEL: s_sqrt_f64:855; GFX8-SDAG: ; %bb.0:856; GFX8-SDAG-NEXT: v_mov_b32_e32 v0, 0857; GFX8-SDAG-NEXT: v_bfrev_b32_e32 v1, 8858; GFX8-SDAG-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]859; GFX8-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec860; GFX8-SDAG-NEXT: s_cselect_b32 s2, 0x100, 0861; GFX8-SDAG-NEXT: v_mov_b32_e32 v0, s2862; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], s[0:1], v0863; GFX8-SDAG-NEXT: s_cselect_b32 s0, 0xffffff80, 0864; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]865; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]866; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5867; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5868; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]869; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]870; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]871; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]872; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]873; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]874; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0x260875; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v4876; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], s0877; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc878; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc879; GFX8-SDAG-NEXT: v_readfirstlane_b32 s0, v0880; GFX8-SDAG-NEXT: v_readfirstlane_b32 s1, v1881; GFX8-SDAG-NEXT: ; return to shader part epilog882;883; GFX6-GISEL-LABEL: s_sqrt_f64:884; GFX6-GISEL: ; %bb.0:885; GFX6-GISEL-NEXT: v_mov_b32_e32 v0, 0886; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v1, 8887; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]888; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc889; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v0, 8, v0890; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], s[0:1], v0891; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]892; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5893; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]894; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5895; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]896; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]897; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]898; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]899; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]900; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]901; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80902; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x260903; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc904; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5905; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4906; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc907; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc908; GFX6-GISEL-NEXT: v_readfirstlane_b32 s0, v0909; GFX6-GISEL-NEXT: v_readfirstlane_b32 s1, v1910; GFX6-GISEL-NEXT: ; return to shader part epilog911;912; GFX8-GISEL-LABEL: s_sqrt_f64:913; GFX8-GISEL: ; %bb.0:914; GFX8-GISEL-NEXT: v_mov_b32_e32 v0, 0915; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v1, 8916; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]917; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc918; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v0, 8, v0919; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], s[0:1], v0920; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]921; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.5922; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]923; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.5924; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]925; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]926; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]927; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]928; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]929; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]930; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff80931; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x260932; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc933; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v5934; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v4935; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc936; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc937; GFX8-GISEL-NEXT: v_readfirstlane_b32 s0, v0938; GFX8-GISEL-NEXT: v_readfirstlane_b32 s1, v1939; GFX8-GISEL-NEXT: ; return to shader part epilog940 %result = call double @llvm.sqrt.f64(double %x)941 %cast = bitcast double %result to <2 x i32>942 %cast.0 = extractelement <2 x i32> %cast, i32 0943 %cast.1 = extractelement <2 x i32> %cast, i32 1944 %lane.0 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.0)945 %lane.1 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.1)946 %insert.0 = insertelement <2 x i32> poison, i32 %lane.0, i32 0947 %insert.1 = insertelement <2 x i32> %insert.0, i32 %lane.1, i32 1948 ret <2 x i32> %insert.1949}950 951define amdgpu_ps <2 x i32> @s_sqrt_f64_ninf(double inreg %x) {952; GFX6-SDAG-LABEL: s_sqrt_f64_ninf:953; GFX6-SDAG: ; %bb.0:954; GFX6-SDAG-NEXT: v_mov_b32_e32 v0, 0955; GFX6-SDAG-NEXT: v_bfrev_b32_e32 v1, 8956; GFX6-SDAG-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]957; GFX6-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec958; GFX6-SDAG-NEXT: s_cselect_b32 s2, 0x100, 0959; GFX6-SDAG-NEXT: v_mov_b32_e32 v0, s2960; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], s[0:1], v0961; GFX6-SDAG-NEXT: s_cselect_b32 s0, 0xffffff80, 0962; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]963; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]964; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5965; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5966; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]967; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]968; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]969; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]970; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]971; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]972; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0x260973; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v4974; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], s0975; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc976; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc977; GFX6-SDAG-NEXT: v_readfirstlane_b32 s0, v0978; GFX6-SDAG-NEXT: v_readfirstlane_b32 s1, v1979; GFX6-SDAG-NEXT: ; return to shader part epilog980;981; GFX8-SDAG-LABEL: s_sqrt_f64_ninf:982; GFX8-SDAG: ; %bb.0:983; GFX8-SDAG-NEXT: v_mov_b32_e32 v0, 0984; GFX8-SDAG-NEXT: v_bfrev_b32_e32 v1, 8985; GFX8-SDAG-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]986; GFX8-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec987; GFX8-SDAG-NEXT: s_cselect_b32 s2, 0x100, 0988; GFX8-SDAG-NEXT: v_mov_b32_e32 v0, s2989; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], s[0:1], v0990; GFX8-SDAG-NEXT: s_cselect_b32 s0, 0xffffff80, 0991; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]992; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]993; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.5994; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.5995; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]996; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]997; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]998; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]999; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1000; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]1001; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0x2601002; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v41003; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], s01004; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1005; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1006; GFX8-SDAG-NEXT: v_readfirstlane_b32 s0, v01007; GFX8-SDAG-NEXT: v_readfirstlane_b32 s1, v11008; GFX8-SDAG-NEXT: ; return to shader part epilog1009;1010; GFX6-GISEL-LABEL: s_sqrt_f64_ninf:1011; GFX6-GISEL: ; %bb.0:1012; GFX6-GISEL-NEXT: v_mov_b32_e32 v0, 01013; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v1, 81014; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]1015; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1016; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v0, 8, v01017; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], s[0:1], v01018; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1019; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.51020; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]1021; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.51022; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1023; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1024; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1025; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1026; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1027; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1028; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff801029; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x2601030; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1031; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51032; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41033; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1034; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1035; GFX6-GISEL-NEXT: v_readfirstlane_b32 s0, v01036; GFX6-GISEL-NEXT: v_readfirstlane_b32 s1, v11037; GFX6-GISEL-NEXT: ; return to shader part epilog1038;1039; GFX8-GISEL-LABEL: s_sqrt_f64_ninf:1040; GFX8-GISEL: ; %bb.0:1041; GFX8-GISEL-NEXT: v_mov_b32_e32 v0, 01042; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v1, 81043; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]1044; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1045; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v0, 8, v01046; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], s[0:1], v01047; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1048; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.51049; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]1050; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.51051; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1052; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1053; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1054; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1055; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1056; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1057; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff801058; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x2601059; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1060; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51061; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41062; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1063; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1064; GFX8-GISEL-NEXT: v_readfirstlane_b32 s0, v01065; GFX8-GISEL-NEXT: v_readfirstlane_b32 s1, v11066; GFX8-GISEL-NEXT: ; return to shader part epilog1067 %result = call ninf double @llvm.sqrt.f64(double %x)1068 %cast = bitcast double %result to <2 x i32>1069 %cast.0 = extractelement <2 x i32> %cast, i32 01070 %cast.1 = extractelement <2 x i32> %cast, i32 11071 %lane.0 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.0)1072 %lane.1 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.1)1073 %insert.0 = insertelement <2 x i32> poison, i32 %lane.0, i32 01074 %insert.1 = insertelement <2 x i32> %insert.0, i32 %lane.1, i32 11075 ret <2 x i32> %insert.11076}1077 1078define amdgpu_ps <2 x i32> @s_sqrt_f64_afn(double inreg %x) {1079; GFX6-SDAG-LABEL: s_sqrt_f64_afn:1080; GFX6-SDAG: ; %bb.0:1081; GFX6-SDAG-NEXT: v_mov_b32_e32 v0, 01082; GFX6-SDAG-NEXT: v_bfrev_b32_e32 v1, 81083; GFX6-SDAG-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]1084; GFX6-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec1085; GFX6-SDAG-NEXT: s_cselect_b32 s2, 0x100, 01086; GFX6-SDAG-NEXT: v_mov_b32_e32 v0, s21087; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], s[0:1], v01088; GFX6-SDAG-NEXT: s_cselect_b32 s0, 0xffffff80, 01089; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1090; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]1091; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.51092; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.51093; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1094; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1095; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1096; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]1097; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1098; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]1099; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0x2601100; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v41101; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], s01102; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1103; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1104; GFX6-SDAG-NEXT: v_readfirstlane_b32 s0, v01105; GFX6-SDAG-NEXT: v_readfirstlane_b32 s1, v11106; GFX6-SDAG-NEXT: ; return to shader part epilog1107;1108; GFX8-SDAG-LABEL: s_sqrt_f64_afn:1109; GFX8-SDAG: ; %bb.0:1110; GFX8-SDAG-NEXT: v_mov_b32_e32 v0, 01111; GFX8-SDAG-NEXT: v_bfrev_b32_e32 v1, 81112; GFX8-SDAG-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]1113; GFX8-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec1114; GFX8-SDAG-NEXT: s_cselect_b32 s2, 0x100, 01115; GFX8-SDAG-NEXT: v_mov_b32_e32 v0, s21116; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], s[0:1], v01117; GFX8-SDAG-NEXT: s_cselect_b32 s0, 0xffffff80, 01118; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1119; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]1120; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.51121; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.51122; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1123; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1124; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1125; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]1126; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1127; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]1128; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0x2601129; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v41130; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], s01131; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1132; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1133; GFX8-SDAG-NEXT: v_readfirstlane_b32 s0, v01134; GFX8-SDAG-NEXT: v_readfirstlane_b32 s1, v11135; GFX8-SDAG-NEXT: ; return to shader part epilog1136;1137; GFX6-GISEL-LABEL: s_sqrt_f64_afn:1138; GFX6-GISEL: ; %bb.0:1139; GFX6-GISEL-NEXT: v_mov_b32_e32 v0, 01140; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v1, 81141; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]1142; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1143; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v0, 8, v01144; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], s[0:1], v01145; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1146; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.51147; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]1148; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.51149; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1150; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1151; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1152; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1153; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1154; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1155; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff801156; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x2601157; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1158; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51159; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41160; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1161; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1162; GFX6-GISEL-NEXT: v_readfirstlane_b32 s0, v01163; GFX6-GISEL-NEXT: v_readfirstlane_b32 s1, v11164; GFX6-GISEL-NEXT: ; return to shader part epilog1165;1166; GFX8-GISEL-LABEL: s_sqrt_f64_afn:1167; GFX8-GISEL: ; %bb.0:1168; GFX8-GISEL-NEXT: v_mov_b32_e32 v0, 01169; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v1, 81170; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]1171; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1172; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v0, 8, v01173; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], s[0:1], v01174; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1175; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.51176; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]1177; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.51178; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1179; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1180; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1181; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1182; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1183; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1184; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff801185; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x2601186; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1187; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51188; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41189; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1190; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1191; GFX8-GISEL-NEXT: v_readfirstlane_b32 s0, v01192; GFX8-GISEL-NEXT: v_readfirstlane_b32 s1, v11193; GFX8-GISEL-NEXT: ; return to shader part epilog1194 %result = call afn double @llvm.sqrt.f64(double %x)1195 %cast = bitcast double %result to <2 x i32>1196 %cast.0 = extractelement <2 x i32> %cast, i32 01197 %cast.1 = extractelement <2 x i32> %cast, i32 11198 %lane.0 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.0)1199 %lane.1 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.1)1200 %insert.0 = insertelement <2 x i32> poison, i32 %lane.0, i32 01201 %insert.1 = insertelement <2 x i32> %insert.0, i32 %lane.1, i32 11202 ret <2 x i32> %insert.11203}1204 1205define amdgpu_ps <2 x i32> @s_sqrt_f64_afn_nnan_ninf(double inreg %x) {1206; GFX6-SDAG-LABEL: s_sqrt_f64_afn_nnan_ninf:1207; GFX6-SDAG: ; %bb.0:1208; GFX6-SDAG-NEXT: v_mov_b32_e32 v0, 01209; GFX6-SDAG-NEXT: v_bfrev_b32_e32 v1, 81210; GFX6-SDAG-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]1211; GFX6-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec1212; GFX6-SDAG-NEXT: s_cselect_b32 s2, 0x100, 01213; GFX6-SDAG-NEXT: v_mov_b32_e32 v0, s21214; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], s[0:1], v01215; GFX6-SDAG-NEXT: s_cselect_b32 s0, 0xffffff80, 01216; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1217; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]1218; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.51219; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.51220; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1221; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1222; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1223; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]1224; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1225; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]1226; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0x2601227; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v41228; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], s01229; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1230; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1231; GFX6-SDAG-NEXT: v_readfirstlane_b32 s0, v01232; GFX6-SDAG-NEXT: v_readfirstlane_b32 s1, v11233; GFX6-SDAG-NEXT: ; return to shader part epilog1234;1235; GFX8-SDAG-LABEL: s_sqrt_f64_afn_nnan_ninf:1236; GFX8-SDAG: ; %bb.0:1237; GFX8-SDAG-NEXT: v_mov_b32_e32 v0, 01238; GFX8-SDAG-NEXT: v_bfrev_b32_e32 v1, 81239; GFX8-SDAG-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]1240; GFX8-SDAG-NEXT: s_and_b64 s[2:3], vcc, exec1241; GFX8-SDAG-NEXT: s_cselect_b32 s2, 0x100, 01242; GFX8-SDAG-NEXT: v_mov_b32_e32 v0, s21243; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], s[0:1], v01244; GFX8-SDAG-NEXT: s_cselect_b32 s0, 0xffffff80, 01245; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1246; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]1247; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.51248; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.51249; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1250; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1251; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1252; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]1253; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1254; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]1255; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0x2601256; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v41257; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], s01258; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1259; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1260; GFX8-SDAG-NEXT: v_readfirstlane_b32 s0, v01261; GFX8-SDAG-NEXT: v_readfirstlane_b32 s1, v11262; GFX8-SDAG-NEXT: ; return to shader part epilog1263;1264; GFX6-GISEL-LABEL: s_sqrt_f64_afn_nnan_ninf:1265; GFX6-GISEL: ; %bb.0:1266; GFX6-GISEL-NEXT: v_mov_b32_e32 v0, 01267; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v1, 81268; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]1269; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1270; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v0, 8, v01271; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], s[0:1], v01272; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1273; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.51274; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]1275; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.51276; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1277; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1278; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1279; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1280; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1281; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1282; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff801283; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x2601284; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1285; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51286; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41287; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1288; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1289; GFX6-GISEL-NEXT: v_readfirstlane_b32 s0, v01290; GFX6-GISEL-NEXT: v_readfirstlane_b32 s1, v11291; GFX6-GISEL-NEXT: ; return to shader part epilog1292;1293; GFX8-GISEL-LABEL: s_sqrt_f64_afn_nnan_ninf:1294; GFX8-GISEL: ; %bb.0:1295; GFX8-GISEL-NEXT: v_mov_b32_e32 v0, 01296; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v1, 81297; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, s[0:1], v[0:1]1298; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc1299; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v0, 8, v01300; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], s[0:1], v01301; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1302; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.51303; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]1304; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.51305; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1306; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1307; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1308; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1309; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1310; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1311; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff801312; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x2601313; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1314; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51315; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41316; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1317; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1318; GFX8-GISEL-NEXT: v_readfirstlane_b32 s0, v01319; GFX8-GISEL-NEXT: v_readfirstlane_b32 s1, v11320; GFX8-GISEL-NEXT: ; return to shader part epilog1321 %result = call afn nnan ninf double @llvm.sqrt.f64(double %x)1322 %cast = bitcast double %result to <2 x i32>1323 %cast.0 = extractelement <2 x i32> %cast, i32 01324 %cast.1 = extractelement <2 x i32> %cast, i32 11325 %lane.0 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.0)1326 %lane.1 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.1)1327 %insert.0 = insertelement <2 x i32> poison, i32 %lane.0, i32 01328 %insert.1 = insertelement <2 x i32> %insert.0, i32 %lane.1, i32 11329 ret <2 x i32> %insert.11330}1331 1332define double @v_sqrt_f64_nsz(double %x) {1333; GFX6-SDAG-LABEL: v_sqrt_f64_nsz:1334; GFX6-SDAG: ; %bb.0:1335; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1336; GFX6-SDAG-NEXT: s_mov_b32 s4, 01337; GFX6-SDAG-NEXT: s_brev_b32 s5, 81338; GFX6-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]1339; GFX6-SDAG-NEXT: v_mov_b32_e32 v2, 0x1001340; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc1341; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21342; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1343; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]1344; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.51345; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.51346; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1347; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1348; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1349; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]1350; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1351; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]1352; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff801353; GFX6-SDAG-NEXT: v_mov_b32_e32 v5, 0x2601354; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1355; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51356; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41357; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1358; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1359; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]1360;1361; GFX8-SDAG-LABEL: v_sqrt_f64_nsz:1362; GFX8-SDAG: ; %bb.0:1363; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1364; GFX8-SDAG-NEXT: s_mov_b32 s4, 01365; GFX8-SDAG-NEXT: s_brev_b32 s5, 81366; GFX8-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]1367; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x1001368; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc1369; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21370; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1371; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]1372; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.51373; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.51374; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1375; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1376; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1377; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]1378; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1379; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]1380; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff801381; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x2601382; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1383; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51384; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41385; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1386; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1387; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]1388;1389; GFX6-GISEL-LABEL: v_sqrt_f64_nsz:1390; GFX6-GISEL: ; %bb.0:1391; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1392; GFX6-GISEL-NEXT: v_mov_b32_e32 v2, 01393; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v3, 81394; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]1395; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc1396; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v21397; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21398; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1399; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.51400; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]1401; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.51402; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1403; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1404; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1405; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1406; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1407; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1408; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff801409; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x2601410; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1411; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51412; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41413; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1414; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1415; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]1416;1417; GFX8-GISEL-LABEL: v_sqrt_f64_nsz:1418; GFX8-GISEL: ; %bb.0:1419; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1420; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 01421; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v3, 81422; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]1423; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc1424; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v21425; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21426; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1427; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.51428; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]1429; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.51430; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1431; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1432; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1433; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1434; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1435; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1436; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff801437; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x2601438; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1439; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51440; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41441; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1442; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1443; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]1444 %result = call nsz double @llvm.sqrt.f64(double %x)1445 ret double %result1446}1447 1448define double @v_sqrt_f64_nnan_ninf(double %x) {1449; GFX6-SDAG-LABEL: v_sqrt_f64_nnan_ninf:1450; GFX6-SDAG: ; %bb.0:1451; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1452; GFX6-SDAG-NEXT: s_mov_b32 s4, 01453; GFX6-SDAG-NEXT: s_brev_b32 s5, 81454; GFX6-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]1455; GFX6-SDAG-NEXT: v_mov_b32_e32 v2, 0x1001456; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc1457; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21458; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1459; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]1460; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.51461; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.51462; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1463; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1464; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1465; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]1466; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1467; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]1468; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff801469; GFX6-SDAG-NEXT: v_mov_b32_e32 v5, 0x2601470; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1471; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51472; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41473; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1474; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1475; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]1476;1477; GFX8-SDAG-LABEL: v_sqrt_f64_nnan_ninf:1478; GFX8-SDAG: ; %bb.0:1479; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1480; GFX8-SDAG-NEXT: s_mov_b32 s4, 01481; GFX8-SDAG-NEXT: s_brev_b32 s5, 81482; GFX8-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]1483; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x1001484; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc1485; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21486; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1487; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]1488; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.51489; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.51490; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1491; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1492; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1493; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]1494; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1495; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]1496; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff801497; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x2601498; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1499; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51500; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41501; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1502; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1503; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]1504;1505; GFX6-GISEL-LABEL: v_sqrt_f64_nnan_ninf:1506; GFX6-GISEL: ; %bb.0:1507; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1508; GFX6-GISEL-NEXT: v_mov_b32_e32 v2, 01509; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v3, 81510; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]1511; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc1512; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v21513; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21514; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1515; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.51516; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]1517; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.51518; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1519; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1520; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1521; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1522; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1523; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1524; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff801525; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x2601526; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1527; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51528; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41529; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1530; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1531; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]1532;1533; GFX8-GISEL-LABEL: v_sqrt_f64_nnan_ninf:1534; GFX8-GISEL: ; %bb.0:1535; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1536; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 01537; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v3, 81538; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]1539; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc1540; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v21541; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21542; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1543; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.51544; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]1545; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.51546; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1547; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1548; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1549; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1550; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1551; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1552; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff801553; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x2601554; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1555; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51556; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41557; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1558; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1559; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]1560 %result = call nnan ninf double @llvm.sqrt.f64(double %x)1561 ret double %result1562}1563 1564define double @v_sqrt_f64_nnan_ninf_nsz(double %x) {1565; GFX6-SDAG-LABEL: v_sqrt_f64_nnan_ninf_nsz:1566; GFX6-SDAG: ; %bb.0:1567; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1568; GFX6-SDAG-NEXT: s_mov_b32 s4, 01569; GFX6-SDAG-NEXT: s_brev_b32 s5, 81570; GFX6-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]1571; GFX6-SDAG-NEXT: v_mov_b32_e32 v2, 0x1001572; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc1573; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21574; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1575; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]1576; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.51577; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.51578; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1579; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1580; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1581; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]1582; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1583; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]1584; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff801585; GFX6-SDAG-NEXT: v_mov_b32_e32 v5, 0x2601586; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1587; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51588; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41589; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1590; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1591; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]1592;1593; GFX8-SDAG-LABEL: v_sqrt_f64_nnan_ninf_nsz:1594; GFX8-SDAG: ; %bb.0:1595; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1596; GFX8-SDAG-NEXT: s_mov_b32 s4, 01597; GFX8-SDAG-NEXT: s_brev_b32 s5, 81598; GFX8-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]1599; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x1001600; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc1601; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21602; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1603; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]1604; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.51605; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.51606; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1607; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1608; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1609; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]1610; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1611; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]1612; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff801613; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x2601614; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1615; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51616; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41617; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1618; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1619; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]1620;1621; GFX6-GISEL-LABEL: v_sqrt_f64_nnan_ninf_nsz:1622; GFX6-GISEL: ; %bb.0:1623; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1624; GFX6-GISEL-NEXT: v_mov_b32_e32 v2, 01625; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v3, 81626; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]1627; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc1628; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v21629; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21630; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1631; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.51632; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]1633; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.51634; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1635; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1636; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1637; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1638; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1639; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1640; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff801641; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x2601642; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1643; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51644; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41645; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1646; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1647; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]1648;1649; GFX8-GISEL-LABEL: v_sqrt_f64_nnan_ninf_nsz:1650; GFX8-GISEL: ; %bb.0:1651; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1652; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 01653; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v3, 81654; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]1655; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc1656; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v21657; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21658; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1659; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.51660; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]1661; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.51662; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1663; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1664; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1665; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1666; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1667; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1668; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff801669; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x2601670; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1671; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51672; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41673; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1674; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1675; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]1676 %result = call nnan ninf nsz double @llvm.sqrt.f64(double %x)1677 ret double %result1678}1679 1680define double @v_sqrt_f64_afn(double %x) {1681; GFX6-SDAG-LABEL: v_sqrt_f64_afn:1682; GFX6-SDAG: ; %bb.0:1683; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1684; GFX6-SDAG-NEXT: s_mov_b32 s4, 01685; GFX6-SDAG-NEXT: s_brev_b32 s5, 81686; GFX6-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]1687; GFX6-SDAG-NEXT: v_mov_b32_e32 v2, 0x1001688; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc1689; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21690; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1691; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]1692; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.51693; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.51694; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1695; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1696; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1697; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]1698; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1699; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]1700; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff801701; GFX6-SDAG-NEXT: v_mov_b32_e32 v5, 0x2601702; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1703; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51704; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41705; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1706; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1707; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]1708;1709; GFX8-SDAG-LABEL: v_sqrt_f64_afn:1710; GFX8-SDAG: ; %bb.0:1711; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1712; GFX8-SDAG-NEXT: s_mov_b32 s4, 01713; GFX8-SDAG-NEXT: s_brev_b32 s5, 81714; GFX8-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]1715; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x1001716; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc1717; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21718; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1719; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]1720; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.51721; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.51722; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1723; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1724; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1725; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]1726; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1727; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]1728; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff801729; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x2601730; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1731; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51732; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41733; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1734; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1735; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]1736;1737; GFX6-GISEL-LABEL: v_sqrt_f64_afn:1738; GFX6-GISEL: ; %bb.0:1739; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1740; GFX6-GISEL-NEXT: v_mov_b32_e32 v2, 01741; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v3, 81742; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]1743; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc1744; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v21745; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21746; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1747; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.51748; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]1749; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.51750; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1751; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1752; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1753; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1754; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1755; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1756; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff801757; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x2601758; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1759; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51760; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41761; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1762; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1763; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]1764;1765; GFX8-GISEL-LABEL: v_sqrt_f64_afn:1766; GFX8-GISEL: ; %bb.0:1767; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1768; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 01769; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v3, 81770; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]1771; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc1772; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v21773; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21774; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1775; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.51776; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]1777; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.51778; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1779; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1780; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1781; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1782; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1783; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1784; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff801785; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x2601786; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1787; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51788; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41789; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1790; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1791; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]1792 %result = call afn double @llvm.sqrt.f64(double %x)1793 ret double %result1794}1795 1796define double @v_sqrt_f64_afn_nsz(double %x) {1797; GFX6-SDAG-LABEL: v_sqrt_f64_afn_nsz:1798; GFX6-SDAG: ; %bb.0:1799; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1800; GFX6-SDAG-NEXT: s_mov_b32 s4, 01801; GFX6-SDAG-NEXT: s_brev_b32 s5, 81802; GFX6-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]1803; GFX6-SDAG-NEXT: v_mov_b32_e32 v2, 0x1001804; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc1805; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21806; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1807; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]1808; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.51809; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.51810; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1811; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1812; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1813; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]1814; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1815; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]1816; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff801817; GFX6-SDAG-NEXT: v_mov_b32_e32 v5, 0x2601818; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1819; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51820; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41821; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1822; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1823; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]1824;1825; GFX8-SDAG-LABEL: v_sqrt_f64_afn_nsz:1826; GFX8-SDAG: ; %bb.0:1827; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1828; GFX8-SDAG-NEXT: s_mov_b32 s4, 01829; GFX8-SDAG-NEXT: s_brev_b32 s5, 81830; GFX8-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]1831; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x1001832; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc1833; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21834; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1835; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]1836; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.51837; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.51838; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1839; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1840; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1841; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]1842; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]1843; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]1844; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff801845; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x2601846; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1847; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51848; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41849; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1850; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1851; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]1852;1853; GFX6-GISEL-LABEL: v_sqrt_f64_afn_nsz:1854; GFX6-GISEL: ; %bb.0:1855; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1856; GFX6-GISEL-NEXT: v_mov_b32_e32 v2, 01857; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v3, 81858; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]1859; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc1860; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v21861; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21862; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1863; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.51864; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]1865; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.51866; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1867; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1868; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1869; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1870; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1871; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1872; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff801873; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x2601874; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1875; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51876; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41877; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1878; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1879; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]1880;1881; GFX8-GISEL-LABEL: v_sqrt_f64_afn_nsz:1882; GFX8-GISEL: ; %bb.0:1883; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1884; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 01885; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v3, 81886; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]1887; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc1888; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v21889; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v21890; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]1891; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.51892; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]1893; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.51894; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]1895; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]1896; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1897; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1898; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]1899; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]1900; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff801901; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x2601902; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc1903; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v51904; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41905; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc1906; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc1907; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]1908 %result = call afn nsz double @llvm.sqrt.f64(double %x)1909 ret double %result1910}1911 1912define <2 x double> @v_sqrt_v2f64_afn(<2 x double> %x) {1913; GFX6-SDAG-LABEL: v_sqrt_v2f64_afn:1914; GFX6-SDAG: ; %bb.0:1915; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1916; GFX6-SDAG-NEXT: s_mov_b32 s4, 01917; GFX6-SDAG-NEXT: s_brev_b32 s5, 81918; GFX6-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]1919; GFX6-SDAG-NEXT: v_cmp_gt_f64_e64 s[4:5], s[4:5], v[2:3]1920; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0x1001921; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v5, 0, v4, vcc1922; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, v4, s[4:5]1923; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v51924; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41925; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]1926; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]1927; GFX6-SDAG-NEXT: v_mul_f64 v[8:9], v[0:1], v[4:5]1928; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.51929; GFX6-SDAG-NEXT: v_mul_f64 v[10:11], v[2:3], v[6:7]1930; GFX6-SDAG-NEXT: v_mul_f64 v[6:7], v[6:7], 0.51931; GFX6-SDAG-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.51932; GFX6-SDAG-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.51933; GFX6-SDAG-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]1934; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]1935; GFX6-SDAG-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]1936; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]1937; GFX6-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[0:1]1938; GFX6-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[2:3]1939; GFX6-SDAG-NEXT: v_fma_f64 v[8:9], v[12:13], v[4:5], v[8:9]1940; GFX6-SDAG-NEXT: v_fma_f64 v[10:11], v[14:15], v[6:7], v[10:11]1941; GFX6-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[0:1]1942; GFX6-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[2:3]1943; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[12:13], v[4:5], v[8:9]1944; GFX6-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff801945; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], v[14:15], v[6:7], v[10:11]1946; GFX6-SDAG-NEXT: v_mov_b32_e32 v9, 0x2601947; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc1948; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]1949; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v91950; GFX6-SDAG-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v91951; GFX6-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v101952; GFX6-SDAG-NEXT: v_ldexp_f64 v[6:7], v[6:7], v81953; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc1954; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc1955; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5]1956; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5]1957; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]1958;1959; GFX8-SDAG-LABEL: v_sqrt_v2f64_afn:1960; GFX8-SDAG: ; %bb.0:1961; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1962; GFX8-SDAG-NEXT: s_mov_b32 s4, 01963; GFX8-SDAG-NEXT: s_brev_b32 s5, 81964; GFX8-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]1965; GFX8-SDAG-NEXT: v_cmp_gt_f64_e64 s[4:5], s[4:5], v[2:3]1966; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0x1001967; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v5, 0, v4, vcc1968; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, v4, s[4:5]1969; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v51970; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v41971; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]1972; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]1973; GFX8-SDAG-NEXT: v_mul_f64 v[8:9], v[0:1], v[4:5]1974; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.51975; GFX8-SDAG-NEXT: v_mul_f64 v[10:11], v[2:3], v[6:7]1976; GFX8-SDAG-NEXT: v_mul_f64 v[6:7], v[6:7], 0.51977; GFX8-SDAG-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.51978; GFX8-SDAG-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.51979; GFX8-SDAG-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]1980; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]1981; GFX8-SDAG-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]1982; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]1983; GFX8-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[0:1]1984; GFX8-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[2:3]1985; GFX8-SDAG-NEXT: v_fma_f64 v[8:9], v[12:13], v[4:5], v[8:9]1986; GFX8-SDAG-NEXT: v_fma_f64 v[10:11], v[14:15], v[6:7], v[10:11]1987; GFX8-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[0:1]1988; GFX8-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[2:3]1989; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[12:13], v[4:5], v[8:9]1990; GFX8-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff801991; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], v[14:15], v[6:7], v[10:11]1992; GFX8-SDAG-NEXT: v_mov_b32_e32 v9, 0x2601993; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc1994; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]1995; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v91996; GFX8-SDAG-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v91997; GFX8-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v101998; GFX8-SDAG-NEXT: v_ldexp_f64 v[6:7], v[6:7], v81999; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc2000; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc2001; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5]2002; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5]2003; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]2004;2005; GFX6-GISEL-LABEL: v_sqrt_v2f64_afn:2006; GFX6-GISEL: ; %bb.0:2007; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2008; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 02009; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v5, 82010; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[4:5]2011; GFX6-GISEL-NEXT: v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]2012; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, 1, vcc2013; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, 1, s[4:5]2014; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v6, 8, v62015; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v4, 8, v42016; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v62017; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42018; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]2019; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]2020; GFX6-GISEL-NEXT: v_mul_f64 v[8:9], v[4:5], 0.52021; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[0:1], v[4:5]2022; GFX6-GISEL-NEXT: v_mul_f64 v[10:11], v[6:7], 0.52023; GFX6-GISEL-NEXT: v_mul_f64 v[6:7], v[2:3], v[6:7]2024; GFX6-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.52025; GFX6-GISEL-NEXT: v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.52026; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]2027; GFX6-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]2028; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]2029; GFX6-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]2030; GFX6-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]2031; GFX6-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]2032; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]2033; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]2034; GFX6-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]2035; GFX6-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]2036; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]2037; GFX6-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff802038; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]2039; GFX6-GISEL-NEXT: v_mov_b32_e32 v9, 0x2602040; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc2041; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]2042; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v92043; GFX6-GISEL-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v92044; GFX6-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v102045; GFX6-GISEL-NEXT: v_ldexp_f64 v[6:7], v[6:7], v82046; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc2047; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc2048; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5]2049; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5]2050; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]2051;2052; GFX8-GISEL-LABEL: v_sqrt_v2f64_afn:2053; GFX8-GISEL: ; %bb.0:2054; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2055; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 02056; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v5, 82057; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[4:5]2058; GFX8-GISEL-NEXT: v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]2059; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, 1, vcc2060; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, 1, s[4:5]2061; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v6, 8, v62062; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v4, 8, v42063; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v62064; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42065; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]2066; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]2067; GFX8-GISEL-NEXT: v_mul_f64 v[8:9], v[4:5], 0.52068; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[0:1], v[4:5]2069; GFX8-GISEL-NEXT: v_mul_f64 v[10:11], v[6:7], 0.52070; GFX8-GISEL-NEXT: v_mul_f64 v[6:7], v[2:3], v[6:7]2071; GFX8-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.52072; GFX8-GISEL-NEXT: v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.52073; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]2074; GFX8-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]2075; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]2076; GFX8-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]2077; GFX8-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]2078; GFX8-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]2079; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]2080; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]2081; GFX8-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]2082; GFX8-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]2083; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]2084; GFX8-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff802085; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]2086; GFX8-GISEL-NEXT: v_mov_b32_e32 v9, 0x2602087; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc2088; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]2089; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v92090; GFX8-GISEL-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v92091; GFX8-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v102092; GFX8-GISEL-NEXT: v_ldexp_f64 v[6:7], v[6:7], v82093; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc2094; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc2095; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5]2096; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5]2097; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]2098 %result = call afn <2 x double> @llvm.sqrt.v2f64(<2 x double> %x)2099 ret <2 x double> %result2100}2101 2102define double @v_sqrt_f64_afn_nnan(double %x) {2103; GFX6-SDAG-LABEL: v_sqrt_f64_afn_nnan:2104; GFX6-SDAG: ; %bb.0:2105; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2106; GFX6-SDAG-NEXT: s_mov_b32 s4, 02107; GFX6-SDAG-NEXT: s_brev_b32 s5, 82108; GFX6-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]2109; GFX6-SDAG-NEXT: v_mov_b32_e32 v2, 0x1002110; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc2111; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22112; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2113; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]2114; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.52115; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.52116; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2117; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2118; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2119; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]2120; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2121; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]2122; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff802123; GFX6-SDAG-NEXT: v_mov_b32_e32 v5, 0x2602124; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2125; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52126; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42127; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2128; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2129; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]2130;2131; GFX8-SDAG-LABEL: v_sqrt_f64_afn_nnan:2132; GFX8-SDAG: ; %bb.0:2133; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2134; GFX8-SDAG-NEXT: s_mov_b32 s4, 02135; GFX8-SDAG-NEXT: s_brev_b32 s5, 82136; GFX8-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]2137; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x1002138; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc2139; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22140; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2141; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]2142; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.52143; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.52144; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2145; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2146; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2147; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]2148; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2149; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]2150; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff802151; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x2602152; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2153; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52154; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42155; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2156; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2157; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]2158;2159; GFX6-GISEL-LABEL: v_sqrt_f64_afn_nnan:2160; GFX6-GISEL: ; %bb.0:2161; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2162; GFX6-GISEL-NEXT: v_mov_b32_e32 v2, 02163; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v3, 82164; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]2165; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc2166; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v22167; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22168; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2169; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.52170; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]2171; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.52172; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2173; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2174; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2175; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2176; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2177; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2178; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff802179; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x2602180; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2181; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52182; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42183; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2184; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2185; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]2186;2187; GFX8-GISEL-LABEL: v_sqrt_f64_afn_nnan:2188; GFX8-GISEL: ; %bb.0:2189; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2190; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 02191; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v3, 82192; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]2193; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc2194; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v22195; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22196; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2197; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.52198; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]2199; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.52200; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2201; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2202; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2203; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2204; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2205; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2206; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff802207; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x2602208; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2209; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52210; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42211; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2212; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2213; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]2214 %result = call afn nnan double @llvm.sqrt.f64(double %x)2215 ret double %result2216}2217 2218define double @v_sqrt_f64_fabs_afn_ninf(double %x) {2219; GFX6-SDAG-LABEL: v_sqrt_f64_fabs_afn_ninf:2220; GFX6-SDAG: ; %bb.0:2221; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2222; GFX6-SDAG-NEXT: s_mov_b32 s4, 02223; GFX6-SDAG-NEXT: s_brev_b32 s5, 82224; GFX6-SDAG-NEXT: v_cmp_lt_f64_e64 vcc, |v[0:1]|, s[4:5]2225; GFX6-SDAG-NEXT: v_mov_b32_e32 v2, 0x1002226; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc2227; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], |v[0:1]|, v22228; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2229; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]2230; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.52231; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.52232; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2233; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2234; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2235; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]2236; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2237; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]2238; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff802239; GFX6-SDAG-NEXT: v_mov_b32_e32 v5, 0x2602240; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2241; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52242; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42243; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2244; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2245; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]2246;2247; GFX8-SDAG-LABEL: v_sqrt_f64_fabs_afn_ninf:2248; GFX8-SDAG: ; %bb.0:2249; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2250; GFX8-SDAG-NEXT: s_mov_b32 s4, 02251; GFX8-SDAG-NEXT: s_brev_b32 s5, 82252; GFX8-SDAG-NEXT: v_cmp_lt_f64_e64 vcc, |v[0:1]|, s[4:5]2253; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x1002254; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc2255; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], |v[0:1]|, v22256; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2257; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]2258; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.52259; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.52260; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2261; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2262; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2263; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]2264; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2265; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]2266; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff802267; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x2602268; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2269; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52270; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42271; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2272; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2273; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]2274;2275; GFX6-GISEL-LABEL: v_sqrt_f64_fabs_afn_ninf:2276; GFX6-GISEL: ; %bb.0:2277; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2278; GFX6-GISEL-NEXT: v_mov_b32_e32 v2, 02279; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v3, 82280; GFX6-GISEL-NEXT: v_cmp_lt_f64_e64 vcc, |v[0:1]|, v[2:3]2281; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc2282; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v22283; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], |v[0:1]|, v22284; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2285; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.52286; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]2287; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.52288; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2289; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2290; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2291; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2292; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2293; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2294; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff802295; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x2602296; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2297; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52298; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42299; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2300; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2301; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]2302;2303; GFX8-GISEL-LABEL: v_sqrt_f64_fabs_afn_ninf:2304; GFX8-GISEL: ; %bb.0:2305; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2306; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 02307; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v3, 82308; GFX8-GISEL-NEXT: v_cmp_lt_f64_e64 vcc, |v[0:1]|, v[2:3]2309; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc2310; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v22311; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], |v[0:1]|, v22312; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2313; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.52314; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]2315; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.52316; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2317; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2318; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2319; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2320; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2321; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2322; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff802323; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x2602324; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2325; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52326; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42327; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2328; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2329; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]2330 %fabs = call double @llvm.fabs.f64(double %x)2331 %result = call afn ninf double @llvm.sqrt.f64(double %fabs)2332 ret double %result2333}2334 2335define double @v_sqrt_f64_afn_nnan_ninf(double %x) {2336; GFX6-SDAG-LABEL: v_sqrt_f64_afn_nnan_ninf:2337; GFX6-SDAG: ; %bb.0:2338; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2339; GFX6-SDAG-NEXT: s_mov_b32 s4, 02340; GFX6-SDAG-NEXT: s_brev_b32 s5, 82341; GFX6-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]2342; GFX6-SDAG-NEXT: v_mov_b32_e32 v2, 0x1002343; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc2344; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22345; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2346; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]2347; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.52348; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.52349; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2350; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2351; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2352; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]2353; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2354; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]2355; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff802356; GFX6-SDAG-NEXT: v_mov_b32_e32 v5, 0x2602357; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2358; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52359; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42360; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2361; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2362; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]2363;2364; GFX8-SDAG-LABEL: v_sqrt_f64_afn_nnan_ninf:2365; GFX8-SDAG: ; %bb.0:2366; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2367; GFX8-SDAG-NEXT: s_mov_b32 s4, 02368; GFX8-SDAG-NEXT: s_brev_b32 s5, 82369; GFX8-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]2370; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x1002371; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc2372; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22373; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2374; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]2375; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.52376; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.52377; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2378; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2379; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2380; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]2381; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2382; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]2383; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff802384; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x2602385; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2386; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52387; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42388; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2389; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2390; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]2391;2392; GFX6-GISEL-LABEL: v_sqrt_f64_afn_nnan_ninf:2393; GFX6-GISEL: ; %bb.0:2394; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2395; GFX6-GISEL-NEXT: v_mov_b32_e32 v2, 02396; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v3, 82397; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]2398; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc2399; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v22400; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22401; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2402; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.52403; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]2404; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.52405; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2406; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2407; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2408; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2409; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2410; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2411; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff802412; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x2602413; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2414; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52415; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42416; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2417; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2418; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]2419;2420; GFX8-GISEL-LABEL: v_sqrt_f64_afn_nnan_ninf:2421; GFX8-GISEL: ; %bb.0:2422; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2423; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 02424; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v3, 82425; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]2426; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc2427; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v22428; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22429; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2430; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.52431; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]2432; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.52433; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2434; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2435; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2436; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2437; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2438; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2439; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff802440; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x2602441; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2442; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52443; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42444; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2445; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2446; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]2447 %result = call afn nnan ninf double @llvm.sqrt.f64(double %x)2448 ret double %result2449}2450 2451define <2 x double> @v_sqrt_v2f64_afn_nnan_ninf(<2 x double> %x) {2452; GFX6-SDAG-LABEL: v_sqrt_v2f64_afn_nnan_ninf:2453; GFX6-SDAG: ; %bb.0:2454; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2455; GFX6-SDAG-NEXT: s_mov_b32 s4, 02456; GFX6-SDAG-NEXT: s_brev_b32 s5, 82457; GFX6-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]2458; GFX6-SDAG-NEXT: v_cmp_gt_f64_e64 s[4:5], s[4:5], v[2:3]2459; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0x1002460; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v5, 0, v4, vcc2461; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, v4, s[4:5]2462; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v52463; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42464; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]2465; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]2466; GFX6-SDAG-NEXT: v_mul_f64 v[8:9], v[0:1], v[4:5]2467; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.52468; GFX6-SDAG-NEXT: v_mul_f64 v[10:11], v[2:3], v[6:7]2469; GFX6-SDAG-NEXT: v_mul_f64 v[6:7], v[6:7], 0.52470; GFX6-SDAG-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.52471; GFX6-SDAG-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.52472; GFX6-SDAG-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]2473; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]2474; GFX6-SDAG-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]2475; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]2476; GFX6-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[0:1]2477; GFX6-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[2:3]2478; GFX6-SDAG-NEXT: v_fma_f64 v[8:9], v[12:13], v[4:5], v[8:9]2479; GFX6-SDAG-NEXT: v_fma_f64 v[10:11], v[14:15], v[6:7], v[10:11]2480; GFX6-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[0:1]2481; GFX6-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[2:3]2482; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[12:13], v[4:5], v[8:9]2483; GFX6-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff802484; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], v[14:15], v[6:7], v[10:11]2485; GFX6-SDAG-NEXT: v_mov_b32_e32 v9, 0x2602486; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc2487; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]2488; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v92489; GFX6-SDAG-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v92490; GFX6-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v102491; GFX6-SDAG-NEXT: v_ldexp_f64 v[6:7], v[6:7], v82492; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc2493; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc2494; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5]2495; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5]2496; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]2497;2498; GFX8-SDAG-LABEL: v_sqrt_v2f64_afn_nnan_ninf:2499; GFX8-SDAG: ; %bb.0:2500; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2501; GFX8-SDAG-NEXT: s_mov_b32 s4, 02502; GFX8-SDAG-NEXT: s_brev_b32 s5, 82503; GFX8-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]2504; GFX8-SDAG-NEXT: v_cmp_gt_f64_e64 s[4:5], s[4:5], v[2:3]2505; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0x1002506; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v5, 0, v4, vcc2507; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, v4, s[4:5]2508; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v52509; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42510; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]2511; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]2512; GFX8-SDAG-NEXT: v_mul_f64 v[8:9], v[0:1], v[4:5]2513; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.52514; GFX8-SDAG-NEXT: v_mul_f64 v[10:11], v[2:3], v[6:7]2515; GFX8-SDAG-NEXT: v_mul_f64 v[6:7], v[6:7], 0.52516; GFX8-SDAG-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.52517; GFX8-SDAG-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.52518; GFX8-SDAG-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]2519; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]2520; GFX8-SDAG-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]2521; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]2522; GFX8-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[0:1]2523; GFX8-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[2:3]2524; GFX8-SDAG-NEXT: v_fma_f64 v[8:9], v[12:13], v[4:5], v[8:9]2525; GFX8-SDAG-NEXT: v_fma_f64 v[10:11], v[14:15], v[6:7], v[10:11]2526; GFX8-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[0:1]2527; GFX8-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[2:3]2528; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[12:13], v[4:5], v[8:9]2529; GFX8-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff802530; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], v[14:15], v[6:7], v[10:11]2531; GFX8-SDAG-NEXT: v_mov_b32_e32 v9, 0x2602532; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc2533; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]2534; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v92535; GFX8-SDAG-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v92536; GFX8-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v102537; GFX8-SDAG-NEXT: v_ldexp_f64 v[6:7], v[6:7], v82538; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc2539; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc2540; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5]2541; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5]2542; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]2543;2544; GFX6-GISEL-LABEL: v_sqrt_v2f64_afn_nnan_ninf:2545; GFX6-GISEL: ; %bb.0:2546; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2547; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 02548; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v5, 82549; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[4:5]2550; GFX6-GISEL-NEXT: v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]2551; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, 1, vcc2552; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, 1, s[4:5]2553; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v6, 8, v62554; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v4, 8, v42555; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v62556; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42557; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]2558; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]2559; GFX6-GISEL-NEXT: v_mul_f64 v[8:9], v[4:5], 0.52560; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[0:1], v[4:5]2561; GFX6-GISEL-NEXT: v_mul_f64 v[10:11], v[6:7], 0.52562; GFX6-GISEL-NEXT: v_mul_f64 v[6:7], v[2:3], v[6:7]2563; GFX6-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.52564; GFX6-GISEL-NEXT: v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.52565; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]2566; GFX6-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]2567; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]2568; GFX6-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]2569; GFX6-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]2570; GFX6-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]2571; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]2572; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]2573; GFX6-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]2574; GFX6-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]2575; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]2576; GFX6-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff802577; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]2578; GFX6-GISEL-NEXT: v_mov_b32_e32 v9, 0x2602579; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc2580; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]2581; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v92582; GFX6-GISEL-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v92583; GFX6-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v102584; GFX6-GISEL-NEXT: v_ldexp_f64 v[6:7], v[6:7], v82585; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc2586; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc2587; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5]2588; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5]2589; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]2590;2591; GFX8-GISEL-LABEL: v_sqrt_v2f64_afn_nnan_ninf:2592; GFX8-GISEL: ; %bb.0:2593; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2594; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 02595; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v5, 82596; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[4:5]2597; GFX8-GISEL-NEXT: v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]2598; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, 1, vcc2599; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, 1, s[4:5]2600; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v6, 8, v62601; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v4, 8, v42602; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v62603; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42604; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]2605; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]2606; GFX8-GISEL-NEXT: v_mul_f64 v[8:9], v[4:5], 0.52607; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[0:1], v[4:5]2608; GFX8-GISEL-NEXT: v_mul_f64 v[10:11], v[6:7], 0.52609; GFX8-GISEL-NEXT: v_mul_f64 v[6:7], v[2:3], v[6:7]2610; GFX8-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.52611; GFX8-GISEL-NEXT: v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.52612; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]2613; GFX8-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]2614; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]2615; GFX8-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]2616; GFX8-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]2617; GFX8-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]2618; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]2619; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]2620; GFX8-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]2621; GFX8-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]2622; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]2623; GFX8-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff802624; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]2625; GFX8-GISEL-NEXT: v_mov_b32_e32 v9, 0x2602626; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc2627; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]2628; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v92629; GFX8-GISEL-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v92630; GFX8-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v102631; GFX8-GISEL-NEXT: v_ldexp_f64 v[6:7], v[6:7], v82632; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc2633; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc2634; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5]2635; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5]2636; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]2637 %result = call afn nnan ninf <2 x double> @llvm.sqrt.v2f64(<2 x double> %x)2638 ret <2 x double> %result2639}2640 2641define double @v_sqrt_f64_afn_nnan_ninf_nsz(double %x) {2642; GFX6-SDAG-LABEL: v_sqrt_f64_afn_nnan_ninf_nsz:2643; GFX6-SDAG: ; %bb.0:2644; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2645; GFX6-SDAG-NEXT: s_mov_b32 s4, 02646; GFX6-SDAG-NEXT: s_brev_b32 s5, 82647; GFX6-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]2648; GFX6-SDAG-NEXT: v_mov_b32_e32 v2, 0x1002649; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc2650; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22651; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2652; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]2653; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.52654; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.52655; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2656; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2657; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2658; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]2659; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2660; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]2661; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff802662; GFX6-SDAG-NEXT: v_mov_b32_e32 v5, 0x2602663; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2664; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52665; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42666; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2667; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2668; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]2669;2670; GFX8-SDAG-LABEL: v_sqrt_f64_afn_nnan_ninf_nsz:2671; GFX8-SDAG: ; %bb.0:2672; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2673; GFX8-SDAG-NEXT: s_mov_b32 s4, 02674; GFX8-SDAG-NEXT: s_brev_b32 s5, 82675; GFX8-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]2676; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x1002677; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc2678; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22679; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2680; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]2681; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.52682; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.52683; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2684; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2685; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2686; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]2687; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2688; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]2689; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff802690; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x2602691; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2692; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52693; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42694; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2695; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2696; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]2697;2698; GFX6-GISEL-LABEL: v_sqrt_f64_afn_nnan_ninf_nsz:2699; GFX6-GISEL: ; %bb.0:2700; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2701; GFX6-GISEL-NEXT: v_mov_b32_e32 v2, 02702; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v3, 82703; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]2704; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc2705; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v22706; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22707; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2708; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.52709; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]2710; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.52711; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2712; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2713; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2714; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2715; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2716; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2717; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff802718; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x2602719; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2720; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52721; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42722; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2723; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2724; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]2725;2726; GFX8-GISEL-LABEL: v_sqrt_f64_afn_nnan_ninf_nsz:2727; GFX8-GISEL: ; %bb.0:2728; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2729; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 02730; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v3, 82731; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]2732; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc2733; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v22734; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22735; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2736; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.52737; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]2738; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.52739; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2740; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2741; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2742; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2743; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2744; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2745; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff802746; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x2602747; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2748; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52749; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42750; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2751; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2752; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]2753 %result = call afn nnan ninf nsz double @llvm.sqrt.f64(double %x)2754 ret double %result2755}2756 2757define double @v_sqrt_f64__enough_unsafe_attrs(double %x) #3 {2758; GFX6-SDAG-LABEL: v_sqrt_f64__enough_unsafe_attrs:2759; GFX6-SDAG: ; %bb.0:2760; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2761; GFX6-SDAG-NEXT: s_mov_b32 s4, 02762; GFX6-SDAG-NEXT: s_brev_b32 s5, 82763; GFX6-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]2764; GFX6-SDAG-NEXT: v_mov_b32_e32 v2, 0x1002765; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc2766; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22767; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2768; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]2769; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.52770; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.52771; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2772; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2773; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2774; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]2775; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2776; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]2777; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff802778; GFX6-SDAG-NEXT: v_mov_b32_e32 v5, 0x2602779; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2780; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52781; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42782; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2783; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2784; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]2785;2786; GFX8-SDAG-LABEL: v_sqrt_f64__enough_unsafe_attrs:2787; GFX8-SDAG: ; %bb.0:2788; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2789; GFX8-SDAG-NEXT: s_mov_b32 s4, 02790; GFX8-SDAG-NEXT: s_brev_b32 s5, 82791; GFX8-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]2792; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x1002793; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc2794; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22795; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2796; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]2797; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.52798; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.52799; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2800; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2801; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2802; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]2803; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2804; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]2805; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff802806; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x2602807; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2808; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52809; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42810; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2811; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2812; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]2813;2814; GFX6-GISEL-LABEL: v_sqrt_f64__enough_unsafe_attrs:2815; GFX6-GISEL: ; %bb.0:2816; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2817; GFX6-GISEL-NEXT: v_mov_b32_e32 v2, 02818; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v3, 82819; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]2820; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc2821; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v22822; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22823; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2824; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.52825; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]2826; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.52827; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2828; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2829; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2830; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2831; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2832; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2833; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff802834; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x2602835; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2836; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52837; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42838; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2839; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2840; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]2841;2842; GFX8-GISEL-LABEL: v_sqrt_f64__enough_unsafe_attrs:2843; GFX8-GISEL: ; %bb.0:2844; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2845; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 02846; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v3, 82847; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]2848; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc2849; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v22850; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22851; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2852; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.52853; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]2854; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.52855; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2856; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2857; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2858; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2859; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2860; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2861; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff802862; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x2602863; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2864; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52865; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42866; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2867; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2868; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]2869 %result = call nsz double @llvm.sqrt.f64(double %x)2870 ret double %result2871}2872 2873define double @v_sqrt_f64__unsafe_attr(double %x) {2874; GFX6-SDAG-LABEL: v_sqrt_f64__unsafe_attr:2875; GFX6-SDAG: ; %bb.0:2876; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2877; GFX6-SDAG-NEXT: s_mov_b32 s4, 02878; GFX6-SDAG-NEXT: s_brev_b32 s5, 82879; GFX6-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]2880; GFX6-SDAG-NEXT: v_mov_b32_e32 v2, 0x1002881; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc2882; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22883; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2884; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]2885; GFX6-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.52886; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.52887; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2888; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2889; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2890; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]2891; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2892; GFX6-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]2893; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff802894; GFX6-SDAG-NEXT: v_mov_b32_e32 v5, 0x2602895; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2896; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52897; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42898; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2899; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2900; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]2901;2902; GFX8-SDAG-LABEL: v_sqrt_f64__unsafe_attr:2903; GFX8-SDAG: ; %bb.0:2904; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2905; GFX8-SDAG-NEXT: s_mov_b32 s4, 02906; GFX8-SDAG-NEXT: s_brev_b32 s5, 82907; GFX8-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]2908; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x1002909; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v2, 0, v2, vcc2910; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22911; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2912; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[0:1], v[2:3]2913; GFX8-SDAG-NEXT: v_mul_f64 v[2:3], v[2:3], 0.52914; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[2:3], v[4:5], 0.52915; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2916; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2917; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2918; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[6:7], v[2:3], v[4:5]2919; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], -v[4:5], v[4:5], v[0:1]2920; GFX8-SDAG-NEXT: v_fma_f64 v[2:3], v[6:7], v[2:3], v[4:5]2921; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0xffffff802922; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x2602923; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2924; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52925; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42926; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2927; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2928; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]2929;2930; GFX6-GISEL-LABEL: v_sqrt_f64__unsafe_attr:2931; GFX6-GISEL: ; %bb.0:2932; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2933; GFX6-GISEL-NEXT: v_mov_b32_e32 v2, 02934; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v3, 82935; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]2936; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc2937; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v22938; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22939; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2940; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.52941; GFX6-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]2942; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.52943; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2944; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2945; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2946; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2947; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2948; GFX6-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2949; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff802950; GFX6-GISEL-NEXT: v_mov_b32_e32 v5, 0x2602951; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2952; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52953; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42954; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2955; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2956; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]2957;2958; GFX8-GISEL-LABEL: v_sqrt_f64__unsafe_attr:2959; GFX8-GISEL: ; %bb.0:2960; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2961; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 02962; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v3, 82963; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[2:3]2964; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, 0, 1, vcc2965; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v2, 8, v22966; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v22967; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[2:3], v[0:1]2968; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[2:3], 0.52969; GFX8-GISEL-NEXT: v_mul_f64 v[2:3], v[0:1], v[2:3]2970; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[4:5], v[2:3], 0.52971; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[2:3], v[6:7], v[2:3]2972; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[6:7], v[4:5]2973; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2974; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2975; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], -v[2:3], v[2:3], v[0:1]2976; GFX8-GISEL-NEXT: v_fma_f64 v[2:3], v[6:7], v[4:5], v[2:3]2977; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0xffffff802978; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0x2602979; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v4, 0, v4, vcc2980; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v52981; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v42982; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v2, v0, vcc2983; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v3, v1, vcc2984; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]2985 %result = call nsz double @llvm.sqrt.f64(double %x)2986 ret double %result2987}2988 2989define <2 x double> @v_sqrt_v2f64(<2 x double> %x) {2990; GFX6-SDAG-LABEL: v_sqrt_v2f64:2991; GFX6-SDAG: ; %bb.0:2992; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2993; GFX6-SDAG-NEXT: s_mov_b32 s4, 02994; GFX6-SDAG-NEXT: s_brev_b32 s5, 82995; GFX6-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]2996; GFX6-SDAG-NEXT: v_cmp_gt_f64_e64 s[4:5], s[4:5], v[2:3]2997; GFX6-SDAG-NEXT: v_mov_b32_e32 v4, 0x1002998; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v5, 0, v4, vcc2999; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, v4, s[4:5]3000; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v53001; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v43002; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]3003; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]3004; GFX6-SDAG-NEXT: v_mul_f64 v[8:9], v[0:1], v[4:5]3005; GFX6-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.53006; GFX6-SDAG-NEXT: v_mul_f64 v[10:11], v[2:3], v[6:7]3007; GFX6-SDAG-NEXT: v_mul_f64 v[6:7], v[6:7], 0.53008; GFX6-SDAG-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.53009; GFX6-SDAG-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.53010; GFX6-SDAG-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]3011; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]3012; GFX6-SDAG-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]3013; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]3014; GFX6-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[0:1]3015; GFX6-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[2:3]3016; GFX6-SDAG-NEXT: v_fma_f64 v[8:9], v[12:13], v[4:5], v[8:9]3017; GFX6-SDAG-NEXT: v_fma_f64 v[10:11], v[14:15], v[6:7], v[10:11]3018; GFX6-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[0:1]3019; GFX6-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[2:3]3020; GFX6-SDAG-NEXT: v_fma_f64 v[4:5], v[12:13], v[4:5], v[8:9]3021; GFX6-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff803022; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], v[14:15], v[6:7], v[10:11]3023; GFX6-SDAG-NEXT: v_mov_b32_e32 v9, 0x2603024; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc3025; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]3026; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v93027; GFX6-SDAG-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v93028; GFX6-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v103029; GFX6-SDAG-NEXT: v_ldexp_f64 v[6:7], v[6:7], v83030; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc3031; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc3032; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5]3033; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5]3034; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]3035;3036; GFX8-SDAG-LABEL: v_sqrt_v2f64:3037; GFX8-SDAG: ; %bb.0:3038; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3039; GFX8-SDAG-NEXT: s_mov_b32 s4, 03040; GFX8-SDAG-NEXT: s_brev_b32 s5, 83041; GFX8-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[4:5], v[0:1]3042; GFX8-SDAG-NEXT: v_cmp_gt_f64_e64 s[4:5], s[4:5], v[2:3]3043; GFX8-SDAG-NEXT: v_mov_b32_e32 v4, 0x1003044; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v5, 0, v4, vcc3045; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v4, 0, v4, s[4:5]3046; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v53047; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v43048; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]3049; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]3050; GFX8-SDAG-NEXT: v_mul_f64 v[8:9], v[0:1], v[4:5]3051; GFX8-SDAG-NEXT: v_mul_f64 v[4:5], v[4:5], 0.53052; GFX8-SDAG-NEXT: v_mul_f64 v[10:11], v[2:3], v[6:7]3053; GFX8-SDAG-NEXT: v_mul_f64 v[6:7], v[6:7], 0.53054; GFX8-SDAG-NEXT: v_fma_f64 v[12:13], -v[4:5], v[8:9], 0.53055; GFX8-SDAG-NEXT: v_fma_f64 v[14:15], -v[6:7], v[10:11], 0.53056; GFX8-SDAG-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]3057; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]3058; GFX8-SDAG-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]3059; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]3060; GFX8-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[0:1]3061; GFX8-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[2:3]3062; GFX8-SDAG-NEXT: v_fma_f64 v[8:9], v[12:13], v[4:5], v[8:9]3063; GFX8-SDAG-NEXT: v_fma_f64 v[10:11], v[14:15], v[6:7], v[10:11]3064; GFX8-SDAG-NEXT: v_fma_f64 v[12:13], -v[8:9], v[8:9], v[0:1]3065; GFX8-SDAG-NEXT: v_fma_f64 v[14:15], -v[10:11], v[10:11], v[2:3]3066; GFX8-SDAG-NEXT: v_fma_f64 v[4:5], v[12:13], v[4:5], v[8:9]3067; GFX8-SDAG-NEXT: v_mov_b32_e32 v8, 0xffffff803068; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], v[14:15], v[6:7], v[10:11]3069; GFX8-SDAG-NEXT: v_mov_b32_e32 v9, 0x2603070; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc3071; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]3072; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v93073; GFX8-SDAG-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v93074; GFX8-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v103075; GFX8-SDAG-NEXT: v_ldexp_f64 v[6:7], v[6:7], v83076; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc3077; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc3078; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5]3079; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5]3080; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]3081;3082; GFX6-GISEL-LABEL: v_sqrt_v2f64:3083; GFX6-GISEL: ; %bb.0:3084; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3085; GFX6-GISEL-NEXT: v_mov_b32_e32 v4, 03086; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v5, 83087; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[4:5]3088; GFX6-GISEL-NEXT: v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]3089; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, 1, vcc3090; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, 1, s[4:5]3091; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v6, 8, v63092; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v4, 8, v43093; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v63094; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v43095; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]3096; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]3097; GFX6-GISEL-NEXT: v_mul_f64 v[8:9], v[4:5], 0.53098; GFX6-GISEL-NEXT: v_mul_f64 v[4:5], v[0:1], v[4:5]3099; GFX6-GISEL-NEXT: v_mul_f64 v[10:11], v[6:7], 0.53100; GFX6-GISEL-NEXT: v_mul_f64 v[6:7], v[2:3], v[6:7]3101; GFX6-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.53102; GFX6-GISEL-NEXT: v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.53103; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]3104; GFX6-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]3105; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]3106; GFX6-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]3107; GFX6-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]3108; GFX6-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]3109; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]3110; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]3111; GFX6-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]3112; GFX6-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]3113; GFX6-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]3114; GFX6-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff803115; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]3116; GFX6-GISEL-NEXT: v_mov_b32_e32 v9, 0x2603117; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc3118; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]3119; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v93120; GFX6-GISEL-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v93121; GFX6-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v103122; GFX6-GISEL-NEXT: v_ldexp_f64 v[6:7], v[6:7], v83123; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc3124; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc3125; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5]3126; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5]3127; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]3128;3129; GFX8-GISEL-LABEL: v_sqrt_v2f64:3130; GFX8-GISEL: ; %bb.0:3131; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3132; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 03133; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v5, 83134; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[4:5]3135; GFX8-GISEL-NEXT: v_cmp_lt_f64_e64 s[4:5], v[2:3], v[4:5]3136; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, 1, vcc3137; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v4, 0, 1, s[4:5]3138; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v6, 8, v63139; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v4, 8, v43140; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v63141; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v43142; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[4:5], v[0:1]3143; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[6:7], v[2:3]3144; GFX8-GISEL-NEXT: v_mul_f64 v[8:9], v[4:5], 0.53145; GFX8-GISEL-NEXT: v_mul_f64 v[4:5], v[0:1], v[4:5]3146; GFX8-GISEL-NEXT: v_mul_f64 v[10:11], v[6:7], 0.53147; GFX8-GISEL-NEXT: v_mul_f64 v[6:7], v[2:3], v[6:7]3148; GFX8-GISEL-NEXT: v_fma_f64 v[12:13], -v[8:9], v[4:5], 0.53149; GFX8-GISEL-NEXT: v_fma_f64 v[14:15], -v[10:11], v[6:7], 0.53150; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], v[4:5]3151; GFX8-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[12:13], v[8:9]3152; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], v[6:7]3153; GFX8-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[14:15], v[10:11]3154; GFX8-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]3155; GFX8-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]3156; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]3157; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]3158; GFX8-GISEL-NEXT: v_fma_f64 v[12:13], -v[4:5], v[4:5], v[0:1]3159; GFX8-GISEL-NEXT: v_fma_f64 v[14:15], -v[6:7], v[6:7], v[2:3]3160; GFX8-GISEL-NEXT: v_fma_f64 v[4:5], v[12:13], v[8:9], v[4:5]3161; GFX8-GISEL-NEXT: v_mov_b32_e32 v8, 0xffffff803162; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], v[14:15], v[10:11], v[6:7]3163; GFX8-GISEL-NEXT: v_mov_b32_e32 v9, 0x2603164; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v10, 0, v8, vcc3165; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v8, 0, v8, s[4:5]3166; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v93167; GFX8-GISEL-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v93168; GFX8-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v103169; GFX8-GISEL-NEXT: v_ldexp_f64 v[6:7], v[6:7], v83170; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v4, v0, vcc3171; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc3172; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, v6, v2, s[4:5]3173; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v3, v7, v3, s[4:5]3174; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]3175 %result = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %x)3176 ret <2 x double> %result3177}3178 3179define <3 x double> @v_sqrt_v3f64(<3 x double> %x) {3180; GFX6-SDAG-LABEL: v_sqrt_v3f64:3181; GFX6-SDAG: ; %bb.0:3182; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3183; GFX6-SDAG-NEXT: s_mov_b32 s6, 03184; GFX6-SDAG-NEXT: s_brev_b32 s7, 83185; GFX6-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[6:7], v[0:1]3186; GFX6-SDAG-NEXT: v_mov_b32_e32 v10, 0x1003187; GFX6-SDAG-NEXT: v_cmp_gt_f64_e64 s[4:5], s[6:7], v[2:3]3188; GFX6-SDAG-NEXT: v_cmp_gt_f64_e64 s[6:7], s[6:7], v[4:5]3189; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v6, 0, v10, vcc3190; GFX6-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v63191; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v6, 0, v10, s[4:5]3192; GFX6-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v63193; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v10, 0, v10, s[6:7]3194; GFX6-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v103195; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[6:7], v[0:1]3196; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[8:9], v[2:3]3197; GFX6-SDAG-NEXT: v_rsq_f64_e32 v[12:13], v[4:5]3198; GFX6-SDAG-NEXT: v_mul_f64 v[10:11], v[0:1], v[6:7]3199; GFX6-SDAG-NEXT: v_mul_f64 v[6:7], v[6:7], 0.53200; GFX6-SDAG-NEXT: v_mul_f64 v[14:15], v[2:3], v[8:9]3201; GFX6-SDAG-NEXT: v_mul_f64 v[8:9], v[8:9], 0.53202; GFX6-SDAG-NEXT: v_fma_f64 v[16:17], -v[6:7], v[10:11], 0.53203; GFX6-SDAG-NEXT: v_fma_f64 v[18:19], -v[8:9], v[14:15], 0.53204; GFX6-SDAG-NEXT: v_fma_f64 v[10:11], v[10:11], v[16:17], v[10:11]3205; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[16:17], v[6:7]3206; GFX6-SDAG-NEXT: v_mul_f64 v[16:17], v[4:5], v[12:13]3207; GFX6-SDAG-NEXT: v_mul_f64 v[12:13], v[12:13], 0.53208; GFX6-SDAG-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]3209; GFX6-SDAG-NEXT: v_fma_f64 v[8:9], v[8:9], v[18:19], v[8:9]3210; GFX6-SDAG-NEXT: v_fma_f64 v[18:19], -v[12:13], v[16:17], 0.53211; GFX6-SDAG-NEXT: v_fma_f64 v[16:17], v[16:17], v[18:19], v[16:17]3212; GFX6-SDAG-NEXT: v_fma_f64 v[12:13], v[12:13], v[18:19], v[12:13]3213; GFX6-SDAG-NEXT: v_fma_f64 v[18:19], -v[10:11], v[10:11], v[0:1]3214; GFX6-SDAG-NEXT: v_fma_f64 v[10:11], v[18:19], v[6:7], v[10:11]3215; GFX6-SDAG-NEXT: v_fma_f64 v[18:19], -v[14:15], v[14:15], v[2:3]3216; GFX6-SDAG-NEXT: v_fma_f64 v[14:15], v[18:19], v[8:9], v[14:15]3217; GFX6-SDAG-NEXT: v_fma_f64 v[18:19], -v[16:17], v[16:17], v[4:5]3218; GFX6-SDAG-NEXT: v_fma_f64 v[16:17], v[18:19], v[12:13], v[16:17]3219; GFX6-SDAG-NEXT: v_fma_f64 v[18:19], -v[10:11], v[10:11], v[0:1]3220; GFX6-SDAG-NEXT: v_fma_f64 v[6:7], v[18:19], v[6:7], v[10:11]3221; GFX6-SDAG-NEXT: v_fma_f64 v[10:11], -v[14:15], v[14:15], v[2:3]3222; GFX6-SDAG-NEXT: v_fma_f64 v[18:19], -v[16:17], v[16:17], v[4:5]3223; GFX6-SDAG-NEXT: v_fma_f64 v[8:9], v[10:11], v[8:9], v[14:15]3224; GFX6-SDAG-NEXT: v_fma_f64 v[10:11], v[18:19], v[12:13], v[16:17]3225; GFX6-SDAG-NEXT: v_mov_b32_e32 v14, 0xffffff803226; GFX6-SDAG-NEXT: v_mov_b32_e32 v15, 0x2603227; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v12, 0, v14, vcc3228; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v13, 0, v14, s[4:5]3229; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v14, 0, v14, s[6:7]3230; GFX6-SDAG-NEXT: v_ldexp_f64 v[6:7], v[6:7], v123231; GFX6-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v153232; GFX6-SDAG-NEXT: v_ldexp_f64 v[8:9], v[8:9], v133233; GFX6-SDAG-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v153234; GFX6-SDAG-NEXT: v_ldexp_f64 v[10:11], v[10:11], v143235; GFX6-SDAG-NEXT: v_cmp_class_f64_e64 s[6:7], v[4:5], v153236; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v0, v6, v0, vcc3237; GFX6-SDAG-NEXT: v_cndmask_b32_e32 v1, v7, v1, vcc3238; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v2, v8, v2, s[4:5]3239; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v3, v9, v3, s[4:5]3240; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v4, v10, v4, s[6:7]3241; GFX6-SDAG-NEXT: v_cndmask_b32_e64 v5, v11, v5, s[6:7]3242; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]3243;3244; GFX8-SDAG-LABEL: v_sqrt_v3f64:3245; GFX8-SDAG: ; %bb.0:3246; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3247; GFX8-SDAG-NEXT: s_mov_b32 s6, 03248; GFX8-SDAG-NEXT: s_brev_b32 s7, 83249; GFX8-SDAG-NEXT: v_cmp_gt_f64_e32 vcc, s[6:7], v[0:1]3250; GFX8-SDAG-NEXT: v_mov_b32_e32 v10, 0x1003251; GFX8-SDAG-NEXT: v_cmp_gt_f64_e64 s[4:5], s[6:7], v[2:3]3252; GFX8-SDAG-NEXT: v_cmp_gt_f64_e64 s[6:7], s[6:7], v[4:5]3253; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v6, 0, v10, vcc3254; GFX8-SDAG-NEXT: v_ldexp_f64 v[0:1], v[0:1], v63255; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v6, 0, v10, s[4:5]3256; GFX8-SDAG-NEXT: v_ldexp_f64 v[2:3], v[2:3], v63257; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v10, 0, v10, s[6:7]3258; GFX8-SDAG-NEXT: v_ldexp_f64 v[4:5], v[4:5], v103259; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[6:7], v[0:1]3260; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[8:9], v[2:3]3261; GFX8-SDAG-NEXT: v_rsq_f64_e32 v[12:13], v[4:5]3262; GFX8-SDAG-NEXT: v_mul_f64 v[10:11], v[0:1], v[6:7]3263; GFX8-SDAG-NEXT: v_mul_f64 v[6:7], v[6:7], 0.53264; GFX8-SDAG-NEXT: v_mul_f64 v[14:15], v[2:3], v[8:9]3265; GFX8-SDAG-NEXT: v_mul_f64 v[8:9], v[8:9], 0.53266; GFX8-SDAG-NEXT: v_fma_f64 v[16:17], -v[6:7], v[10:11], 0.53267; GFX8-SDAG-NEXT: v_fma_f64 v[18:19], -v[8:9], v[14:15], 0.53268; GFX8-SDAG-NEXT: v_fma_f64 v[10:11], v[10:11], v[16:17], v[10:11]3269; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], v[6:7], v[16:17], v[6:7]3270; GFX8-SDAG-NEXT: v_mul_f64 v[16:17], v[4:5], v[12:13]3271; GFX8-SDAG-NEXT: v_mul_f64 v[12:13], v[12:13], 0.53272; GFX8-SDAG-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]3273; GFX8-SDAG-NEXT: v_fma_f64 v[8:9], v[8:9], v[18:19], v[8:9]3274; GFX8-SDAG-NEXT: v_fma_f64 v[18:19], -v[12:13], v[16:17], 0.53275; GFX8-SDAG-NEXT: v_fma_f64 v[16:17], v[16:17], v[18:19], v[16:17]3276; GFX8-SDAG-NEXT: v_fma_f64 v[12:13], v[12:13], v[18:19], v[12:13]3277; GFX8-SDAG-NEXT: v_fma_f64 v[18:19], -v[10:11], v[10:11], v[0:1]3278; GFX8-SDAG-NEXT: v_fma_f64 v[10:11], v[18:19], v[6:7], v[10:11]3279; GFX8-SDAG-NEXT: v_fma_f64 v[18:19], -v[14:15], v[14:15], v[2:3]3280; GFX8-SDAG-NEXT: v_fma_f64 v[14:15], v[18:19], v[8:9], v[14:15]3281; GFX8-SDAG-NEXT: v_fma_f64 v[18:19], -v[16:17], v[16:17], v[4:5]3282; GFX8-SDAG-NEXT: v_fma_f64 v[16:17], v[18:19], v[12:13], v[16:17]3283; GFX8-SDAG-NEXT: v_fma_f64 v[18:19], -v[10:11], v[10:11], v[0:1]3284; GFX8-SDAG-NEXT: v_fma_f64 v[6:7], v[18:19], v[6:7], v[10:11]3285; GFX8-SDAG-NEXT: v_fma_f64 v[10:11], -v[14:15], v[14:15], v[2:3]3286; GFX8-SDAG-NEXT: v_fma_f64 v[18:19], -v[16:17], v[16:17], v[4:5]3287; GFX8-SDAG-NEXT: v_fma_f64 v[8:9], v[10:11], v[8:9], v[14:15]3288; GFX8-SDAG-NEXT: v_fma_f64 v[10:11], v[18:19], v[12:13], v[16:17]3289; GFX8-SDAG-NEXT: v_mov_b32_e32 v14, 0xffffff803290; GFX8-SDAG-NEXT: v_mov_b32_e32 v15, 0x2603291; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v12, 0, v14, vcc3292; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v13, 0, v14, s[4:5]3293; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v14, 0, v14, s[6:7]3294; GFX8-SDAG-NEXT: v_ldexp_f64 v[6:7], v[6:7], v123295; GFX8-SDAG-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v153296; GFX8-SDAG-NEXT: v_ldexp_f64 v[8:9], v[8:9], v133297; GFX8-SDAG-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v153298; GFX8-SDAG-NEXT: v_ldexp_f64 v[10:11], v[10:11], v143299; GFX8-SDAG-NEXT: v_cmp_class_f64_e64 s[6:7], v[4:5], v153300; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v0, v6, v0, vcc3301; GFX8-SDAG-NEXT: v_cndmask_b32_e32 v1, v7, v1, vcc3302; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v2, v8, v2, s[4:5]3303; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v3, v9, v3, s[4:5]3304; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v4, v10, v4, s[6:7]3305; GFX8-SDAG-NEXT: v_cndmask_b32_e64 v5, v11, v5, s[6:7]3306; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]3307;3308; GFX6-GISEL-LABEL: v_sqrt_v3f64:3309; GFX6-GISEL: ; %bb.0:3310; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3311; GFX6-GISEL-NEXT: v_mov_b32_e32 v6, 03312; GFX6-GISEL-NEXT: v_bfrev_b32_e32 v7, 83313; GFX6-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[6:7]3314; GFX6-GISEL-NEXT: v_cmp_lt_f64_e64 s[4:5], v[2:3], v[6:7]3315; GFX6-GISEL-NEXT: v_cmp_lt_f64_e64 s[6:7], v[4:5], v[6:7]3316; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v8, 0, 1, vcc3317; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v8, 8, v83318; GFX6-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v83319; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v8, 0, 1, s[4:5]3320; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v8, 8, v83321; GFX6-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v83322; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, 1, s[6:7]3323; GFX6-GISEL-NEXT: v_lshlrev_b32_e32 v6, 8, v63324; GFX6-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v63325; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[8:9], v[0:1]3326; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[10:11], v[2:3]3327; GFX6-GISEL-NEXT: v_rsq_f64_e32 v[12:13], v[4:5]3328; GFX6-GISEL-NEXT: v_mul_f64 v[6:7], v[8:9], 0.53329; GFX6-GISEL-NEXT: v_mul_f64 v[8:9], v[0:1], v[8:9]3330; GFX6-GISEL-NEXT: v_mul_f64 v[14:15], v[10:11], 0.53331; GFX6-GISEL-NEXT: v_mul_f64 v[10:11], v[2:3], v[10:11]3332; GFX6-GISEL-NEXT: v_fma_f64 v[16:17], -v[6:7], v[8:9], 0.53333; GFX6-GISEL-NEXT: v_fma_f64 v[18:19], -v[14:15], v[10:11], 0.53334; GFX6-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[16:17], v[8:9]3335; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[16:17], v[6:7]3336; GFX6-GISEL-NEXT: v_mul_f64 v[16:17], v[12:13], 0.53337; GFX6-GISEL-NEXT: v_mul_f64 v[12:13], v[4:5], v[12:13]3338; GFX6-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11]3339; GFX6-GISEL-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]3340; GFX6-GISEL-NEXT: v_fma_f64 v[18:19], -v[16:17], v[12:13], 0.53341; GFX6-GISEL-NEXT: v_fma_f64 v[12:13], v[12:13], v[18:19], v[12:13]3342; GFX6-GISEL-NEXT: v_fma_f64 v[16:17], v[16:17], v[18:19], v[16:17]3343; GFX6-GISEL-NEXT: v_fma_f64 v[18:19], -v[8:9], v[8:9], v[0:1]3344; GFX6-GISEL-NEXT: v_fma_f64 v[8:9], v[18:19], v[6:7], v[8:9]3345; GFX6-GISEL-NEXT: v_fma_f64 v[18:19], -v[10:11], v[10:11], v[2:3]3346; GFX6-GISEL-NEXT: v_fma_f64 v[10:11], v[18:19], v[14:15], v[10:11]3347; GFX6-GISEL-NEXT: v_fma_f64 v[18:19], -v[12:13], v[12:13], v[4:5]3348; GFX6-GISEL-NEXT: v_fma_f64 v[12:13], v[18:19], v[16:17], v[12:13]3349; GFX6-GISEL-NEXT: v_fma_f64 v[18:19], -v[8:9], v[8:9], v[0:1]3350; GFX6-GISEL-NEXT: v_fma_f64 v[6:7], v[18:19], v[6:7], v[8:9]3351; GFX6-GISEL-NEXT: v_fma_f64 v[8:9], -v[10:11], v[10:11], v[2:3]3352; GFX6-GISEL-NEXT: v_fma_f64 v[18:19], -v[12:13], v[12:13], v[4:5]3353; GFX6-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[14:15], v[10:11]3354; GFX6-GISEL-NEXT: v_fma_f64 v[10:11], v[18:19], v[16:17], v[12:13]3355; GFX6-GISEL-NEXT: v_mov_b32_e32 v14, 0xffffff803356; GFX6-GISEL-NEXT: v_mov_b32_e32 v15, 0x2603357; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v12, 0, v14, vcc3358; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v13, 0, v14, s[4:5]3359; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v14, 0, v14, s[6:7]3360; GFX6-GISEL-NEXT: v_ldexp_f64 v[6:7], v[6:7], v123361; GFX6-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v153362; GFX6-GISEL-NEXT: v_ldexp_f64 v[8:9], v[8:9], v133363; GFX6-GISEL-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v153364; GFX6-GISEL-NEXT: v_ldexp_f64 v[10:11], v[10:11], v143365; GFX6-GISEL-NEXT: v_cmp_class_f64_e64 s[6:7], v[4:5], v153366; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v0, v6, v0, vcc3367; GFX6-GISEL-NEXT: v_cndmask_b32_e32 v1, v7, v1, vcc3368; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v2, v8, v2, s[4:5]3369; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v3, v9, v3, s[4:5]3370; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v4, v10, v4, s[6:7]3371; GFX6-GISEL-NEXT: v_cndmask_b32_e64 v5, v11, v5, s[6:7]3372; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]3373;3374; GFX8-GISEL-LABEL: v_sqrt_v3f64:3375; GFX8-GISEL: ; %bb.0:3376; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3377; GFX8-GISEL-NEXT: v_mov_b32_e32 v6, 03378; GFX8-GISEL-NEXT: v_bfrev_b32_e32 v7, 83379; GFX8-GISEL-NEXT: v_cmp_lt_f64_e32 vcc, v[0:1], v[6:7]3380; GFX8-GISEL-NEXT: v_cmp_lt_f64_e64 s[4:5], v[2:3], v[6:7]3381; GFX8-GISEL-NEXT: v_cmp_lt_f64_e64 s[6:7], v[4:5], v[6:7]3382; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v8, 0, 1, vcc3383; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v8, 8, v83384; GFX8-GISEL-NEXT: v_ldexp_f64 v[0:1], v[0:1], v83385; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v8, 0, 1, s[4:5]3386; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v8, 8, v83387; GFX8-GISEL-NEXT: v_ldexp_f64 v[2:3], v[2:3], v83388; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v6, 0, 1, s[6:7]3389; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v6, 8, v63390; GFX8-GISEL-NEXT: v_ldexp_f64 v[4:5], v[4:5], v63391; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[8:9], v[0:1]3392; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[10:11], v[2:3]3393; GFX8-GISEL-NEXT: v_rsq_f64_e32 v[12:13], v[4:5]3394; GFX8-GISEL-NEXT: v_mul_f64 v[6:7], v[8:9], 0.53395; GFX8-GISEL-NEXT: v_mul_f64 v[8:9], v[0:1], v[8:9]3396; GFX8-GISEL-NEXT: v_mul_f64 v[14:15], v[10:11], 0.53397; GFX8-GISEL-NEXT: v_mul_f64 v[10:11], v[2:3], v[10:11]3398; GFX8-GISEL-NEXT: v_fma_f64 v[16:17], -v[6:7], v[8:9], 0.53399; GFX8-GISEL-NEXT: v_fma_f64 v[18:19], -v[14:15], v[10:11], 0.53400; GFX8-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[16:17], v[8:9]3401; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], v[6:7], v[16:17], v[6:7]3402; GFX8-GISEL-NEXT: v_mul_f64 v[16:17], v[12:13], 0.53403; GFX8-GISEL-NEXT: v_mul_f64 v[12:13], v[4:5], v[12:13]3404; GFX8-GISEL-NEXT: v_fma_f64 v[10:11], v[10:11], v[18:19], v[10:11]3405; GFX8-GISEL-NEXT: v_fma_f64 v[14:15], v[14:15], v[18:19], v[14:15]3406; GFX8-GISEL-NEXT: v_fma_f64 v[18:19], -v[16:17], v[12:13], 0.53407; GFX8-GISEL-NEXT: v_fma_f64 v[12:13], v[12:13], v[18:19], v[12:13]3408; GFX8-GISEL-NEXT: v_fma_f64 v[16:17], v[16:17], v[18:19], v[16:17]3409; GFX8-GISEL-NEXT: v_fma_f64 v[18:19], -v[8:9], v[8:9], v[0:1]3410; GFX8-GISEL-NEXT: v_fma_f64 v[8:9], v[18:19], v[6:7], v[8:9]3411; GFX8-GISEL-NEXT: v_fma_f64 v[18:19], -v[10:11], v[10:11], v[2:3]3412; GFX8-GISEL-NEXT: v_fma_f64 v[10:11], v[18:19], v[14:15], v[10:11]3413; GFX8-GISEL-NEXT: v_fma_f64 v[18:19], -v[12:13], v[12:13], v[4:5]3414; GFX8-GISEL-NEXT: v_fma_f64 v[12:13], v[18:19], v[16:17], v[12:13]3415; GFX8-GISEL-NEXT: v_fma_f64 v[18:19], -v[8:9], v[8:9], v[0:1]3416; GFX8-GISEL-NEXT: v_fma_f64 v[6:7], v[18:19], v[6:7], v[8:9]3417; GFX8-GISEL-NEXT: v_fma_f64 v[8:9], -v[10:11], v[10:11], v[2:3]3418; GFX8-GISEL-NEXT: v_fma_f64 v[18:19], -v[12:13], v[12:13], v[4:5]3419; GFX8-GISEL-NEXT: v_fma_f64 v[8:9], v[8:9], v[14:15], v[10:11]3420; GFX8-GISEL-NEXT: v_fma_f64 v[10:11], v[18:19], v[16:17], v[12:13]3421; GFX8-GISEL-NEXT: v_mov_b32_e32 v14, 0xffffff803422; GFX8-GISEL-NEXT: v_mov_b32_e32 v15, 0x2603423; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v12, 0, v14, vcc3424; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v13, 0, v14, s[4:5]3425; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v14, 0, v14, s[6:7]3426; GFX8-GISEL-NEXT: v_ldexp_f64 v[6:7], v[6:7], v123427; GFX8-GISEL-NEXT: v_cmp_class_f64_e32 vcc, v[0:1], v153428; GFX8-GISEL-NEXT: v_ldexp_f64 v[8:9], v[8:9], v133429; GFX8-GISEL-NEXT: v_cmp_class_f64_e64 s[4:5], v[2:3], v153430; GFX8-GISEL-NEXT: v_ldexp_f64 v[10:11], v[10:11], v143431; GFX8-GISEL-NEXT: v_cmp_class_f64_e64 s[6:7], v[4:5], v153432; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v0, v6, v0, vcc3433; GFX8-GISEL-NEXT: v_cndmask_b32_e32 v1, v7, v1, vcc3434; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v2, v8, v2, s[4:5]3435; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v3, v9, v3, s[4:5]3436; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v4, v10, v4, s[6:7]3437; GFX8-GISEL-NEXT: v_cndmask_b32_e64 v5, v11, v5, s[6:7]3438; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]3439 %result = call <3 x double> @llvm.sqrt.v3f64(<3 x double> %x)3440 ret <3 x double> %result3441}3442 3443declare double @llvm.fabs.f64(double) #03444declare double @llvm.sqrt.f64(double) #03445declare <2 x double> @llvm.sqrt.v2f64(<2 x double>) #03446declare <3 x double> @llvm.sqrt.v3f64(<3 x double>) #03447declare i32 @llvm.amdgcn.readfirstlane(i32) #13448 3449attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }3450attributes #1 = { convergent nounwind willreturn memory(none) }3451attributes #3 = { "no-nans-fp-math"="true" "no-infs-fp-math"="true" }3452;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:3453; GFX6: {{.*}}3454; GFX8: {{.*}}3455