brintos

brintos / llvm-project-archived public Read only

0
0
Text · 32.8 KiB · 0329f23 Raw
772 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: opt -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -passes=amdgpu-simplifylib,instcombine -amdgpu-prelink < %s | llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -amdgpu-prelink | FileCheck %s3 4declare hidden float @_Z3powff(float, float)5declare hidden double @_Z3powdd(double, double)6declare hidden half @_Z3powDhDh(half, half)7 8declare hidden float @_Z4powrff(float, float)9declare hidden double @_Z4powrdd(double, double)10declare hidden half @_Z4powrDhDh(half, half)11 12declare hidden float @_Z4pownfi(float, i32)13declare hidden double @_Z4powndi(double, i32)14declare hidden half @_Z4pownDhi(half, i32)15 16; --------------------------------------------------------------------17; test pow18; --------------------------------------------------------------------19 20define half @test_pow_fast_f16(half %x, half %y) {21; CHECK-LABEL: test_pow_fast_f16:22; CHECK:       ; %bb.0:23; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)24; CHECK-NEXT:    s_getpc_b64 s[16:17]25; CHECK-NEXT:    s_add_u32 s16, s16, _Z3powDhDh@rel32@lo+426; CHECK-NEXT:    s_addc_u32 s17, s17, _Z3powDhDh@rel32@hi+1227; CHECK-NEXT:    s_setpc_b64 s[16:17]28  %pow = tail call fast half @_Z3powDhDh(half %x, half %y)29  ret half %pow30}31 32define float @test_pow_fast_f32(float %x, float %y) {33; CHECK-LABEL: test_pow_fast_f32:34; CHECK:       ; %bb.0:35; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)36; CHECK-NEXT:    s_getpc_b64 s[16:17]37; CHECK-NEXT:    s_add_u32 s16, s16, _Z3powff@rel32@lo+438; CHECK-NEXT:    s_addc_u32 s17, s17, _Z3powff@rel32@hi+1239; CHECK-NEXT:    s_setpc_b64 s[16:17]40  %pow = tail call fast float @_Z3powff(float %x, float %y)41  ret float %pow42}43 44define double @test_pow_fast_f64(double %x, double %y) {45; CHECK-LABEL: test_pow_fast_f64:46; CHECK:       ; %bb.0:47; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)48; CHECK-NEXT:    s_getpc_b64 s[16:17]49; CHECK-NEXT:    s_add_u32 s16, s16, _Z3powdd@rel32@lo+450; CHECK-NEXT:    s_addc_u32 s17, s17, _Z3powdd@rel32@hi+1251; CHECK-NEXT:    s_setpc_b64 s[16:17]52  %pow = tail call fast double @_Z3powdd(double %x, double %y)53  ret double %pow54}55 56define half @test_pow_fast_f16__integral_y(half %x, i32 %y.i) {57; CHECK-LABEL: test_pow_fast_f16__integral_y:58; CHECK:       ; %bb.0:59; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)60; CHECK-NEXT:    v_cvt_f32_i32_e32 v1, v161; CHECK-NEXT:    v_log_f16_e64 v3, |v0|62; CHECK-NEXT:    v_cvt_f16_f32_e32 v1, v163; CHECK-NEXT:    v_cvt_f32_f16_e32 v1, v164; CHECK-NEXT:    v_cvt_i32_f32_e32 v1, v165; CHECK-NEXT:    v_cvt_f32_i32_e32 v2, v166; CHECK-NEXT:    v_lshlrev_b16_e32 v1, 15, v167; CHECK-NEXT:    v_and_b32_e32 v0, v1, v068; CHECK-NEXT:    v_cvt_f16_f32_e32 v2, v269; CHECK-NEXT:    v_mul_f16_e32 v2, v3, v270; CHECK-NEXT:    v_exp_f16_e32 v2, v271; CHECK-NEXT:    v_or_b32_e32 v0, v0, v272; CHECK-NEXT:    s_setpc_b64 s[30:31]73  %y = sitofp i32 %y.i to half74  %pow = tail call fast half @_Z3powDhDh(half %x, half %y)75  ret half %pow76}77 78define float @test_pow_fast_f32__integral_y(float %x, i32 %y.i) {79; CHECK-LABEL: test_pow_fast_f32__integral_y:80; CHECK:       ; %bb.0:81; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)82; CHECK-NEXT:    v_cvt_f32_i32_e32 v1, v183; CHECK-NEXT:    s_mov_b32 s4, 0x80000084; CHECK-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s485; CHECK-NEXT:    v_cndmask_b32_e64 v3, 0, 32, vcc86; CHECK-NEXT:    v_cvt_i32_f32_e32 v1, v187; CHECK-NEXT:    v_ldexp_f32 v3, |v0|, v388; CHECK-NEXT:    v_log_f32_e32 v3, v389; CHECK-NEXT:    v_mov_b32_e32 v2, 0x4200000090; CHECK-NEXT:    v_cvt_f32_i32_e32 v4, v191; CHECK-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc92; CHECK-NEXT:    v_sub_f32_e32 v2, v3, v293; CHECK-NEXT:    s_mov_b32 s4, 0xc2fc000094; CHECK-NEXT:    v_mul_f32_e32 v3, v2, v495; CHECK-NEXT:    v_mov_b32_e32 v5, 0x4280000096; CHECK-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v397; CHECK-NEXT:    v_cndmask_b32_e32 v3, 0, v5, vcc98; CHECK-NEXT:    v_fma_f32 v2, v2, v4, v399; CHECK-NEXT:    v_exp_f32_e32 v2, v2100; CHECK-NEXT:    v_not_b32_e32 v3, 63101; CHECK-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc102; CHECK-NEXT:    v_lshlrev_b32_e32 v1, 31, v1103; CHECK-NEXT:    v_ldexp_f32 v2, v2, v3104; CHECK-NEXT:    v_and_or_b32 v0, v1, v0, v2105; CHECK-NEXT:    s_setpc_b64 s[30:31]106  %y = sitofp i32 %y.i to float107  %pow = tail call fast float @_Z3powff(float %x, float %y)108  ret float %pow109}110 111define double @test_pow_fast_f64__integral_y(double %x, i32 %y.i) {112; CHECK-LABEL: test_pow_fast_f64__integral_y:113; CHECK:       ; %bb.0:114; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)115; CHECK-NEXT:    s_mov_b32 s16, s33116; CHECK-NEXT:    s_mov_b32 s33, s32117; CHECK-NEXT:    s_or_saveexec_b64 s[18:19], -1118; CHECK-NEXT:    buffer_store_dword v43, off, s[0:3], s33 offset:12 ; 4-byte Folded Spill119; CHECK-NEXT:    s_mov_b64 exec, s[18:19]120; CHECK-NEXT:    v_writelane_b32 v43, s16, 14121; CHECK-NEXT:    v_writelane_b32 v43, s30, 0122; CHECK-NEXT:    v_writelane_b32 v43, s31, 1123; CHECK-NEXT:    v_writelane_b32 v43, s34, 2124; CHECK-NEXT:    v_writelane_b32 v43, s35, 3125; CHECK-NEXT:    v_writelane_b32 v43, s36, 4126; CHECK-NEXT:    v_writelane_b32 v43, s37, 5127; CHECK-NEXT:    v_writelane_b32 v43, s38, 6128; CHECK-NEXT:    v_writelane_b32 v43, s39, 7129; CHECK-NEXT:    s_addk_i32 s32, 0x800130; CHECK-NEXT:    v_writelane_b32 v43, s48, 8131; CHECK-NEXT:    v_writelane_b32 v43, s49, 9132; CHECK-NEXT:    s_mov_b64 s[48:49], s[4:5]133; CHECK-NEXT:    s_getpc_b64 s[4:5]134; CHECK-NEXT:    s_add_u32 s4, s4, _Z4log2d@gotpcrel32@lo+4135; CHECK-NEXT:    s_addc_u32 s5, s5, _Z4log2d@gotpcrel32@hi+12136; CHECK-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0137; CHECK-NEXT:    v_writelane_b32 v43, s50, 10138; CHECK-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill139; CHECK-NEXT:    buffer_store_dword v41, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill140; CHECK-NEXT:    buffer_store_dword v42, off, s[0:3], s33 ; 4-byte Folded Spill141; CHECK-NEXT:    v_writelane_b32 v43, s51, 11142; CHECK-NEXT:    v_mov_b32_e32 v42, v1143; CHECK-NEXT:    v_writelane_b32 v43, s52, 12144; CHECK-NEXT:    v_and_b32_e32 v1, 0x7fffffff, v42145; CHECK-NEXT:    s_mov_b64 s[4:5], s[48:49]146; CHECK-NEXT:    v_writelane_b32 v43, s53, 13147; CHECK-NEXT:    v_mov_b32_e32 v40, v31148; CHECK-NEXT:    v_mov_b32_e32 v41, v2149; CHECK-NEXT:    s_mov_b32 s50, s15150; CHECK-NEXT:    s_mov_b32 s51, s14151; CHECK-NEXT:    s_mov_b32 s52, s13152; CHECK-NEXT:    s_mov_b32 s53, s12153; CHECK-NEXT:    s_mov_b64 s[34:35], s[10:11]154; CHECK-NEXT:    s_mov_b64 s[36:37], s[8:9]155; CHECK-NEXT:    s_mov_b64 s[38:39], s[6:7]156; CHECK-NEXT:    s_waitcnt lgkmcnt(0)157; CHECK-NEXT:    s_swappc_b64 s[30:31], s[16:17]158; CHECK-NEXT:    v_cvt_f64_i32_e32 v[2:3], v41159; CHECK-NEXT:    s_getpc_b64 s[4:5]160; CHECK-NEXT:    s_add_u32 s4, s4, _Z4exp2d@gotpcrel32@lo+4161; CHECK-NEXT:    s_addc_u32 s5, s5, _Z4exp2d@gotpcrel32@hi+12162; CHECK-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0163; CHECK-NEXT:    s_mov_b64 s[4:5], s[48:49]164; CHECK-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]165; CHECK-NEXT:    s_mov_b64 s[6:7], s[38:39]166; CHECK-NEXT:    s_mov_b64 s[8:9], s[36:37]167; CHECK-NEXT:    s_mov_b64 s[10:11], s[34:35]168; CHECK-NEXT:    s_mov_b32 s12, s53169; CHECK-NEXT:    s_mov_b32 s13, s52170; CHECK-NEXT:    s_mov_b32 s14, s51171; CHECK-NEXT:    s_mov_b32 s15, s50172; CHECK-NEXT:    v_mov_b32_e32 v31, v40173; CHECK-NEXT:    s_waitcnt lgkmcnt(0)174; CHECK-NEXT:    s_swappc_b64 s[30:31], s[16:17]175; CHECK-NEXT:    v_lshlrev_b32_e32 v2, 31, v41176; CHECK-NEXT:    v_and_b32_e32 v2, v2, v42177; CHECK-NEXT:    buffer_load_dword v42, off, s[0:3], s33 ; 4-byte Folded Reload178; CHECK-NEXT:    buffer_load_dword v41, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload179; CHECK-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload180; CHECK-NEXT:    v_or_b32_e32 v1, v2, v1181; CHECK-NEXT:    v_readlane_b32 s53, v43, 13182; CHECK-NEXT:    v_readlane_b32 s52, v43, 12183; CHECK-NEXT:    v_readlane_b32 s51, v43, 11184; CHECK-NEXT:    v_readlane_b32 s50, v43, 10185; CHECK-NEXT:    v_readlane_b32 s49, v43, 9186; CHECK-NEXT:    v_readlane_b32 s48, v43, 8187; CHECK-NEXT:    v_readlane_b32 s39, v43, 7188; CHECK-NEXT:    v_readlane_b32 s38, v43, 6189; CHECK-NEXT:    v_readlane_b32 s37, v43, 5190; CHECK-NEXT:    v_readlane_b32 s36, v43, 4191; CHECK-NEXT:    v_readlane_b32 s35, v43, 3192; CHECK-NEXT:    v_readlane_b32 s34, v43, 2193; CHECK-NEXT:    v_readlane_b32 s31, v43, 1194; CHECK-NEXT:    v_readlane_b32 s30, v43, 0195; CHECK-NEXT:    s_mov_b32 s32, s33196; CHECK-NEXT:    v_readlane_b32 s4, v43, 14197; CHECK-NEXT:    s_or_saveexec_b64 s[6:7], -1198; CHECK-NEXT:    buffer_load_dword v43, off, s[0:3], s33 offset:12 ; 4-byte Folded Reload199; CHECK-NEXT:    s_mov_b64 exec, s[6:7]200; CHECK-NEXT:    s_mov_b32 s33, s4201; CHECK-NEXT:    s_waitcnt vmcnt(0)202; CHECK-NEXT:    s_setpc_b64 s[30:31]203  %y = sitofp i32 %y.i to double204  %pow = tail call fast double @_Z3powdd(double %x, double %y)205  ret double %pow206}207 208; --------------------------------------------------------------------209; test powr210; --------------------------------------------------------------------211 212define half @test_powr_fast_f16(half %x, half %y) {213; CHECK-LABEL: test_powr_fast_f16:214; CHECK:       ; %bb.0:215; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)216; CHECK-NEXT:    v_log_f16_e32 v0, v0217; CHECK-NEXT:    v_mul_f16_e32 v0, v1, v0218; CHECK-NEXT:    v_exp_f16_e32 v0, v0219; CHECK-NEXT:    s_setpc_b64 s[30:31]220  %powr = tail call fast half @_Z4powrDhDh(half %x, half %y)221  ret half %powr222}223 224define float @test_powr_fast_f32(float %x, float %y) {225; CHECK-LABEL: test_powr_fast_f32:226; CHECK:       ; %bb.0:227; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)228; CHECK-NEXT:    s_mov_b32 s4, 0x800000229; CHECK-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0230; CHECK-NEXT:    v_cndmask_b32_e64 v3, 0, 32, vcc231; CHECK-NEXT:    v_ldexp_f32 v0, v0, v3232; CHECK-NEXT:    v_log_f32_e32 v0, v0233; CHECK-NEXT:    v_mov_b32_e32 v2, 0x42000000234; CHECK-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc235; CHECK-NEXT:    s_mov_b32 s4, 0xc2fc0000236; CHECK-NEXT:    v_sub_f32_e32 v0, v0, v2237; CHECK-NEXT:    v_mul_f32_e32 v2, v1, v0238; CHECK-NEXT:    v_mov_b32_e32 v3, 0x42800000239; CHECK-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v2240; CHECK-NEXT:    v_cndmask_b32_e32 v2, 0, v3, vcc241; CHECK-NEXT:    v_fma_f32 v0, v1, v0, v2242; CHECK-NEXT:    v_exp_f32_e32 v0, v0243; CHECK-NEXT:    v_not_b32_e32 v1, 63244; CHECK-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc245; CHECK-NEXT:    v_ldexp_f32 v0, v0, v1246; CHECK-NEXT:    s_setpc_b64 s[30:31]247  %powr = tail call fast float @_Z4powrff(float %x, float %y)248  ret float %powr249}250 251define double @test_powr_fast_f64(double %x, double %y) {252; CHECK-LABEL: test_powr_fast_f64:253; CHECK:       ; %bb.0:254; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)255; CHECK-NEXT:    s_mov_b32 s16, s33256; CHECK-NEXT:    s_mov_b32 s33, s32257; CHECK-NEXT:    s_or_saveexec_b64 s[18:19], -1258; CHECK-NEXT:    buffer_store_dword v43, off, s[0:3], s33 offset:12 ; 4-byte Folded Spill259; CHECK-NEXT:    s_mov_b64 exec, s[18:19]260; CHECK-NEXT:    v_writelane_b32 v43, s16, 14261; CHECK-NEXT:    v_writelane_b32 v43, s30, 0262; CHECK-NEXT:    v_writelane_b32 v43, s31, 1263; CHECK-NEXT:    v_writelane_b32 v43, s34, 2264; CHECK-NEXT:    v_writelane_b32 v43, s35, 3265; CHECK-NEXT:    v_writelane_b32 v43, s36, 4266; CHECK-NEXT:    v_writelane_b32 v43, s37, 5267; CHECK-NEXT:    v_writelane_b32 v43, s38, 6268; CHECK-NEXT:    v_writelane_b32 v43, s39, 7269; CHECK-NEXT:    s_addk_i32 s32, 0x800270; CHECK-NEXT:    v_writelane_b32 v43, s48, 8271; CHECK-NEXT:    v_writelane_b32 v43, s49, 9272; CHECK-NEXT:    s_mov_b64 s[48:49], s[4:5]273; CHECK-NEXT:    s_getpc_b64 s[4:5]274; CHECK-NEXT:    s_add_u32 s4, s4, _Z4log2d@gotpcrel32@lo+4275; CHECK-NEXT:    s_addc_u32 s5, s5, _Z4log2d@gotpcrel32@hi+12276; CHECK-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0277; CHECK-NEXT:    v_writelane_b32 v43, s50, 10278; CHECK-NEXT:    v_writelane_b32 v43, s51, 11279; CHECK-NEXT:    v_writelane_b32 v43, s52, 12280; CHECK-NEXT:    s_mov_b64 s[4:5], s[48:49]281; CHECK-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill282; CHECK-NEXT:    buffer_store_dword v41, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill283; CHECK-NEXT:    buffer_store_dword v42, off, s[0:3], s33 ; 4-byte Folded Spill284; CHECK-NEXT:    v_writelane_b32 v43, s53, 13285; CHECK-NEXT:    v_mov_b32_e32 v42, v31286; CHECK-NEXT:    v_mov_b32_e32 v41, v3287; CHECK-NEXT:    v_mov_b32_e32 v40, v2288; CHECK-NEXT:    s_mov_b32 s50, s15289; CHECK-NEXT:    s_mov_b32 s51, s14290; CHECK-NEXT:    s_mov_b32 s52, s13291; CHECK-NEXT:    s_mov_b32 s53, s12292; CHECK-NEXT:    s_mov_b64 s[34:35], s[10:11]293; CHECK-NEXT:    s_mov_b64 s[36:37], s[8:9]294; CHECK-NEXT:    s_mov_b64 s[38:39], s[6:7]295; CHECK-NEXT:    s_waitcnt lgkmcnt(0)296; CHECK-NEXT:    s_swappc_b64 s[30:31], s[16:17]297; CHECK-NEXT:    v_mul_f64 v[0:1], v[40:41], v[0:1]298; CHECK-NEXT:    s_getpc_b64 s[4:5]299; CHECK-NEXT:    s_add_u32 s4, s4, _Z4exp2d@gotpcrel32@lo+4300; CHECK-NEXT:    s_addc_u32 s5, s5, _Z4exp2d@gotpcrel32@hi+12301; CHECK-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0302; CHECK-NEXT:    s_mov_b64 s[4:5], s[48:49]303; CHECK-NEXT:    s_mov_b64 s[6:7], s[38:39]304; CHECK-NEXT:    s_mov_b64 s[8:9], s[36:37]305; CHECK-NEXT:    s_mov_b64 s[10:11], s[34:35]306; CHECK-NEXT:    s_mov_b32 s12, s53307; CHECK-NEXT:    s_mov_b32 s13, s52308; CHECK-NEXT:    s_mov_b32 s14, s51309; CHECK-NEXT:    s_mov_b32 s15, s50310; CHECK-NEXT:    v_mov_b32_e32 v31, v42311; CHECK-NEXT:    s_waitcnt lgkmcnt(0)312; CHECK-NEXT:    s_swappc_b64 s[30:31], s[16:17]313; CHECK-NEXT:    buffer_load_dword v42, off, s[0:3], s33 ; 4-byte Folded Reload314; CHECK-NEXT:    buffer_load_dword v41, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload315; CHECK-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload316; CHECK-NEXT:    v_readlane_b32 s53, v43, 13317; CHECK-NEXT:    v_readlane_b32 s52, v43, 12318; CHECK-NEXT:    v_readlane_b32 s51, v43, 11319; CHECK-NEXT:    v_readlane_b32 s50, v43, 10320; CHECK-NEXT:    v_readlane_b32 s49, v43, 9321; CHECK-NEXT:    v_readlane_b32 s48, v43, 8322; CHECK-NEXT:    v_readlane_b32 s39, v43, 7323; CHECK-NEXT:    v_readlane_b32 s38, v43, 6324; CHECK-NEXT:    v_readlane_b32 s37, v43, 5325; CHECK-NEXT:    v_readlane_b32 s36, v43, 4326; CHECK-NEXT:    v_readlane_b32 s35, v43, 3327; CHECK-NEXT:    v_readlane_b32 s34, v43, 2328; CHECK-NEXT:    v_readlane_b32 s31, v43, 1329; CHECK-NEXT:    v_readlane_b32 s30, v43, 0330; CHECK-NEXT:    s_mov_b32 s32, s33331; CHECK-NEXT:    v_readlane_b32 s4, v43, 14332; CHECK-NEXT:    s_or_saveexec_b64 s[6:7], -1333; CHECK-NEXT:    buffer_load_dword v43, off, s[0:3], s33 offset:12 ; 4-byte Folded Reload334; CHECK-NEXT:    s_mov_b64 exec, s[6:7]335; CHECK-NEXT:    s_mov_b32 s33, s4336; CHECK-NEXT:    s_waitcnt vmcnt(0)337; CHECK-NEXT:    s_setpc_b64 s[30:31]338  %powr = tail call fast double @_Z4powrdd(double %x, double %y)339  ret double %powr340}341 342; --------------------------------------------------------------------343; test pown344; --------------------------------------------------------------------345 346define half @test_pown_fast_f16(half %x, i32 %y) {347; CHECK-LABEL: test_pown_fast_f16:348; CHECK:       ; %bb.0:349; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)350; CHECK-NEXT:    v_cvt_f32_i32_e32 v2, v1351; CHECK-NEXT:    v_log_f16_e64 v3, |v0|352; CHECK-NEXT:    v_lshlrev_b16_e32 v1, 15, v1353; CHECK-NEXT:    v_and_b32_e32 v0, v1, v0354; CHECK-NEXT:    v_cvt_f16_f32_e32 v2, v2355; CHECK-NEXT:    v_mul_f16_e32 v2, v3, v2356; CHECK-NEXT:    v_exp_f16_e32 v2, v2357; CHECK-NEXT:    v_or_b32_e32 v0, v0, v2358; CHECK-NEXT:    s_setpc_b64 s[30:31]359  %call = tail call fast half @_Z4pownDhi(half %x, i32 %y)360  ret half %call361}362 363define float @test_pown_fast_f32(float %x, i32 %y) {364; CHECK-LABEL: test_pown_fast_f32:365; CHECK:       ; %bb.0:366; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)367; CHECK-NEXT:    s_mov_b32 s4, 0x800000368; CHECK-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4369; CHECK-NEXT:    v_cndmask_b32_e64 v3, 0, 32, vcc370; CHECK-NEXT:    v_ldexp_f32 v3, |v0|, v3371; CHECK-NEXT:    v_log_f32_e32 v3, v3372; CHECK-NEXT:    v_cvt_f32_i32_e32 v4, v1373; CHECK-NEXT:    v_mov_b32_e32 v2, 0x42000000374; CHECK-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc375; CHECK-NEXT:    v_sub_f32_e32 v2, v3, v2376; CHECK-NEXT:    v_mul_f32_e32 v3, v2, v4377; CHECK-NEXT:    s_mov_b32 s4, 0xc2fc0000378; CHECK-NEXT:    v_mov_b32_e32 v5, 0x42800000379; CHECK-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v3380; CHECK-NEXT:    v_cndmask_b32_e32 v3, 0, v5, vcc381; CHECK-NEXT:    v_fma_f32 v2, v2, v4, v3382; CHECK-NEXT:    v_exp_f32_e32 v2, v2383; CHECK-NEXT:    v_not_b32_e32 v3, 63384; CHECK-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc385; CHECK-NEXT:    v_lshlrev_b32_e32 v1, 31, v1386; CHECK-NEXT:    v_ldexp_f32 v2, v2, v3387; CHECK-NEXT:    v_and_or_b32 v0, v1, v0, v2388; CHECK-NEXT:    s_setpc_b64 s[30:31]389  %call = tail call fast float @_Z4pownfi(float %x, i32 %y)390  ret float %call391}392 393define double @test_pown_fast_f64(double %x, i32 %y) {394; CHECK-LABEL: test_pown_fast_f64:395; CHECK:       ; %bb.0:396; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)397; CHECK-NEXT:    s_mov_b32 s16, s33398; CHECK-NEXT:    s_mov_b32 s33, s32399; CHECK-NEXT:    s_or_saveexec_b64 s[18:19], -1400; CHECK-NEXT:    buffer_store_dword v43, off, s[0:3], s33 offset:12 ; 4-byte Folded Spill401; CHECK-NEXT:    s_mov_b64 exec, s[18:19]402; CHECK-NEXT:    v_writelane_b32 v43, s16, 14403; CHECK-NEXT:    v_writelane_b32 v43, s30, 0404; CHECK-NEXT:    v_writelane_b32 v43, s31, 1405; CHECK-NEXT:    v_writelane_b32 v43, s34, 2406; CHECK-NEXT:    v_writelane_b32 v43, s35, 3407; CHECK-NEXT:    v_writelane_b32 v43, s36, 4408; CHECK-NEXT:    v_writelane_b32 v43, s37, 5409; CHECK-NEXT:    v_writelane_b32 v43, s38, 6410; CHECK-NEXT:    v_writelane_b32 v43, s39, 7411; CHECK-NEXT:    s_addk_i32 s32, 0x800412; CHECK-NEXT:    v_writelane_b32 v43, s48, 8413; CHECK-NEXT:    v_writelane_b32 v43, s49, 9414; CHECK-NEXT:    s_mov_b64 s[48:49], s[4:5]415; CHECK-NEXT:    s_getpc_b64 s[4:5]416; CHECK-NEXT:    s_add_u32 s4, s4, _Z4log2d@gotpcrel32@lo+4417; CHECK-NEXT:    s_addc_u32 s5, s5, _Z4log2d@gotpcrel32@hi+12418; CHECK-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0419; CHECK-NEXT:    v_writelane_b32 v43, s50, 10420; CHECK-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill421; CHECK-NEXT:    buffer_store_dword v41, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill422; CHECK-NEXT:    buffer_store_dword v42, off, s[0:3], s33 ; 4-byte Folded Spill423; CHECK-NEXT:    v_writelane_b32 v43, s51, 11424; CHECK-NEXT:    v_mov_b32_e32 v42, v1425; CHECK-NEXT:    v_writelane_b32 v43, s52, 12426; CHECK-NEXT:    v_and_b32_e32 v1, 0x7fffffff, v42427; CHECK-NEXT:    s_mov_b64 s[4:5], s[48:49]428; CHECK-NEXT:    v_writelane_b32 v43, s53, 13429; CHECK-NEXT:    v_mov_b32_e32 v40, v31430; CHECK-NEXT:    v_mov_b32_e32 v41, v2431; CHECK-NEXT:    s_mov_b32 s50, s15432; CHECK-NEXT:    s_mov_b32 s51, s14433; CHECK-NEXT:    s_mov_b32 s52, s13434; CHECK-NEXT:    s_mov_b32 s53, s12435; CHECK-NEXT:    s_mov_b64 s[34:35], s[10:11]436; CHECK-NEXT:    s_mov_b64 s[36:37], s[8:9]437; CHECK-NEXT:    s_mov_b64 s[38:39], s[6:7]438; CHECK-NEXT:    s_waitcnt lgkmcnt(0)439; CHECK-NEXT:    s_swappc_b64 s[30:31], s[16:17]440; CHECK-NEXT:    v_cvt_f64_i32_e32 v[2:3], v41441; CHECK-NEXT:    s_getpc_b64 s[4:5]442; CHECK-NEXT:    s_add_u32 s4, s4, _Z4exp2d@gotpcrel32@lo+4443; CHECK-NEXT:    s_addc_u32 s5, s5, _Z4exp2d@gotpcrel32@hi+12444; CHECK-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0445; CHECK-NEXT:    s_mov_b64 s[4:5], s[48:49]446; CHECK-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]447; CHECK-NEXT:    s_mov_b64 s[6:7], s[38:39]448; CHECK-NEXT:    s_mov_b64 s[8:9], s[36:37]449; CHECK-NEXT:    s_mov_b64 s[10:11], s[34:35]450; CHECK-NEXT:    s_mov_b32 s12, s53451; CHECK-NEXT:    s_mov_b32 s13, s52452; CHECK-NEXT:    s_mov_b32 s14, s51453; CHECK-NEXT:    s_mov_b32 s15, s50454; CHECK-NEXT:    v_mov_b32_e32 v31, v40455; CHECK-NEXT:    s_waitcnt lgkmcnt(0)456; CHECK-NEXT:    s_swappc_b64 s[30:31], s[16:17]457; CHECK-NEXT:    v_lshlrev_b32_e32 v2, 31, v41458; CHECK-NEXT:    v_and_b32_e32 v2, v2, v42459; CHECK-NEXT:    buffer_load_dword v42, off, s[0:3], s33 ; 4-byte Folded Reload460; CHECK-NEXT:    buffer_load_dword v41, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload461; CHECK-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload462; CHECK-NEXT:    v_or_b32_e32 v1, v2, v1463; CHECK-NEXT:    v_readlane_b32 s53, v43, 13464; CHECK-NEXT:    v_readlane_b32 s52, v43, 12465; CHECK-NEXT:    v_readlane_b32 s51, v43, 11466; CHECK-NEXT:    v_readlane_b32 s50, v43, 10467; CHECK-NEXT:    v_readlane_b32 s49, v43, 9468; CHECK-NEXT:    v_readlane_b32 s48, v43, 8469; CHECK-NEXT:    v_readlane_b32 s39, v43, 7470; CHECK-NEXT:    v_readlane_b32 s38, v43, 6471; CHECK-NEXT:    v_readlane_b32 s37, v43, 5472; CHECK-NEXT:    v_readlane_b32 s36, v43, 4473; CHECK-NEXT:    v_readlane_b32 s35, v43, 3474; CHECK-NEXT:    v_readlane_b32 s34, v43, 2475; CHECK-NEXT:    v_readlane_b32 s31, v43, 1476; CHECK-NEXT:    v_readlane_b32 s30, v43, 0477; CHECK-NEXT:    s_mov_b32 s32, s33478; CHECK-NEXT:    v_readlane_b32 s4, v43, 14479; CHECK-NEXT:    s_or_saveexec_b64 s[6:7], -1480; CHECK-NEXT:    buffer_load_dword v43, off, s[0:3], s33 offset:12 ; 4-byte Folded Reload481; CHECK-NEXT:    s_mov_b64 exec, s[6:7]482; CHECK-NEXT:    s_mov_b32 s33, s4483; CHECK-NEXT:    s_waitcnt vmcnt(0)484; CHECK-NEXT:    s_setpc_b64 s[30:31]485  %call = tail call fast double @_Z4powndi(double %x, i32 %y)486  ret double %call487}488 489define half @test_pown_fast_f16_known_even(half %x, i32 %y.arg) {490; CHECK-LABEL: test_pown_fast_f16_known_even:491; CHECK:       ; %bb.0:492; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)493; CHECK-NEXT:    v_lshlrev_b32_e32 v1, 1, v1494; CHECK-NEXT:    v_cvt_f32_i32_e32 v1, v1495; CHECK-NEXT:    v_log_f16_e64 v0, |v0|496; CHECK-NEXT:    v_cvt_f16_f32_e32 v1, v1497; CHECK-NEXT:    v_mul_f16_e32 v0, v0, v1498; CHECK-NEXT:    v_exp_f16_e32 v0, v0499; CHECK-NEXT:    s_setpc_b64 s[30:31]500  %y = shl i32 %y.arg, 1501  %call = tail call fast half @_Z4pownDhi(half %x, i32 %y)502  ret half %call503}504 505define float @test_pown_fast_f32_known_even(float %x, i32 %y.arg) {506; CHECK-LABEL: test_pown_fast_f32_known_even:507; CHECK:       ; %bb.0:508; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)509; CHECK-NEXT:    s_mov_b32 s4, 0x800000510; CHECK-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4511; CHECK-NEXT:    v_cndmask_b32_e64 v3, 0, 32, vcc512; CHECK-NEXT:    v_ldexp_f32 v0, |v0|, v3513; CHECK-NEXT:    v_lshlrev_b32_e32 v1, 1, v1514; CHECK-NEXT:    v_log_f32_e32 v0, v0515; CHECK-NEXT:    v_cvt_f32_i32_e32 v1, v1516; CHECK-NEXT:    v_mov_b32_e32 v2, 0x42000000517; CHECK-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc518; CHECK-NEXT:    v_sub_f32_e32 v0, v0, v2519; CHECK-NEXT:    v_mul_f32_e32 v2, v0, v1520; CHECK-NEXT:    s_mov_b32 s4, 0xc2fc0000521; CHECK-NEXT:    v_mov_b32_e32 v3, 0x42800000522; CHECK-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v2523; CHECK-NEXT:    v_cndmask_b32_e32 v2, 0, v3, vcc524; CHECK-NEXT:    v_fma_f32 v0, v0, v1, v2525; CHECK-NEXT:    v_exp_f32_e32 v0, v0526; CHECK-NEXT:    v_not_b32_e32 v1, 63527; CHECK-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc528; CHECK-NEXT:    v_ldexp_f32 v0, v0, v1529; CHECK-NEXT:    s_setpc_b64 s[30:31]530  %y = shl i32 %y.arg, 1531  %call = tail call fast float @_Z4pownfi(float %x, i32 %y)532  ret float %call533}534 535define double @test_pown_fast_f64_known_even(double %x, i32 %y.arg) {536; CHECK-LABEL: test_pown_fast_f64_known_even:537; CHECK:       ; %bb.0:538; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)539; CHECK-NEXT:    s_mov_b32 s16, s33540; CHECK-NEXT:    s_mov_b32 s33, s32541; CHECK-NEXT:    s_or_saveexec_b64 s[18:19], -1542; CHECK-NEXT:    buffer_store_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill543; CHECK-NEXT:    s_mov_b64 exec, s[18:19]544; CHECK-NEXT:    v_writelane_b32 v42, s16, 14545; CHECK-NEXT:    v_writelane_b32 v42, s30, 0546; CHECK-NEXT:    v_writelane_b32 v42, s31, 1547; CHECK-NEXT:    v_writelane_b32 v42, s34, 2548; CHECK-NEXT:    v_writelane_b32 v42, s35, 3549; CHECK-NEXT:    v_writelane_b32 v42, s36, 4550; CHECK-NEXT:    v_writelane_b32 v42, s37, 5551; CHECK-NEXT:    v_writelane_b32 v42, s38, 6552; CHECK-NEXT:    v_writelane_b32 v42, s39, 7553; CHECK-NEXT:    s_addk_i32 s32, 0x400554; CHECK-NEXT:    v_writelane_b32 v42, s48, 8555; CHECK-NEXT:    v_writelane_b32 v42, s49, 9556; CHECK-NEXT:    s_mov_b64 s[48:49], s[4:5]557; CHECK-NEXT:    s_getpc_b64 s[4:5]558; CHECK-NEXT:    s_add_u32 s4, s4, _Z4log2d@gotpcrel32@lo+4559; CHECK-NEXT:    s_addc_u32 s5, s5, _Z4log2d@gotpcrel32@hi+12560; CHECK-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0561; CHECK-NEXT:    v_writelane_b32 v42, s50, 10562; CHECK-NEXT:    v_writelane_b32 v42, s51, 11563; CHECK-NEXT:    v_writelane_b32 v42, s52, 12564; CHECK-NEXT:    v_and_b32_e32 v1, 0x7fffffff, v1565; CHECK-NEXT:    s_mov_b64 s[4:5], s[48:49]566; CHECK-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill567; CHECK-NEXT:    buffer_store_dword v41, off, s[0:3], s33 ; 4-byte Folded Spill568; CHECK-NEXT:    v_writelane_b32 v42, s53, 13569; CHECK-NEXT:    v_mov_b32_e32 v40, v31570; CHECK-NEXT:    s_mov_b32 s50, s15571; CHECK-NEXT:    s_mov_b32 s51, s14572; CHECK-NEXT:    s_mov_b32 s52, s13573; CHECK-NEXT:    s_mov_b32 s53, s12574; CHECK-NEXT:    s_mov_b64 s[34:35], s[10:11]575; CHECK-NEXT:    s_mov_b64 s[36:37], s[8:9]576; CHECK-NEXT:    s_mov_b64 s[38:39], s[6:7]577; CHECK-NEXT:    v_lshlrev_b32_e32 v41, 1, v2578; CHECK-NEXT:    s_waitcnt lgkmcnt(0)579; CHECK-NEXT:    s_swappc_b64 s[30:31], s[16:17]580; CHECK-NEXT:    v_cvt_f64_i32_e32 v[2:3], v41581; CHECK-NEXT:    s_getpc_b64 s[4:5]582; CHECK-NEXT:    s_add_u32 s4, s4, _Z4exp2d@gotpcrel32@lo+4583; CHECK-NEXT:    s_addc_u32 s5, s5, _Z4exp2d@gotpcrel32@hi+12584; CHECK-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0585; CHECK-NEXT:    s_mov_b64 s[4:5], s[48:49]586; CHECK-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]587; CHECK-NEXT:    s_mov_b64 s[6:7], s[38:39]588; CHECK-NEXT:    s_mov_b64 s[8:9], s[36:37]589; CHECK-NEXT:    s_mov_b64 s[10:11], s[34:35]590; CHECK-NEXT:    s_mov_b32 s12, s53591; CHECK-NEXT:    s_mov_b32 s13, s52592; CHECK-NEXT:    s_mov_b32 s14, s51593; CHECK-NEXT:    s_mov_b32 s15, s50594; CHECK-NEXT:    v_mov_b32_e32 v31, v40595; CHECK-NEXT:    s_waitcnt lgkmcnt(0)596; CHECK-NEXT:    s_swappc_b64 s[30:31], s[16:17]597; CHECK-NEXT:    buffer_load_dword v41, off, s[0:3], s33 ; 4-byte Folded Reload598; CHECK-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload599; CHECK-NEXT:    v_readlane_b32 s53, v42, 13600; CHECK-NEXT:    v_readlane_b32 s52, v42, 12601; CHECK-NEXT:    v_readlane_b32 s51, v42, 11602; CHECK-NEXT:    v_readlane_b32 s50, v42, 10603; CHECK-NEXT:    v_readlane_b32 s49, v42, 9604; CHECK-NEXT:    v_readlane_b32 s48, v42, 8605; CHECK-NEXT:    v_readlane_b32 s39, v42, 7606; CHECK-NEXT:    v_readlane_b32 s38, v42, 6607; CHECK-NEXT:    v_readlane_b32 s37, v42, 5608; CHECK-NEXT:    v_readlane_b32 s36, v42, 4609; CHECK-NEXT:    v_readlane_b32 s35, v42, 3610; CHECK-NEXT:    v_readlane_b32 s34, v42, 2611; CHECK-NEXT:    v_readlane_b32 s31, v42, 1612; CHECK-NEXT:    v_readlane_b32 s30, v42, 0613; CHECK-NEXT:    s_mov_b32 s32, s33614; CHECK-NEXT:    v_readlane_b32 s4, v42, 14615; CHECK-NEXT:    s_or_saveexec_b64 s[6:7], -1616; CHECK-NEXT:    buffer_load_dword v42, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload617; CHECK-NEXT:    s_mov_b64 exec, s[6:7]618; CHECK-NEXT:    s_mov_b32 s33, s4619; CHECK-NEXT:    s_waitcnt vmcnt(0)620; CHECK-NEXT:    s_setpc_b64 s[30:31]621  %y = shl i32 %y.arg, 1622  %call = tail call fast double @_Z4powndi(double %x, i32 %y)623  ret double %call624}625 626define half @test_pown_fast_f16_known_odd(half %x, i32 %y.arg) {627; CHECK-LABEL: test_pown_fast_f16_known_odd:628; CHECK:       ; %bb.0:629; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)630; CHECK-NEXT:    v_or_b32_e32 v1, 1, v1631; CHECK-NEXT:    v_cvt_f32_i32_e32 v1, v1632; CHECK-NEXT:    v_log_f16_e64 v2, |v0|633; CHECK-NEXT:    s_movk_i32 s4, 0x7fff634; CHECK-NEXT:    v_cvt_f16_f32_e32 v1, v1635; CHECK-NEXT:    v_mul_f16_e32 v1, v2, v1636; CHECK-NEXT:    v_exp_f16_e32 v1, v1637; CHECK-NEXT:    v_bfi_b32 v0, s4, v1, v0638; CHECK-NEXT:    s_setpc_b64 s[30:31]639  %y = or i32 %y.arg, 1640  %call = tail call fast half @_Z4pownDhi(half %x, i32 %y)641  ret half %call642}643 644define float @test_pown_fast_f32_known_odd(float %x, i32 %y.arg) {645; CHECK-LABEL: test_pown_fast_f32_known_odd:646; CHECK:       ; %bb.0:647; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)648; CHECK-NEXT:    s_mov_b32 s4, 0x800000649; CHECK-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4650; CHECK-NEXT:    v_cndmask_b32_e64 v3, 0, 32, vcc651; CHECK-NEXT:    v_ldexp_f32 v3, |v0|, v3652; CHECK-NEXT:    v_or_b32_e32 v1, 1, v1653; CHECK-NEXT:    v_log_f32_e32 v3, v3654; CHECK-NEXT:    v_cvt_f32_i32_e32 v1, v1655; CHECK-NEXT:    v_mov_b32_e32 v2, 0x42000000656; CHECK-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc657; CHECK-NEXT:    v_sub_f32_e32 v2, v3, v2658; CHECK-NEXT:    v_mul_f32_e32 v3, v2, v1659; CHECK-NEXT:    s_mov_b32 s4, 0xc2fc0000660; CHECK-NEXT:    v_mov_b32_e32 v4, 0x42800000661; CHECK-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v3662; CHECK-NEXT:    v_cndmask_b32_e32 v3, 0, v4, vcc663; CHECK-NEXT:    v_fma_f32 v1, v2, v1, v3664; CHECK-NEXT:    v_exp_f32_e32 v1, v1665; CHECK-NEXT:    v_not_b32_e32 v2, 63666; CHECK-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc667; CHECK-NEXT:    s_brev_b32 s4, -2668; CHECK-NEXT:    v_ldexp_f32 v1, v1, v2669; CHECK-NEXT:    v_bfi_b32 v0, s4, v1, v0670; CHECK-NEXT:    s_setpc_b64 s[30:31]671  %y = or i32 %y.arg, 1672  %call = tail call fast float @_Z4pownfi(float %x, i32 %y)673  ret float %call674}675 676define double @test_pown_fast_f64_known_odd(double %x, i32 %y.arg) {677; CHECK-LABEL: test_pown_fast_f64_known_odd:678; CHECK:       ; %bb.0:679; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)680; CHECK-NEXT:    s_mov_b32 s16, s33681; CHECK-NEXT:    s_mov_b32 s33, s32682; CHECK-NEXT:    s_or_saveexec_b64 s[18:19], -1683; CHECK-NEXT:    buffer_store_dword v43, off, s[0:3], s33 offset:12 ; 4-byte Folded Spill684; CHECK-NEXT:    s_mov_b64 exec, s[18:19]685; CHECK-NEXT:    v_writelane_b32 v43, s16, 14686; CHECK-NEXT:    v_writelane_b32 v43, s30, 0687; CHECK-NEXT:    v_writelane_b32 v43, s31, 1688; CHECK-NEXT:    v_writelane_b32 v43, s34, 2689; CHECK-NEXT:    v_writelane_b32 v43, s35, 3690; CHECK-NEXT:    v_writelane_b32 v43, s36, 4691; CHECK-NEXT:    v_writelane_b32 v43, s37, 5692; CHECK-NEXT:    v_writelane_b32 v43, s38, 6693; CHECK-NEXT:    v_writelane_b32 v43, s39, 7694; CHECK-NEXT:    s_addk_i32 s32, 0x800695; CHECK-NEXT:    v_writelane_b32 v43, s48, 8696; CHECK-NEXT:    v_writelane_b32 v43, s49, 9697; CHECK-NEXT:    s_mov_b64 s[48:49], s[4:5]698; CHECK-NEXT:    s_getpc_b64 s[4:5]699; CHECK-NEXT:    s_add_u32 s4, s4, _Z4log2d@gotpcrel32@lo+4700; CHECK-NEXT:    s_addc_u32 s5, s5, _Z4log2d@gotpcrel32@hi+12701; CHECK-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0702; CHECK-NEXT:    v_writelane_b32 v43, s50, 10703; CHECK-NEXT:    buffer_store_dword v40, off, s[0:3], s33 offset:8 ; 4-byte Folded Spill704; CHECK-NEXT:    buffer_store_dword v41, off, s[0:3], s33 offset:4 ; 4-byte Folded Spill705; CHECK-NEXT:    buffer_store_dword v42, off, s[0:3], s33 ; 4-byte Folded Spill706; CHECK-NEXT:    v_writelane_b32 v43, s51, 11707; CHECK-NEXT:    v_mov_b32_e32 v41, v1708; CHECK-NEXT:    v_writelane_b32 v43, s52, 12709; CHECK-NEXT:    v_and_b32_e32 v1, 0x7fffffff, v41710; CHECK-NEXT:    s_mov_b64 s[4:5], s[48:49]711; CHECK-NEXT:    v_writelane_b32 v43, s53, 13712; CHECK-NEXT:    v_mov_b32_e32 v40, v31713; CHECK-NEXT:    s_mov_b32 s50, s15714; CHECK-NEXT:    s_mov_b32 s51, s14715; CHECK-NEXT:    s_mov_b32 s52, s13716; CHECK-NEXT:    s_mov_b32 s53, s12717; CHECK-NEXT:    s_mov_b64 s[34:35], s[10:11]718; CHECK-NEXT:    s_mov_b64 s[36:37], s[8:9]719; CHECK-NEXT:    s_mov_b64 s[38:39], s[6:7]720; CHECK-NEXT:    v_or_b32_e32 v42, 1, v2721; CHECK-NEXT:    s_waitcnt lgkmcnt(0)722; CHECK-NEXT:    s_swappc_b64 s[30:31], s[16:17]723; CHECK-NEXT:    v_cvt_f64_i32_e32 v[2:3], v42724; CHECK-NEXT:    s_getpc_b64 s[4:5]725; CHECK-NEXT:    s_add_u32 s4, s4, _Z4exp2d@gotpcrel32@lo+4726; CHECK-NEXT:    s_addc_u32 s5, s5, _Z4exp2d@gotpcrel32@hi+12727; CHECK-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0728; CHECK-NEXT:    s_mov_b64 s[4:5], s[48:49]729; CHECK-NEXT:    v_mul_f64 v[0:1], v[0:1], v[2:3]730; CHECK-NEXT:    s_mov_b64 s[6:7], s[38:39]731; CHECK-NEXT:    s_mov_b64 s[8:9], s[36:37]732; CHECK-NEXT:    s_mov_b64 s[10:11], s[34:35]733; CHECK-NEXT:    s_mov_b32 s12, s53734; CHECK-NEXT:    s_mov_b32 s13, s52735; CHECK-NEXT:    s_mov_b32 s14, s51736; CHECK-NEXT:    s_mov_b32 s15, s50737; CHECK-NEXT:    v_mov_b32_e32 v31, v40738; CHECK-NEXT:    s_waitcnt lgkmcnt(0)739; CHECK-NEXT:    s_swappc_b64 s[30:31], s[16:17]740; CHECK-NEXT:    v_and_b32_e32 v2, 0x80000000, v41741; CHECK-NEXT:    buffer_load_dword v42, off, s[0:3], s33 ; 4-byte Folded Reload742; CHECK-NEXT:    buffer_load_dword v41, off, s[0:3], s33 offset:4 ; 4-byte Folded Reload743; CHECK-NEXT:    buffer_load_dword v40, off, s[0:3], s33 offset:8 ; 4-byte Folded Reload744; CHECK-NEXT:    v_or_b32_e32 v1, v2, v1745; CHECK-NEXT:    v_readlane_b32 s53, v43, 13746; CHECK-NEXT:    v_readlane_b32 s52, v43, 12747; CHECK-NEXT:    v_readlane_b32 s51, v43, 11748; CHECK-NEXT:    v_readlane_b32 s50, v43, 10749; CHECK-NEXT:    v_readlane_b32 s49, v43, 9750; CHECK-NEXT:    v_readlane_b32 s48, v43, 8751; CHECK-NEXT:    v_readlane_b32 s39, v43, 7752; CHECK-NEXT:    v_readlane_b32 s38, v43, 6753; CHECK-NEXT:    v_readlane_b32 s37, v43, 5754; CHECK-NEXT:    v_readlane_b32 s36, v43, 4755; CHECK-NEXT:    v_readlane_b32 s35, v43, 3756; CHECK-NEXT:    v_readlane_b32 s34, v43, 2757; CHECK-NEXT:    v_readlane_b32 s31, v43, 1758; CHECK-NEXT:    v_readlane_b32 s30, v43, 0759; CHECK-NEXT:    s_mov_b32 s32, s33760; CHECK-NEXT:    v_readlane_b32 s4, v43, 14761; CHECK-NEXT:    s_or_saveexec_b64 s[6:7], -1762; CHECK-NEXT:    buffer_load_dword v43, off, s[0:3], s33 offset:12 ; 4-byte Folded Reload763; CHECK-NEXT:    s_mov_b64 exec, s[6:7]764; CHECK-NEXT:    s_mov_b32 s33, s4765; CHECK-NEXT:    s_waitcnt vmcnt(0)766; CHECK-NEXT:    s_setpc_b64 s[30:31]767  %y = or i32 %y.arg, 1768  %call = tail call fast double @_Z4powndi(double %x, i32 %y)769  ret double %call770}771 772