1494 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc -mtriple=aarch64 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD3; RUN: llc -mtriple=aarch64 -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI4 5define double @powi_f64(double %a, i32 %b) {6; CHECK-LABEL: powi_f64:7; CHECK: // %bb.0: // %entry8; CHECK-NEXT: b __powidf29entry:10 %c = call double @llvm.powi.f64.i32(double %a, i32 %b)11 ret double %c12}13 14define float @powi_f32(float %a, i32 %b) {15; CHECK-LABEL: powi_f32:16; CHECK: // %bb.0: // %entry17; CHECK-NEXT: b __powisf218entry:19 %c = call float @llvm.powi.f32.i32(float %a, i32 %b)20 ret float %c21}22 23define half @powi_f16(half %a, i32 %b) {24; CHECK-LABEL: powi_f16:25; CHECK: // %bb.0: // %entry26; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill27; CHECK-NEXT: .cfi_def_cfa_offset 1628; CHECK-NEXT: .cfi_offset w30, -1629; CHECK-NEXT: fcvt s0, h030; CHECK-NEXT: bl __powisf231; CHECK-NEXT: fcvt h0, s032; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload33; CHECK-NEXT: ret34entry:35 %c = call half @llvm.powi.f16.i32(half %a, i32 %b)36 ret half %c37}38 39define fp128 @powi_fp128(fp128 %a, i32 %b) {40; CHECK-LABEL: powi_fp128:41; CHECK: // %bb.0: // %entry42; CHECK-NEXT: b __powitf243entry:44 %c = call fp128 @llvm.powi.fp128.i32(fp128 %a, i32 %b)45 ret fp128 %c46}47 48define <1 x double> @powi_v1f64(<1 x double> %a, i32 %b) {49; CHECK-LABEL: powi_v1f64:50; CHECK: // %bb.0: // %entry51; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill52; CHECK-NEXT: .cfi_def_cfa_offset 1653; CHECK-NEXT: .cfi_offset w30, -1654; CHECK-NEXT: bl __powidf255; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload56; CHECK-NEXT: ret57entry:58 %c = call <1 x double> @llvm.powi.v1f64.i32(<1 x double> %a, i32 %b)59 ret <1 x double> %c60}61 62define <2 x double> @powi_v2f64(<2 x double> %a, i32 %b) {63; CHECK-SD-LABEL: powi_v2f64:64; CHECK-SD: // %bb.0: // %entry65; CHECK-SD-NEXT: sub sp, sp, #4866; CHECK-SD-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill67; CHECK-SD-NEXT: .cfi_def_cfa_offset 4868; CHECK-SD-NEXT: .cfi_offset w19, -869; CHECK-SD-NEXT: .cfi_offset w30, -1670; CHECK-SD-NEXT: str q0, [sp] // 16-byte Spill71; CHECK-SD-NEXT: mov d0, v0.d[1]72; CHECK-SD-NEXT: mov w19, w073; CHECK-SD-NEXT: bl __powidf274; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q075; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Spill76; CHECK-SD-NEXT: mov w0, w1977; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload78; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q079; CHECK-SD-NEXT: bl __powidf280; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload81; CHECK-SD-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload82; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q083; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]84; CHECK-SD-NEXT: add sp, sp, #4885; CHECK-SD-NEXT: ret86;87; CHECK-GI-LABEL: powi_v2f64:88; CHECK-GI: // %bb.0: // %entry89; CHECK-GI-NEXT: sub sp, sp, #4890; CHECK-GI-NEXT: str d8, [sp, #16] // 8-byte Spill91; CHECK-GI-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill92; CHECK-GI-NEXT: .cfi_def_cfa_offset 4893; CHECK-GI-NEXT: .cfi_offset w19, -894; CHECK-GI-NEXT: .cfi_offset w30, -1695; CHECK-GI-NEXT: .cfi_offset b8, -3296; CHECK-GI-NEXT: mov d8, v0.d[1]97; CHECK-GI-NEXT: mov w19, w098; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q099; CHECK-GI-NEXT: bl __powidf2100; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0101; CHECK-GI-NEXT: str q0, [sp] // 16-byte Spill102; CHECK-GI-NEXT: mov w0, w19103; CHECK-GI-NEXT: fmov d0, d8104; CHECK-GI-NEXT: bl __powidf2105; CHECK-GI-NEXT: ldr q1, [sp] // 16-byte Reload106; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0107; CHECK-GI-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload108; CHECK-GI-NEXT: ldr d8, [sp, #16] // 8-byte Reload109; CHECK-GI-NEXT: mov v1.d[1], v0.d[0]110; CHECK-GI-NEXT: mov v0.16b, v1.16b111; CHECK-GI-NEXT: add sp, sp, #48112; CHECK-GI-NEXT: ret113entry:114 %c = call <2 x double> @llvm.powi.v2f64.i32(<2 x double> %a, i32 %b)115 ret <2 x double> %c116}117 118define <3 x double> @powi_v3f64(<3 x double> %a, i32 %b) {119; CHECK-SD-LABEL: powi_v3f64:120; CHECK-SD: // %bb.0: // %entry121; CHECK-SD-NEXT: str d10, [sp, #-48]! // 8-byte Folded Spill122; CHECK-SD-NEXT: stp d9, d8, [sp, #16] // 16-byte Folded Spill123; CHECK-SD-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill124; CHECK-SD-NEXT: .cfi_def_cfa_offset 48125; CHECK-SD-NEXT: .cfi_offset w19, -8126; CHECK-SD-NEXT: .cfi_offset w30, -16127; CHECK-SD-NEXT: .cfi_offset b8, -24128; CHECK-SD-NEXT: .cfi_offset b9, -32129; CHECK-SD-NEXT: .cfi_offset b10, -48130; CHECK-SD-NEXT: mov w19, w0131; CHECK-SD-NEXT: fmov d8, d2132; CHECK-SD-NEXT: fmov d9, d1133; CHECK-SD-NEXT: bl __powidf2134; CHECK-SD-NEXT: fmov d10, d0135; CHECK-SD-NEXT: fmov d0, d9136; CHECK-SD-NEXT: mov w0, w19137; CHECK-SD-NEXT: bl __powidf2138; CHECK-SD-NEXT: fmov d9, d0139; CHECK-SD-NEXT: fmov d0, d8140; CHECK-SD-NEXT: mov w0, w19141; CHECK-SD-NEXT: bl __powidf2142; CHECK-SD-NEXT: fmov d1, d9143; CHECK-SD-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload144; CHECK-SD-NEXT: ldp d9, d8, [sp, #16] // 16-byte Folded Reload145; CHECK-SD-NEXT: fmov d2, d0146; CHECK-SD-NEXT: fmov d0, d10147; CHECK-SD-NEXT: ldr d10, [sp], #48 // 8-byte Folded Reload148; CHECK-SD-NEXT: ret149;150; CHECK-GI-LABEL: powi_v3f64:151; CHECK-GI: // %bb.0: // %entry152; CHECK-GI-NEXT: str d10, [sp, #-48]! // 8-byte Folded Spill153; CHECK-GI-NEXT: stp d9, d8, [sp, #16] // 16-byte Folded Spill154; CHECK-GI-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill155; CHECK-GI-NEXT: .cfi_def_cfa_offset 48156; CHECK-GI-NEXT: .cfi_offset w19, -8157; CHECK-GI-NEXT: .cfi_offset w30, -16158; CHECK-GI-NEXT: .cfi_offset b8, -24159; CHECK-GI-NEXT: .cfi_offset b9, -32160; CHECK-GI-NEXT: .cfi_offset b10, -48161; CHECK-GI-NEXT: fmov d8, d1162; CHECK-GI-NEXT: fmov d9, d2163; CHECK-GI-NEXT: mov w19, w0164; CHECK-GI-NEXT: bl __powidf2165; CHECK-GI-NEXT: fmov d10, d0166; CHECK-GI-NEXT: fmov d0, d8167; CHECK-GI-NEXT: mov w0, w19168; CHECK-GI-NEXT: bl __powidf2169; CHECK-GI-NEXT: fmov d8, d0170; CHECK-GI-NEXT: fmov d0, d9171; CHECK-GI-NEXT: mov w0, w19172; CHECK-GI-NEXT: bl __powidf2173; CHECK-GI-NEXT: fmov d1, d8174; CHECK-GI-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload175; CHECK-GI-NEXT: ldp d9, d8, [sp, #16] // 16-byte Folded Reload176; CHECK-GI-NEXT: fmov d2, d0177; CHECK-GI-NEXT: fmov d0, d10178; CHECK-GI-NEXT: ldr d10, [sp], #48 // 8-byte Folded Reload179; CHECK-GI-NEXT: ret180entry:181 %c = call <3 x double> @llvm.powi.v3f64.i32(<3 x double> %a, i32 %b)182 ret <3 x double> %c183}184 185define <4 x double> @powi_v4f64(<4 x double> %a, i32 %b) {186; CHECK-SD-LABEL: powi_v4f64:187; CHECK-SD: // %bb.0: // %entry188; CHECK-SD-NEXT: sub sp, sp, #64189; CHECK-SD-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill190; CHECK-SD-NEXT: .cfi_def_cfa_offset 64191; CHECK-SD-NEXT: .cfi_offset w19, -8192; CHECK-SD-NEXT: .cfi_offset w30, -16193; CHECK-SD-NEXT: str q0, [sp] // 16-byte Spill194; CHECK-SD-NEXT: mov d0, v0.d[1]195; CHECK-SD-NEXT: mov w19, w0196; CHECK-SD-NEXT: str q1, [sp, #32] // 16-byte Spill197; CHECK-SD-NEXT: bl __powidf2198; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0199; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Spill200; CHECK-SD-NEXT: mov w0, w19201; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload202; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0203; CHECK-SD-NEXT: bl __powidf2204; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload205; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0206; CHECK-SD-NEXT: mov w0, w19207; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]208; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Spill209; CHECK-SD-NEXT: ldr q0, [sp, #32] // 16-byte Reload210; CHECK-SD-NEXT: mov d0, v0.d[1]211; CHECK-SD-NEXT: bl __powidf2212; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0213; CHECK-SD-NEXT: str q0, [sp] // 16-byte Spill214; CHECK-SD-NEXT: mov w0, w19215; CHECK-SD-NEXT: ldr q0, [sp, #32] // 16-byte Reload216; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0217; CHECK-SD-NEXT: bl __powidf2218; CHECK-SD-NEXT: fmov d1, d0219; CHECK-SD-NEXT: ldp q2, q0, [sp] // 32-byte Folded Reload220; CHECK-SD-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload221; CHECK-SD-NEXT: mov v1.d[1], v2.d[0]222; CHECK-SD-NEXT: add sp, sp, #64223; CHECK-SD-NEXT: ret224;225; CHECK-GI-LABEL: powi_v4f64:226; CHECK-GI: // %bb.0: // %entry227; CHECK-GI-NEXT: sub sp, sp, #80228; CHECK-GI-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill229; CHECK-GI-NEXT: stp x30, x19, [sp, #64] // 16-byte Folded Spill230; CHECK-GI-NEXT: .cfi_def_cfa_offset 80231; CHECK-GI-NEXT: .cfi_offset w19, -8232; CHECK-GI-NEXT: .cfi_offset w30, -16233; CHECK-GI-NEXT: .cfi_offset b8, -24234; CHECK-GI-NEXT: .cfi_offset b9, -32235; CHECK-GI-NEXT: str q1, [sp] // 16-byte Spill236; CHECK-GI-NEXT: mov d8, v0.d[1]237; CHECK-GI-NEXT: mov d9, v1.d[1]238; CHECK-GI-NEXT: mov w19, w0239; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0240; CHECK-GI-NEXT: bl __powidf2241; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0242; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Spill243; CHECK-GI-NEXT: mov w0, w19244; CHECK-GI-NEXT: fmov d0, d8245; CHECK-GI-NEXT: bl __powidf2246; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0247; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Spill248; CHECK-GI-NEXT: mov w0, w19249; CHECK-GI-NEXT: ldr q0, [sp] // 16-byte Reload250; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0251; CHECK-GI-NEXT: bl __powidf2252; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0253; CHECK-GI-NEXT: str q0, [sp] // 16-byte Spill254; CHECK-GI-NEXT: mov w0, w19255; CHECK-GI-NEXT: fmov d0, d9256; CHECK-GI-NEXT: bl __powidf2257; CHECK-GI-NEXT: ldp q1, q2, [sp, #16] // 32-byte Folded Reload258; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0259; CHECK-GI-NEXT: ldp x30, x19, [sp, #64] // 16-byte Folded Reload260; CHECK-GI-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload261; CHECK-GI-NEXT: mov v2.d[1], v1.d[0]262; CHECK-GI-NEXT: ldr q1, [sp] // 16-byte Reload263; CHECK-GI-NEXT: mov v1.d[1], v0.d[0]264; CHECK-GI-NEXT: mov v0.16b, v2.16b265; CHECK-GI-NEXT: add sp, sp, #80266; CHECK-GI-NEXT: ret267entry:268 %c = call <4 x double> @llvm.powi.v4f64.i32(<4 x double> %a, i32 %b)269 ret <4 x double> %c270}271 272define <2 x float> @powi_v2f32(<2 x float> %a, i32 %b) {273; CHECK-SD-LABEL: powi_v2f32:274; CHECK-SD: // %bb.0: // %entry275; CHECK-SD-NEXT: sub sp, sp, #48276; CHECK-SD-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill277; CHECK-SD-NEXT: .cfi_def_cfa_offset 48278; CHECK-SD-NEXT: .cfi_offset w19, -8279; CHECK-SD-NEXT: .cfi_offset w30, -16280; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0281; CHECK-SD-NEXT: str q0, [sp] // 16-byte Spill282; CHECK-SD-NEXT: mov w19, w0283; CHECK-SD-NEXT: mov s0, v0.s[1]284; CHECK-SD-NEXT: bl __powisf2285; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0286; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Spill287; CHECK-SD-NEXT: mov w0, w19288; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload289; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0290; CHECK-SD-NEXT: bl __powisf2291; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload292; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0293; CHECK-SD-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload294; CHECK-SD-NEXT: mov v0.s[1], v1.s[0]295; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0296; CHECK-SD-NEXT: add sp, sp, #48297; CHECK-SD-NEXT: ret298;299; CHECK-GI-LABEL: powi_v2f32:300; CHECK-GI: // %bb.0: // %entry301; CHECK-GI-NEXT: sub sp, sp, #48302; CHECK-GI-NEXT: str d8, [sp, #16] // 8-byte Spill303; CHECK-GI-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill304; CHECK-GI-NEXT: .cfi_def_cfa_offset 48305; CHECK-GI-NEXT: .cfi_offset w19, -8306; CHECK-GI-NEXT: .cfi_offset w30, -16307; CHECK-GI-NEXT: .cfi_offset b8, -32308; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0309; CHECK-GI-NEXT: mov s8, v0.s[1]310; CHECK-GI-NEXT: mov w19, w0311; CHECK-GI-NEXT: // kill: def $s0 killed $s0 killed $q0312; CHECK-GI-NEXT: bl __powisf2313; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0314; CHECK-GI-NEXT: str q0, [sp] // 16-byte Spill315; CHECK-GI-NEXT: mov w0, w19316; CHECK-GI-NEXT: fmov s0, s8317; CHECK-GI-NEXT: bl __powisf2318; CHECK-GI-NEXT: ldr q1, [sp] // 16-byte Reload319; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0320; CHECK-GI-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload321; CHECK-GI-NEXT: ldr d8, [sp, #16] // 8-byte Reload322; CHECK-GI-NEXT: mov v1.s[1], v0.s[0]323; CHECK-GI-NEXT: fmov d0, d1324; CHECK-GI-NEXT: add sp, sp, #48325; CHECK-GI-NEXT: ret326entry:327 %c = call <2 x float> @llvm.powi.v2f32.i32(<2 x float> %a, i32 %b)328 ret <2 x float> %c329}330 331define <3 x float> @powi_v3f32(<3 x float> %a, i32 %b) {332; CHECK-SD-LABEL: powi_v3f32:333; CHECK-SD: // %bb.0: // %entry334; CHECK-SD-NEXT: sub sp, sp, #48335; CHECK-SD-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill336; CHECK-SD-NEXT: .cfi_def_cfa_offset 48337; CHECK-SD-NEXT: .cfi_offset w19, -8338; CHECK-SD-NEXT: .cfi_offset w30, -16339; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Spill340; CHECK-SD-NEXT: mov s0, v0.s[1]341; CHECK-SD-NEXT: mov w19, w0342; CHECK-SD-NEXT: bl __powisf2343; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0344; CHECK-SD-NEXT: str q0, [sp] // 16-byte Spill345; CHECK-SD-NEXT: mov w0, w19346; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload347; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0348; CHECK-SD-NEXT: bl __powisf2349; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Reload350; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0351; CHECK-SD-NEXT: mov w0, w19352; CHECK-SD-NEXT: mov v0.s[1], v1.s[0]353; CHECK-SD-NEXT: str q0, [sp] // 16-byte Spill354; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload355; CHECK-SD-NEXT: mov s0, v0.s[2]356; CHECK-SD-NEXT: bl __powisf2357; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Reload358; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0359; CHECK-SD-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload360; CHECK-SD-NEXT: mov v1.s[2], v0.s[0]361; CHECK-SD-NEXT: mov v0.16b, v1.16b362; CHECK-SD-NEXT: add sp, sp, #48363; CHECK-SD-NEXT: ret364;365; CHECK-GI-LABEL: powi_v3f32:366; CHECK-GI: // %bb.0: // %entry367; CHECK-GI-NEXT: sub sp, sp, #64368; CHECK-GI-NEXT: stp d9, d8, [sp, #32] // 16-byte Folded Spill369; CHECK-GI-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill370; CHECK-GI-NEXT: .cfi_def_cfa_offset 64371; CHECK-GI-NEXT: .cfi_offset w19, -8372; CHECK-GI-NEXT: .cfi_offset w30, -16373; CHECK-GI-NEXT: .cfi_offset b8, -24374; CHECK-GI-NEXT: .cfi_offset b9, -32375; CHECK-GI-NEXT: mov s8, v0.s[1]376; CHECK-GI-NEXT: mov s9, v0.s[2]377; CHECK-GI-NEXT: mov w19, w0378; CHECK-GI-NEXT: // kill: def $s0 killed $s0 killed $q0379; CHECK-GI-NEXT: bl __powisf2380; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0381; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Spill382; CHECK-GI-NEXT: mov w0, w19383; CHECK-GI-NEXT: fmov s0, s8384; CHECK-GI-NEXT: bl __powisf2385; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0386; CHECK-GI-NEXT: str q0, [sp] // 16-byte Spill387; CHECK-GI-NEXT: mov w0, w19388; CHECK-GI-NEXT: fmov s0, s9389; CHECK-GI-NEXT: bl __powisf2390; CHECK-GI-NEXT: ldp q2, q1, [sp] // 32-byte Folded Reload391; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0392; CHECK-GI-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload393; CHECK-GI-NEXT: ldp d9, d8, [sp, #32] // 16-byte Folded Reload394; CHECK-GI-NEXT: mov v1.s[1], v2.s[0]395; CHECK-GI-NEXT: mov v1.s[2], v0.s[0]396; CHECK-GI-NEXT: mov v0.16b, v1.16b397; CHECK-GI-NEXT: add sp, sp, #64398; CHECK-GI-NEXT: ret399entry:400 %c = call <3 x float> @llvm.powi.v3f32.i32(<3 x float> %a, i32 %b)401 ret <3 x float> %c402}403 404define <4 x float> @powi_v4f32(<4 x float> %a, i32 %b) {405; CHECK-SD-LABEL: powi_v4f32:406; CHECK-SD: // %bb.0: // %entry407; CHECK-SD-NEXT: sub sp, sp, #48408; CHECK-SD-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill409; CHECK-SD-NEXT: .cfi_def_cfa_offset 48410; CHECK-SD-NEXT: .cfi_offset w19, -8411; CHECK-SD-NEXT: .cfi_offset w30, -16412; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Spill413; CHECK-SD-NEXT: mov s0, v0.s[1]414; CHECK-SD-NEXT: mov w19, w0415; CHECK-SD-NEXT: bl __powisf2416; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0417; CHECK-SD-NEXT: str q0, [sp] // 16-byte Spill418; CHECK-SD-NEXT: mov w0, w19419; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload420; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0421; CHECK-SD-NEXT: bl __powisf2422; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Reload423; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0424; CHECK-SD-NEXT: mov w0, w19425; CHECK-SD-NEXT: mov v0.s[1], v1.s[0]426; CHECK-SD-NEXT: str q0, [sp] // 16-byte Spill427; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload428; CHECK-SD-NEXT: mov s0, v0.s[2]429; CHECK-SD-NEXT: bl __powisf2430; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Reload431; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0432; CHECK-SD-NEXT: mov w0, w19433; CHECK-SD-NEXT: mov v1.s[2], v0.s[0]434; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload435; CHECK-SD-NEXT: mov s0, v0.s[3]436; CHECK-SD-NEXT: str q1, [sp] // 16-byte Spill437; CHECK-SD-NEXT: bl __powisf2438; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Reload439; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0440; CHECK-SD-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload441; CHECK-SD-NEXT: mov v1.s[3], v0.s[0]442; CHECK-SD-NEXT: mov v0.16b, v1.16b443; CHECK-SD-NEXT: add sp, sp, #48444; CHECK-SD-NEXT: ret445;446; CHECK-GI-LABEL: powi_v4f32:447; CHECK-GI: // %bb.0: // %entry448; CHECK-GI-NEXT: sub sp, sp, #96449; CHECK-GI-NEXT: str d10, [sp, #48] // 8-byte Spill450; CHECK-GI-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill451; CHECK-GI-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill452; CHECK-GI-NEXT: .cfi_def_cfa_offset 96453; CHECK-GI-NEXT: .cfi_offset w19, -8454; CHECK-GI-NEXT: .cfi_offset w30, -16455; CHECK-GI-NEXT: .cfi_offset b8, -24456; CHECK-GI-NEXT: .cfi_offset b9, -32457; CHECK-GI-NEXT: .cfi_offset b10, -48458; CHECK-GI-NEXT: mov s8, v0.s[1]459; CHECK-GI-NEXT: mov s9, v0.s[2]460; CHECK-GI-NEXT: mov w19, w0461; CHECK-GI-NEXT: mov s10, v0.s[3]462; CHECK-GI-NEXT: // kill: def $s0 killed $s0 killed $q0463; CHECK-GI-NEXT: bl __powisf2464; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0465; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Spill466; CHECK-GI-NEXT: mov w0, w19467; CHECK-GI-NEXT: fmov s0, s8468; CHECK-GI-NEXT: bl __powisf2469; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0470; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Spill471; CHECK-GI-NEXT: mov w0, w19472; CHECK-GI-NEXT: fmov s0, s9473; CHECK-GI-NEXT: bl __powisf2474; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0475; CHECK-GI-NEXT: str q0, [sp] // 16-byte Spill476; CHECK-GI-NEXT: mov w0, w19477; CHECK-GI-NEXT: fmov s0, s10478; CHECK-GI-NEXT: bl __powisf2479; CHECK-GI-NEXT: ldp q2, q1, [sp, #16] // 32-byte Folded Reload480; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0481; CHECK-GI-NEXT: ldr d10, [sp, #48] // 8-byte Reload482; CHECK-GI-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload483; CHECK-GI-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload484; CHECK-GI-NEXT: mov v1.s[1], v2.s[0]485; CHECK-GI-NEXT: ldr q2, [sp] // 16-byte Reload486; CHECK-GI-NEXT: mov v1.s[2], v2.s[0]487; CHECK-GI-NEXT: mov v1.s[3], v0.s[0]488; CHECK-GI-NEXT: mov v0.16b, v1.16b489; CHECK-GI-NEXT: add sp, sp, #96490; CHECK-GI-NEXT: ret491entry:492 %c = call <4 x float> @llvm.powi.v4f32.i32(<4 x float> %a, i32 %b)493 ret <4 x float> %c494}495 496define <8 x float> @powi_v8f32(<8 x float> %a, i32 %b) {497; CHECK-SD-LABEL: powi_v8f32:498; CHECK-SD: // %bb.0: // %entry499; CHECK-SD-NEXT: sub sp, sp, #64500; CHECK-SD-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill501; CHECK-SD-NEXT: .cfi_def_cfa_offset 64502; CHECK-SD-NEXT: .cfi_offset w19, -8503; CHECK-SD-NEXT: .cfi_offset w30, -16504; CHECK-SD-NEXT: stp q0, q1, [sp] // 32-byte Folded Spill505; CHECK-SD-NEXT: mov s0, v0.s[1]506; CHECK-SD-NEXT: mov w19, w0507; CHECK-SD-NEXT: bl __powisf2508; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0509; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Spill510; CHECK-SD-NEXT: mov w0, w19511; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload512; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0513; CHECK-SD-NEXT: bl __powisf2514; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Reload515; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0516; CHECK-SD-NEXT: mov w0, w19517; CHECK-SD-NEXT: mov v0.s[1], v1.s[0]518; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Spill519; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload520; CHECK-SD-NEXT: mov s0, v0.s[2]521; CHECK-SD-NEXT: bl __powisf2522; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Reload523; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0524; CHECK-SD-NEXT: mov w0, w19525; CHECK-SD-NEXT: mov v1.s[2], v0.s[0]526; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload527; CHECK-SD-NEXT: mov s0, v0.s[3]528; CHECK-SD-NEXT: str q1, [sp, #32] // 16-byte Spill529; CHECK-SD-NEXT: bl __powisf2530; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Reload531; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0532; CHECK-SD-NEXT: mov w0, w19533; CHECK-SD-NEXT: mov v1.s[3], v0.s[0]534; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload535; CHECK-SD-NEXT: mov s0, v0.s[1]536; CHECK-SD-NEXT: str q1, [sp, #32] // 16-byte Spill537; CHECK-SD-NEXT: bl __powisf2538; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0539; CHECK-SD-NEXT: str q0, [sp] // 16-byte Spill540; CHECK-SD-NEXT: mov w0, w19541; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload542; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0543; CHECK-SD-NEXT: bl __powisf2544; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Reload545; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0546; CHECK-SD-NEXT: mov w0, w19547; CHECK-SD-NEXT: mov v0.s[1], v1.s[0]548; CHECK-SD-NEXT: str q0, [sp] // 16-byte Spill549; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload550; CHECK-SD-NEXT: mov s0, v0.s[2]551; CHECK-SD-NEXT: bl __powisf2552; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Reload553; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0554; CHECK-SD-NEXT: mov w0, w19555; CHECK-SD-NEXT: mov v1.s[2], v0.s[0]556; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload557; CHECK-SD-NEXT: mov s0, v0.s[3]558; CHECK-SD-NEXT: str q1, [sp] // 16-byte Spill559; CHECK-SD-NEXT: bl __powisf2560; CHECK-SD-NEXT: fmov s2, s0561; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Reload562; CHECK-SD-NEXT: ldr q0, [sp, #32] // 16-byte Reload563; CHECK-SD-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload564; CHECK-SD-NEXT: mov v1.s[3], v2.s[0]565; CHECK-SD-NEXT: add sp, sp, #64566; CHECK-SD-NEXT: ret567;568; CHECK-GI-LABEL: powi_v8f32:569; CHECK-GI: // %bb.0: // %entry570; CHECK-GI-NEXT: sub sp, sp, #176571; CHECK-GI-NEXT: stp d13, d12, [sp, #112] // 16-byte Folded Spill572; CHECK-GI-NEXT: stp d11, d10, [sp, #128] // 16-byte Folded Spill573; CHECK-GI-NEXT: stp d9, d8, [sp, #144] // 16-byte Folded Spill574; CHECK-GI-NEXT: stp x30, x19, [sp, #160] // 16-byte Folded Spill575; CHECK-GI-NEXT: .cfi_def_cfa_offset 176576; CHECK-GI-NEXT: .cfi_offset w19, -8577; CHECK-GI-NEXT: .cfi_offset w30, -16578; CHECK-GI-NEXT: .cfi_offset b8, -24579; CHECK-GI-NEXT: .cfi_offset b9, -32580; CHECK-GI-NEXT: .cfi_offset b10, -40581; CHECK-GI-NEXT: .cfi_offset b11, -48582; CHECK-GI-NEXT: .cfi_offset b12, -56583; CHECK-GI-NEXT: .cfi_offset b13, -64584; CHECK-GI-NEXT: str q1, [sp, #32] // 16-byte Spill585; CHECK-GI-NEXT: mov s8, v0.s[1]586; CHECK-GI-NEXT: mov s9, v0.s[2]587; CHECK-GI-NEXT: mov s10, v0.s[3]588; CHECK-GI-NEXT: mov s11, v1.s[1]589; CHECK-GI-NEXT: mov w19, w0590; CHECK-GI-NEXT: mov s12, v1.s[2]591; CHECK-GI-NEXT: mov s13, v1.s[3]592; CHECK-GI-NEXT: // kill: def $s0 killed $s0 killed $q0593; CHECK-GI-NEXT: bl __powisf2594; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0595; CHECK-GI-NEXT: str q0, [sp, #96] // 16-byte Spill596; CHECK-GI-NEXT: mov w0, w19597; CHECK-GI-NEXT: fmov s0, s8598; CHECK-GI-NEXT: bl __powisf2599; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0600; CHECK-GI-NEXT: str q0, [sp, #48] // 16-byte Spill601; CHECK-GI-NEXT: mov w0, w19602; CHECK-GI-NEXT: fmov s0, s9603; CHECK-GI-NEXT: bl __powisf2604; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0605; CHECK-GI-NEXT: str q0, [sp, #80] // 16-byte Spill606; CHECK-GI-NEXT: mov w0, w19607; CHECK-GI-NEXT: fmov s0, s10608; CHECK-GI-NEXT: bl __powisf2609; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0610; CHECK-GI-NEXT: str q0, [sp, #64] // 16-byte Spill611; CHECK-GI-NEXT: mov w0, w19612; CHECK-GI-NEXT: ldr q0, [sp, #32] // 16-byte Reload613; CHECK-GI-NEXT: // kill: def $s0 killed $s0 killed $q0614; CHECK-GI-NEXT: bl __powisf2615; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0616; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Spill617; CHECK-GI-NEXT: mov w0, w19618; CHECK-GI-NEXT: fmov s0, s11619; CHECK-GI-NEXT: bl __powisf2620; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0621; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Spill622; CHECK-GI-NEXT: mov w0, w19623; CHECK-GI-NEXT: fmov s0, s12624; CHECK-GI-NEXT: bl __powisf2625; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0626; CHECK-GI-NEXT: str q0, [sp] // 16-byte Spill627; CHECK-GI-NEXT: mov w0, w19628; CHECK-GI-NEXT: fmov s0, s13629; CHECK-GI-NEXT: bl __powisf2630; CHECK-GI-NEXT: ldp q3, q2, [sp, #32] // 32-byte Folded Reload631; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0632; CHECK-GI-NEXT: ldr q1, [sp, #96] // 16-byte Reload633; CHECK-GI-NEXT: ldp x30, x19, [sp, #160] // 16-byte Folded Reload634; CHECK-GI-NEXT: ldp d9, d8, [sp, #144] // 16-byte Folded Reload635; CHECK-GI-NEXT: mov v1.s[1], v2.s[0]636; CHECK-GI-NEXT: ldr q2, [sp, #16] // 16-byte Reload637; CHECK-GI-NEXT: ldp d11, d10, [sp, #128] // 16-byte Folded Reload638; CHECK-GI-NEXT: mov v3.s[1], v2.s[0]639; CHECK-GI-NEXT: ldr q2, [sp, #80] // 16-byte Reload640; CHECK-GI-NEXT: ldp d13, d12, [sp, #112] // 16-byte Folded Reload641; CHECK-GI-NEXT: mov v1.s[2], v2.s[0]642; CHECK-GI-NEXT: ldr q2, [sp] // 16-byte Reload643; CHECK-GI-NEXT: mov v3.s[2], v2.s[0]644; CHECK-GI-NEXT: ldr q2, [sp, #64] // 16-byte Reload645; CHECK-GI-NEXT: mov v1.s[3], v2.s[0]646; CHECK-GI-NEXT: mov v3.s[3], v0.s[0]647; CHECK-GI-NEXT: mov v2.16b, v1.16b648; CHECK-GI-NEXT: mov v1.16b, v3.16b649; CHECK-GI-NEXT: mov v0.16b, v2.16b650; CHECK-GI-NEXT: add sp, sp, #176651; CHECK-GI-NEXT: ret652entry:653 %c = call <8 x float> @llvm.powi.v8f32.i32(<8 x float> %a, i32 %b)654 ret <8 x float> %c655}656 657define <7 x half> @powi_v7f16(<7 x half> %a, i32 %b) {658; CHECK-SD-LABEL: powi_v7f16:659; CHECK-SD: // %bb.0: // %entry660; CHECK-SD-NEXT: sub sp, sp, #48661; CHECK-SD-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill662; CHECK-SD-NEXT: .cfi_def_cfa_offset 48663; CHECK-SD-NEXT: .cfi_offset w19, -8664; CHECK-SD-NEXT: .cfi_offset w30, -16665; CHECK-SD-NEXT: mov h1, v0.h[1]666; CHECK-SD-NEXT: str q0, [sp] // 16-byte Spill667; CHECK-SD-NEXT: mov w19, w0668; CHECK-SD-NEXT: fcvt s0, h1669; CHECK-SD-NEXT: bl __powisf2670; CHECK-SD-NEXT: fcvt h0, s0671; CHECK-SD-NEXT: mov w0, w19672; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Spill673; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload674; CHECK-SD-NEXT: fcvt s0, h0675; CHECK-SD-NEXT: bl __powisf2676; CHECK-SD-NEXT: fcvt h0, s0677; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload678; CHECK-SD-NEXT: mov w0, w19679; CHECK-SD-NEXT: mov v0.h[1], v1.h[0]680; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Spill681; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload682; CHECK-SD-NEXT: mov h0, v0.h[2]683; CHECK-SD-NEXT: fcvt s0, h0684; CHECK-SD-NEXT: bl __powisf2685; CHECK-SD-NEXT: fcvt h0, s0686; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload687; CHECK-SD-NEXT: mov w0, w19688; CHECK-SD-NEXT: mov v1.h[2], v0.h[0]689; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload690; CHECK-SD-NEXT: mov h0, v0.h[3]691; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Spill692; CHECK-SD-NEXT: fcvt s0, h0693; CHECK-SD-NEXT: bl __powisf2694; CHECK-SD-NEXT: fcvt h0, s0695; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload696; CHECK-SD-NEXT: mov w0, w19697; CHECK-SD-NEXT: mov v1.h[3], v0.h[0]698; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload699; CHECK-SD-NEXT: mov h0, v0.h[4]700; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Spill701; CHECK-SD-NEXT: fcvt s0, h0702; CHECK-SD-NEXT: bl __powisf2703; CHECK-SD-NEXT: fcvt h0, s0704; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload705; CHECK-SD-NEXT: mov w0, w19706; CHECK-SD-NEXT: mov v1.h[4], v0.h[0]707; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload708; CHECK-SD-NEXT: mov h0, v0.h[5]709; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Spill710; CHECK-SD-NEXT: fcvt s0, h0711; CHECK-SD-NEXT: bl __powisf2712; CHECK-SD-NEXT: fcvt h0, s0713; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload714; CHECK-SD-NEXT: mov w0, w19715; CHECK-SD-NEXT: mov v1.h[5], v0.h[0]716; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload717; CHECK-SD-NEXT: mov h0, v0.h[6]718; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Spill719; CHECK-SD-NEXT: fcvt s0, h0720; CHECK-SD-NEXT: bl __powisf2721; CHECK-SD-NEXT: fcvt h0, s0722; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload723; CHECK-SD-NEXT: mov w0, w19724; CHECK-SD-NEXT: mov v1.h[6], v0.h[0]725; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload726; CHECK-SD-NEXT: mov h0, v0.h[7]727; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Spill728; CHECK-SD-NEXT: fcvt s0, h0729; CHECK-SD-NEXT: bl __powisf2730; CHECK-SD-NEXT: fcvt h1, s0731; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload732; CHECK-SD-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload733; CHECK-SD-NEXT: mov v0.h[7], v1.h[0]734; CHECK-SD-NEXT: add sp, sp, #48735; CHECK-SD-NEXT: ret736;737; CHECK-GI-LABEL: powi_v7f16:738; CHECK-GI: // %bb.0: // %entry739; CHECK-GI-NEXT: sub sp, sp, #160740; CHECK-GI-NEXT: stp d13, d12, [sp, #96] // 16-byte Folded Spill741; CHECK-GI-NEXT: stp d11, d10, [sp, #112] // 16-byte Folded Spill742; CHECK-GI-NEXT: stp d9, d8, [sp, #128] // 16-byte Folded Spill743; CHECK-GI-NEXT: stp x30, x19, [sp, #144] // 16-byte Folded Spill744; CHECK-GI-NEXT: .cfi_def_cfa_offset 160745; CHECK-GI-NEXT: .cfi_offset w19, -8746; CHECK-GI-NEXT: .cfi_offset w30, -16747; CHECK-GI-NEXT: .cfi_offset b8, -24748; CHECK-GI-NEXT: .cfi_offset b9, -32749; CHECK-GI-NEXT: .cfi_offset b10, -40750; CHECK-GI-NEXT: .cfi_offset b11, -48751; CHECK-GI-NEXT: .cfi_offset b12, -56752; CHECK-GI-NEXT: .cfi_offset b13, -64753; CHECK-GI-NEXT: mov h8, v0.h[1]754; CHECK-GI-NEXT: mov h9, v0.h[2]755; CHECK-GI-NEXT: mov w19, w0756; CHECK-GI-NEXT: mov h10, v0.h[3]757; CHECK-GI-NEXT: mov h11, v0.h[4]758; CHECK-GI-NEXT: mov h12, v0.h[5]759; CHECK-GI-NEXT: mov h13, v0.h[6]760; CHECK-GI-NEXT: fcvt s0, h0761; CHECK-GI-NEXT: bl __powisf2762; CHECK-GI-NEXT: fcvt s1, h8763; CHECK-GI-NEXT: fcvt h0, s0764; CHECK-GI-NEXT: mov w0, w19765; CHECK-GI-NEXT: str q0, [sp, #80] // 16-byte Spill766; CHECK-GI-NEXT: fmov s0, s1767; CHECK-GI-NEXT: bl __powisf2768; CHECK-GI-NEXT: fcvt s1, h9769; CHECK-GI-NEXT: fcvt h0, s0770; CHECK-GI-NEXT: mov w0, w19771; CHECK-GI-NEXT: str q0, [sp, #64] // 16-byte Spill772; CHECK-GI-NEXT: fmov s0, s1773; CHECK-GI-NEXT: bl __powisf2774; CHECK-GI-NEXT: fcvt s1, h10775; CHECK-GI-NEXT: fcvt h0, s0776; CHECK-GI-NEXT: mov w0, w19777; CHECK-GI-NEXT: str q0, [sp, #48] // 16-byte Spill778; CHECK-GI-NEXT: fmov s0, s1779; CHECK-GI-NEXT: bl __powisf2780; CHECK-GI-NEXT: fcvt s1, h11781; CHECK-GI-NEXT: fcvt h0, s0782; CHECK-GI-NEXT: mov w0, w19783; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Spill784; CHECK-GI-NEXT: fmov s0, s1785; CHECK-GI-NEXT: bl __powisf2786; CHECK-GI-NEXT: fcvt s1, h12787; CHECK-GI-NEXT: fcvt h0, s0788; CHECK-GI-NEXT: mov w0, w19789; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Spill790; CHECK-GI-NEXT: fmov s0, s1791; CHECK-GI-NEXT: bl __powisf2792; CHECK-GI-NEXT: fcvt s1, h13793; CHECK-GI-NEXT: fcvt h0, s0794; CHECK-GI-NEXT: mov w0, w19795; CHECK-GI-NEXT: str q0, [sp] // 16-byte Spill796; CHECK-GI-NEXT: fmov s0, s1797; CHECK-GI-NEXT: bl __powisf2798; CHECK-GI-NEXT: ldp q2, q1, [sp, #64] // 32-byte Folded Reload799; CHECK-GI-NEXT: fcvt h0, s0800; CHECK-GI-NEXT: ldp x30, x19, [sp, #144] // 16-byte Folded Reload801; CHECK-GI-NEXT: ldp d9, d8, [sp, #128] // 16-byte Folded Reload802; CHECK-GI-NEXT: mov v1.h[1], v2.h[0]803; CHECK-GI-NEXT: ldp q2, q3, [sp, #32] // 32-byte Folded Reload804; CHECK-GI-NEXT: ldp d11, d10, [sp, #112] // 16-byte Folded Reload805; CHECK-GI-NEXT: ldp d13, d12, [sp, #96] // 16-byte Folded Reload806; CHECK-GI-NEXT: mov v1.h[2], v3.h[0]807; CHECK-GI-NEXT: mov v1.h[3], v2.h[0]808; CHECK-GI-NEXT: ldp q2, q3, [sp] // 32-byte Folded Reload809; CHECK-GI-NEXT: mov v1.h[4], v3.h[0]810; CHECK-GI-NEXT: mov v1.h[5], v2.h[0]811; CHECK-GI-NEXT: mov v1.h[6], v0.h[0]812; CHECK-GI-NEXT: mov v0.16b, v1.16b813; CHECK-GI-NEXT: add sp, sp, #160814; CHECK-GI-NEXT: ret815entry:816 %c = call <7 x half> @llvm.powi.v7f16.i32(<7 x half> %a, i32 %b)817 ret <7 x half> %c818}819 820define <4 x half> @powi_v4f16(<4 x half> %a, i32 %b) {821; CHECK-SD-LABEL: powi_v4f16:822; CHECK-SD: // %bb.0: // %entry823; CHECK-SD-NEXT: sub sp, sp, #48824; CHECK-SD-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill825; CHECK-SD-NEXT: .cfi_def_cfa_offset 48826; CHECK-SD-NEXT: .cfi_offset w19, -8827; CHECK-SD-NEXT: .cfi_offset w30, -16828; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0829; CHECK-SD-NEXT: mov h1, v0.h[1]830; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Spill831; CHECK-SD-NEXT: mov w19, w0832; CHECK-SD-NEXT: fcvt s0, h1833; CHECK-SD-NEXT: bl __powisf2834; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload835; CHECK-SD-NEXT: fcvt h0, s0836; CHECK-SD-NEXT: mov w0, w19837; CHECK-SD-NEXT: fcvt s1, h1838; CHECK-SD-NEXT: str q0, [sp] // 16-byte Spill839; CHECK-SD-NEXT: fmov s0, s1840; CHECK-SD-NEXT: bl __powisf2841; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload842; CHECK-SD-NEXT: fcvt h2, s0843; CHECK-SD-NEXT: mov w0, w19844; CHECK-SD-NEXT: mov h1, v1.h[2]845; CHECK-SD-NEXT: fcvt s0, h1846; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Reload847; CHECK-SD-NEXT: mov v2.h[1], v1.h[0]848; CHECK-SD-NEXT: str q2, [sp] // 16-byte Spill849; CHECK-SD-NEXT: bl __powisf2850; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload851; CHECK-SD-NEXT: fcvt h2, s0852; CHECK-SD-NEXT: mov w0, w19853; CHECK-SD-NEXT: mov h1, v1.h[3]854; CHECK-SD-NEXT: fcvt s0, h1855; CHECK-SD-NEXT: ldr q1, [sp] // 16-byte Reload856; CHECK-SD-NEXT: mov v1.h[2], v2.h[0]857; CHECK-SD-NEXT: str q1, [sp] // 16-byte Spill858; CHECK-SD-NEXT: bl __powisf2859; CHECK-SD-NEXT: fcvt h1, s0860; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload861; CHECK-SD-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload862; CHECK-SD-NEXT: mov v0.h[3], v1.h[0]863; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0864; CHECK-SD-NEXT: add sp, sp, #48865; CHECK-SD-NEXT: ret866;867; CHECK-GI-LABEL: powi_v4f16:868; CHECK-GI: // %bb.0: // %entry869; CHECK-GI-NEXT: sub sp, sp, #96870; CHECK-GI-NEXT: str d10, [sp, #48] // 8-byte Spill871; CHECK-GI-NEXT: stp d9, d8, [sp, #64] // 16-byte Folded Spill872; CHECK-GI-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill873; CHECK-GI-NEXT: .cfi_def_cfa_offset 96874; CHECK-GI-NEXT: .cfi_offset w19, -8875; CHECK-GI-NEXT: .cfi_offset w30, -16876; CHECK-GI-NEXT: .cfi_offset b8, -24877; CHECK-GI-NEXT: .cfi_offset b9, -32878; CHECK-GI-NEXT: .cfi_offset b10, -48879; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0880; CHECK-GI-NEXT: mov h8, v0.h[1]881; CHECK-GI-NEXT: mov h9, v0.h[2]882; CHECK-GI-NEXT: mov w19, w0883; CHECK-GI-NEXT: mov h10, v0.h[3]884; CHECK-GI-NEXT: fcvt s0, h0885; CHECK-GI-NEXT: bl __powisf2886; CHECK-GI-NEXT: fcvt s1, h8887; CHECK-GI-NEXT: fcvt h0, s0888; CHECK-GI-NEXT: mov w0, w19889; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Spill890; CHECK-GI-NEXT: fmov s0, s1891; CHECK-GI-NEXT: bl __powisf2892; CHECK-GI-NEXT: fcvt s1, h9893; CHECK-GI-NEXT: fcvt h0, s0894; CHECK-GI-NEXT: mov w0, w19895; CHECK-GI-NEXT: str q0, [sp] // 16-byte Spill896; CHECK-GI-NEXT: fmov s0, s1897; CHECK-GI-NEXT: bl __powisf2898; CHECK-GI-NEXT: fcvt s1, h10899; CHECK-GI-NEXT: fcvt h0, s0900; CHECK-GI-NEXT: mov w0, w19901; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Spill902; CHECK-GI-NEXT: fmov s0, s1903; CHECK-GI-NEXT: bl __powisf2904; CHECK-GI-NEXT: ldp q3, q2, [sp] // 32-byte Folded Reload905; CHECK-GI-NEXT: fcvt h0, s0906; CHECK-GI-NEXT: ldr q1, [sp, #32] // 16-byte Reload907; CHECK-GI-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload908; CHECK-GI-NEXT: ldp d9, d8, [sp, #64] // 16-byte Folded Reload909; CHECK-GI-NEXT: ldr d10, [sp, #48] // 8-byte Reload910; CHECK-GI-NEXT: mov v1.h[1], v3.h[0]911; CHECK-GI-NEXT: mov v1.h[2], v2.h[0]912; CHECK-GI-NEXT: mov v1.h[3], v0.h[0]913; CHECK-GI-NEXT: mov v0.16b, v1.16b914; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0915; CHECK-GI-NEXT: add sp, sp, #96916; CHECK-GI-NEXT: ret917entry:918 %c = call <4 x half> @llvm.powi.v4f16.i32(<4 x half> %a, i32 %b)919 ret <4 x half> %c920}921 922define <8 x half> @powi_v8f16(<8 x half> %a, i32 %b) {923; CHECK-SD-LABEL: powi_v8f16:924; CHECK-SD: // %bb.0: // %entry925; CHECK-SD-NEXT: sub sp, sp, #48926; CHECK-SD-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill927; CHECK-SD-NEXT: .cfi_def_cfa_offset 48928; CHECK-SD-NEXT: .cfi_offset w19, -8929; CHECK-SD-NEXT: .cfi_offset w30, -16930; CHECK-SD-NEXT: mov h1, v0.h[1]931; CHECK-SD-NEXT: str q0, [sp] // 16-byte Spill932; CHECK-SD-NEXT: mov w19, w0933; CHECK-SD-NEXT: fcvt s0, h1934; CHECK-SD-NEXT: bl __powisf2935; CHECK-SD-NEXT: fcvt h0, s0936; CHECK-SD-NEXT: mov w0, w19937; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Spill938; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload939; CHECK-SD-NEXT: fcvt s0, h0940; CHECK-SD-NEXT: bl __powisf2941; CHECK-SD-NEXT: fcvt h0, s0942; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload943; CHECK-SD-NEXT: mov w0, w19944; CHECK-SD-NEXT: mov v0.h[1], v1.h[0]945; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Spill946; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload947; CHECK-SD-NEXT: mov h0, v0.h[2]948; CHECK-SD-NEXT: fcvt s0, h0949; CHECK-SD-NEXT: bl __powisf2950; CHECK-SD-NEXT: fcvt h0, s0951; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload952; CHECK-SD-NEXT: mov w0, w19953; CHECK-SD-NEXT: mov v1.h[2], v0.h[0]954; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload955; CHECK-SD-NEXT: mov h0, v0.h[3]956; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Spill957; CHECK-SD-NEXT: fcvt s0, h0958; CHECK-SD-NEXT: bl __powisf2959; CHECK-SD-NEXT: fcvt h0, s0960; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload961; CHECK-SD-NEXT: mov w0, w19962; CHECK-SD-NEXT: mov v1.h[3], v0.h[0]963; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload964; CHECK-SD-NEXT: mov h0, v0.h[4]965; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Spill966; CHECK-SD-NEXT: fcvt s0, h0967; CHECK-SD-NEXT: bl __powisf2968; CHECK-SD-NEXT: fcvt h0, s0969; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload970; CHECK-SD-NEXT: mov w0, w19971; CHECK-SD-NEXT: mov v1.h[4], v0.h[0]972; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload973; CHECK-SD-NEXT: mov h0, v0.h[5]974; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Spill975; CHECK-SD-NEXT: fcvt s0, h0976; CHECK-SD-NEXT: bl __powisf2977; CHECK-SD-NEXT: fcvt h0, s0978; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload979; CHECK-SD-NEXT: mov w0, w19980; CHECK-SD-NEXT: mov v1.h[5], v0.h[0]981; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload982; CHECK-SD-NEXT: mov h0, v0.h[6]983; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Spill984; CHECK-SD-NEXT: fcvt s0, h0985; CHECK-SD-NEXT: bl __powisf2986; CHECK-SD-NEXT: fcvt h0, s0987; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload988; CHECK-SD-NEXT: mov w0, w19989; CHECK-SD-NEXT: mov v1.h[6], v0.h[0]990; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload991; CHECK-SD-NEXT: mov h0, v0.h[7]992; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Spill993; CHECK-SD-NEXT: fcvt s0, h0994; CHECK-SD-NEXT: bl __powisf2995; CHECK-SD-NEXT: fcvt h1, s0996; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload997; CHECK-SD-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload998; CHECK-SD-NEXT: mov v0.h[7], v1.h[0]999; CHECK-SD-NEXT: add sp, sp, #481000; CHECK-SD-NEXT: ret1001;1002; CHECK-GI-LABEL: powi_v8f16:1003; CHECK-GI: // %bb.0: // %entry1004; CHECK-GI-NEXT: sub sp, sp, #1921005; CHECK-GI-NEXT: str d14, [sp, #112] // 8-byte Spill1006; CHECK-GI-NEXT: stp d13, d12, [sp, #128] // 16-byte Folded Spill1007; CHECK-GI-NEXT: stp d11, d10, [sp, #144] // 16-byte Folded Spill1008; CHECK-GI-NEXT: stp d9, d8, [sp, #160] // 16-byte Folded Spill1009; CHECK-GI-NEXT: stp x30, x19, [sp, #176] // 16-byte Folded Spill1010; CHECK-GI-NEXT: .cfi_def_cfa_offset 1921011; CHECK-GI-NEXT: .cfi_offset w19, -81012; CHECK-GI-NEXT: .cfi_offset w30, -161013; CHECK-GI-NEXT: .cfi_offset b8, -241014; CHECK-GI-NEXT: .cfi_offset b9, -321015; CHECK-GI-NEXT: .cfi_offset b10, -401016; CHECK-GI-NEXT: .cfi_offset b11, -481017; CHECK-GI-NEXT: .cfi_offset b12, -561018; CHECK-GI-NEXT: .cfi_offset b13, -641019; CHECK-GI-NEXT: .cfi_offset b14, -801020; CHECK-GI-NEXT: mov h8, v0.h[1]1021; CHECK-GI-NEXT: mov h9, v0.h[2]1022; CHECK-GI-NEXT: mov w19, w01023; CHECK-GI-NEXT: mov h10, v0.h[3]1024; CHECK-GI-NEXT: mov h11, v0.h[4]1025; CHECK-GI-NEXT: mov h12, v0.h[5]1026; CHECK-GI-NEXT: mov h13, v0.h[6]1027; CHECK-GI-NEXT: mov h14, v0.h[7]1028; CHECK-GI-NEXT: fcvt s0, h01029; CHECK-GI-NEXT: bl __powisf21030; CHECK-GI-NEXT: fcvt s1, h81031; CHECK-GI-NEXT: fcvt h0, s01032; CHECK-GI-NEXT: mov w0, w191033; CHECK-GI-NEXT: str q0, [sp, #96] // 16-byte Spill1034; CHECK-GI-NEXT: fmov s0, s11035; CHECK-GI-NEXT: bl __powisf21036; CHECK-GI-NEXT: fcvt s1, h91037; CHECK-GI-NEXT: fcvt h0, s01038; CHECK-GI-NEXT: mov w0, w191039; CHECK-GI-NEXT: str q0, [sp, #80] // 16-byte Spill1040; CHECK-GI-NEXT: fmov s0, s11041; CHECK-GI-NEXT: bl __powisf21042; CHECK-GI-NEXT: fcvt s1, h101043; CHECK-GI-NEXT: fcvt h0, s01044; CHECK-GI-NEXT: mov w0, w191045; CHECK-GI-NEXT: str q0, [sp, #64] // 16-byte Spill1046; CHECK-GI-NEXT: fmov s0, s11047; CHECK-GI-NEXT: bl __powisf21048; CHECK-GI-NEXT: fcvt s1, h111049; CHECK-GI-NEXT: fcvt h0, s01050; CHECK-GI-NEXT: mov w0, w191051; CHECK-GI-NEXT: str q0, [sp, #48] // 16-byte Spill1052; CHECK-GI-NEXT: fmov s0, s11053; CHECK-GI-NEXT: bl __powisf21054; CHECK-GI-NEXT: fcvt s1, h121055; CHECK-GI-NEXT: fcvt h0, s01056; CHECK-GI-NEXT: mov w0, w191057; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Spill1058; CHECK-GI-NEXT: fmov s0, s11059; CHECK-GI-NEXT: bl __powisf21060; CHECK-GI-NEXT: fcvt s1, h131061; CHECK-GI-NEXT: fcvt h0, s01062; CHECK-GI-NEXT: mov w0, w191063; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Spill1064; CHECK-GI-NEXT: fmov s0, s11065; CHECK-GI-NEXT: bl __powisf21066; CHECK-GI-NEXT: fcvt s1, h141067; CHECK-GI-NEXT: fcvt h0, s01068; CHECK-GI-NEXT: mov w0, w191069; CHECK-GI-NEXT: str q0, [sp] // 16-byte Spill1070; CHECK-GI-NEXT: fmov s0, s11071; CHECK-GI-NEXT: bl __powisf21072; CHECK-GI-NEXT: ldp q2, q1, [sp, #80] // 32-byte Folded Reload1073; CHECK-GI-NEXT: fcvt h0, s01074; CHECK-GI-NEXT: ldp x30, x19, [sp, #176] // 16-byte Folded Reload1075; CHECK-GI-NEXT: ldr d14, [sp, #112] // 8-byte Reload1076; CHECK-GI-NEXT: ldp d9, d8, [sp, #160] // 16-byte Folded Reload1077; CHECK-GI-NEXT: mov v1.h[1], v2.h[0]1078; CHECK-GI-NEXT: ldp q2, q3, [sp, #48] // 32-byte Folded Reload1079; CHECK-GI-NEXT: ldp d11, d10, [sp, #144] // 16-byte Folded Reload1080; CHECK-GI-NEXT: ldp d13, d12, [sp, #128] // 16-byte Folded Reload1081; CHECK-GI-NEXT: mov v1.h[2], v3.h[0]1082; CHECK-GI-NEXT: mov v1.h[3], v2.h[0]1083; CHECK-GI-NEXT: ldp q2, q3, [sp, #16] // 32-byte Folded Reload1084; CHECK-GI-NEXT: mov v1.h[4], v3.h[0]1085; CHECK-GI-NEXT: mov v1.h[5], v2.h[0]1086; CHECK-GI-NEXT: ldr q2, [sp] // 16-byte Reload1087; CHECK-GI-NEXT: mov v1.h[6], v2.h[0]1088; CHECK-GI-NEXT: mov v1.h[7], v0.h[0]1089; CHECK-GI-NEXT: mov v0.16b, v1.16b1090; CHECK-GI-NEXT: add sp, sp, #1921091; CHECK-GI-NEXT: ret1092entry:1093 %c = call <8 x half> @llvm.powi.v8f16.i32(<8 x half> %a, i32 %b)1094 ret <8 x half> %c1095}1096 1097define <16 x half> @powi_v16f16(<16 x half> %a, i32 %b) {1098; CHECK-SD-LABEL: powi_v16f16:1099; CHECK-SD: // %bb.0: // %entry1100; CHECK-SD-NEXT: sub sp, sp, #641101; CHECK-SD-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill1102; CHECK-SD-NEXT: .cfi_def_cfa_offset 641103; CHECK-SD-NEXT: .cfi_offset w19, -81104; CHECK-SD-NEXT: .cfi_offset w30, -161105; CHECK-SD-NEXT: stp q1, q0, [sp] // 32-byte Folded Spill1106; CHECK-SD-NEXT: mov h1, v0.h[1]1107; CHECK-SD-NEXT: mov w19, w01108; CHECK-SD-NEXT: fcvt s0, h11109; CHECK-SD-NEXT: bl __powisf21110; CHECK-SD-NEXT: fcvt h0, s01111; CHECK-SD-NEXT: mov w0, w191112; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Spill1113; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload1114; CHECK-SD-NEXT: fcvt s0, h01115; CHECK-SD-NEXT: bl __powisf21116; CHECK-SD-NEXT: fcvt h0, s01117; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Reload1118; CHECK-SD-NEXT: mov w0, w191119; CHECK-SD-NEXT: mov v0.h[1], v1.h[0]1120; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Spill1121; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload1122; CHECK-SD-NEXT: mov h0, v0.h[2]1123; CHECK-SD-NEXT: fcvt s0, h01124; CHECK-SD-NEXT: bl __powisf21125; CHECK-SD-NEXT: fcvt h0, s01126; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Reload1127; CHECK-SD-NEXT: mov w0, w191128; CHECK-SD-NEXT: mov v1.h[2], v0.h[0]1129; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload1130; CHECK-SD-NEXT: mov h0, v0.h[3]1131; CHECK-SD-NEXT: str q1, [sp, #32] // 16-byte Spill1132; CHECK-SD-NEXT: fcvt s0, h01133; CHECK-SD-NEXT: bl __powisf21134; CHECK-SD-NEXT: fcvt h0, s01135; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Reload1136; CHECK-SD-NEXT: mov w0, w191137; CHECK-SD-NEXT: mov v1.h[3], v0.h[0]1138; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload1139; CHECK-SD-NEXT: mov h0, v0.h[4]1140; CHECK-SD-NEXT: str q1, [sp, #32] // 16-byte Spill1141; CHECK-SD-NEXT: fcvt s0, h01142; CHECK-SD-NEXT: bl __powisf21143; CHECK-SD-NEXT: fcvt h0, s01144; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Reload1145; CHECK-SD-NEXT: mov w0, w191146; CHECK-SD-NEXT: mov v1.h[4], v0.h[0]1147; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload1148; CHECK-SD-NEXT: mov h0, v0.h[5]1149; CHECK-SD-NEXT: str q1, [sp, #32] // 16-byte Spill1150; CHECK-SD-NEXT: fcvt s0, h01151; CHECK-SD-NEXT: bl __powisf21152; CHECK-SD-NEXT: fcvt h0, s01153; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Reload1154; CHECK-SD-NEXT: mov w0, w191155; CHECK-SD-NEXT: mov v1.h[5], v0.h[0]1156; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload1157; CHECK-SD-NEXT: mov h0, v0.h[6]1158; CHECK-SD-NEXT: str q1, [sp, #32] // 16-byte Spill1159; CHECK-SD-NEXT: fcvt s0, h01160; CHECK-SD-NEXT: bl __powisf21161; CHECK-SD-NEXT: fcvt h0, s01162; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Reload1163; CHECK-SD-NEXT: mov w0, w191164; CHECK-SD-NEXT: mov v1.h[6], v0.h[0]1165; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload1166; CHECK-SD-NEXT: mov h0, v0.h[7]1167; CHECK-SD-NEXT: str q1, [sp, #32] // 16-byte Spill1168; CHECK-SD-NEXT: fcvt s0, h01169; CHECK-SD-NEXT: bl __powisf21170; CHECK-SD-NEXT: fcvt h0, s01171; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Reload1172; CHECK-SD-NEXT: mov w0, w191173; CHECK-SD-NEXT: mov v1.h[7], v0.h[0]1174; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload1175; CHECK-SD-NEXT: mov h0, v0.h[1]1176; CHECK-SD-NEXT: str q1, [sp, #32] // 16-byte Spill1177; CHECK-SD-NEXT: fcvt s0, h01178; CHECK-SD-NEXT: bl __powisf21179; CHECK-SD-NEXT: fcvt h0, s01180; CHECK-SD-NEXT: mov w0, w191181; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Spill1182; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload1183; CHECK-SD-NEXT: fcvt s0, h01184; CHECK-SD-NEXT: bl __powisf21185; CHECK-SD-NEXT: fcvt h0, s01186; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload1187; CHECK-SD-NEXT: mov w0, w191188; CHECK-SD-NEXT: mov v0.h[1], v1.h[0]1189; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Spill1190; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload1191; CHECK-SD-NEXT: mov h0, v0.h[2]1192; CHECK-SD-NEXT: fcvt s0, h01193; CHECK-SD-NEXT: bl __powisf21194; CHECK-SD-NEXT: fcvt h0, s01195; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload1196; CHECK-SD-NEXT: mov w0, w191197; CHECK-SD-NEXT: mov v1.h[2], v0.h[0]1198; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload1199; CHECK-SD-NEXT: mov h0, v0.h[3]1200; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Spill1201; CHECK-SD-NEXT: fcvt s0, h01202; CHECK-SD-NEXT: bl __powisf21203; CHECK-SD-NEXT: fcvt h0, s01204; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload1205; CHECK-SD-NEXT: mov w0, w191206; CHECK-SD-NEXT: mov v1.h[3], v0.h[0]1207; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload1208; CHECK-SD-NEXT: mov h0, v0.h[4]1209; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Spill1210; CHECK-SD-NEXT: fcvt s0, h01211; CHECK-SD-NEXT: bl __powisf21212; CHECK-SD-NEXT: fcvt h0, s01213; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload1214; CHECK-SD-NEXT: mov w0, w191215; CHECK-SD-NEXT: mov v1.h[4], v0.h[0]1216; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload1217; CHECK-SD-NEXT: mov h0, v0.h[5]1218; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Spill1219; CHECK-SD-NEXT: fcvt s0, h01220; CHECK-SD-NEXT: bl __powisf21221; CHECK-SD-NEXT: fcvt h0, s01222; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload1223; CHECK-SD-NEXT: mov w0, w191224; CHECK-SD-NEXT: mov v1.h[5], v0.h[0]1225; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload1226; CHECK-SD-NEXT: mov h0, v0.h[6]1227; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Spill1228; CHECK-SD-NEXT: fcvt s0, h01229; CHECK-SD-NEXT: bl __powisf21230; CHECK-SD-NEXT: fcvt h0, s01231; CHECK-SD-NEXT: ldr q1, [sp, #16] // 16-byte Reload1232; CHECK-SD-NEXT: mov w0, w191233; CHECK-SD-NEXT: mov v1.h[6], v0.h[0]1234; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload1235; CHECK-SD-NEXT: mov h0, v0.h[7]1236; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Spill1237; CHECK-SD-NEXT: fcvt s0, h01238; CHECK-SD-NEXT: bl __powisf21239; CHECK-SD-NEXT: fmov s1, s01240; CHECK-SD-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload1241; CHECK-SD-NEXT: fcvt h2, s11242; CHECK-SD-NEXT: ldp q1, q0, [sp, #16] // 32-byte Folded Reload1243; CHECK-SD-NEXT: mov v1.h[7], v2.h[0]1244; CHECK-SD-NEXT: add sp, sp, #641245; CHECK-SD-NEXT: ret1246;1247; CHECK-GI-LABEL: powi_v16f16:1248; CHECK-GI: // %bb.0: // %entry1249; CHECK-GI-NEXT: sub sp, sp, #3361250; CHECK-GI-NEXT: stp d15, d14, [sp, #240] // 16-byte Folded Spill1251; CHECK-GI-NEXT: stp d13, d12, [sp, #256] // 16-byte Folded Spill1252; CHECK-GI-NEXT: stp d11, d10, [sp, #272] // 16-byte Folded Spill1253; CHECK-GI-NEXT: stp d9, d8, [sp, #288] // 16-byte Folded Spill1254; CHECK-GI-NEXT: str x29, [sp, #304] // 8-byte Spill1255; CHECK-GI-NEXT: stp x30, x19, [sp, #320] // 16-byte Folded Spill1256; CHECK-GI-NEXT: .cfi_def_cfa_offset 3361257; CHECK-GI-NEXT: .cfi_offset w19, -81258; CHECK-GI-NEXT: .cfi_offset w30, -161259; CHECK-GI-NEXT: .cfi_offset w29, -321260; CHECK-GI-NEXT: .cfi_offset b8, -401261; CHECK-GI-NEXT: .cfi_offset b9, -481262; CHECK-GI-NEXT: .cfi_offset b10, -561263; CHECK-GI-NEXT: .cfi_offset b11, -641264; CHECK-GI-NEXT: .cfi_offset b12, -721265; CHECK-GI-NEXT: .cfi_offset b13, -801266; CHECK-GI-NEXT: .cfi_offset b14, -881267; CHECK-GI-NEXT: .cfi_offset b15, -961268; CHECK-GI-NEXT: mov v2.16b, v1.16b1269; CHECK-GI-NEXT: str q1, [sp, #64] // 16-byte Spill1270; CHECK-GI-NEXT: mov h14, v1.h[1]1271; CHECK-GI-NEXT: mov h1, v1.h[2]1272; CHECK-GI-NEXT: mov h8, v0.h[1]1273; CHECK-GI-NEXT: mov w19, w01274; CHECK-GI-NEXT: mov h9, v0.h[2]1275; CHECK-GI-NEXT: mov h10, v0.h[3]1276; CHECK-GI-NEXT: mov h11, v0.h[4]1277; CHECK-GI-NEXT: mov h12, v0.h[5]1278; CHECK-GI-NEXT: mov h13, v0.h[6]1279; CHECK-GI-NEXT: mov h15, v0.h[7]1280; CHECK-GI-NEXT: fcvt s0, h01281; CHECK-GI-NEXT: str h1, [sp, #16] // 2-byte Spill1282; CHECK-GI-NEXT: mov h1, v2.h[3]1283; CHECK-GI-NEXT: str h1, [sp, #32] // 2-byte Spill1284; CHECK-GI-NEXT: mov h1, v2.h[4]1285; CHECK-GI-NEXT: str h1, [sp, #48] // 2-byte Spill1286; CHECK-GI-NEXT: mov h1, v2.h[5]1287; CHECK-GI-NEXT: str h1, [sp, #80] // 2-byte Spill1288; CHECK-GI-NEXT: mov h1, v2.h[6]1289; CHECK-GI-NEXT: str h1, [sp, #112] // 2-byte Spill1290; CHECK-GI-NEXT: mov h1, v2.h[7]1291; CHECK-GI-NEXT: str h1, [sp, #176] // 2-byte Spill1292; CHECK-GI-NEXT: bl __powisf21293; CHECK-GI-NEXT: fcvt s1, h81294; CHECK-GI-NEXT: fcvt h0, s01295; CHECK-GI-NEXT: mov w0, w191296; CHECK-GI-NEXT: str q0, [sp, #192] // 16-byte Spill1297; CHECK-GI-NEXT: fmov s0, s11298; CHECK-GI-NEXT: bl __powisf21299; CHECK-GI-NEXT: fcvt s1, h91300; CHECK-GI-NEXT: fcvt h0, s01301; CHECK-GI-NEXT: mov w0, w191302; CHECK-GI-NEXT: str q0, [sp, #144] // 16-byte Spill1303; CHECK-GI-NEXT: fmov s0, s11304; CHECK-GI-NEXT: bl __powisf21305; CHECK-GI-NEXT: fcvt s1, h101306; CHECK-GI-NEXT: fcvt h0, s01307; CHECK-GI-NEXT: mov w0, w191308; CHECK-GI-NEXT: str q0, [sp, #224] // 16-byte Spill1309; CHECK-GI-NEXT: fmov s0, s11310; CHECK-GI-NEXT: bl __powisf21311; CHECK-GI-NEXT: fcvt s1, h111312; CHECK-GI-NEXT: fcvt h0, s01313; CHECK-GI-NEXT: mov w0, w191314; CHECK-GI-NEXT: str q0, [sp, #208] // 16-byte Spill1315; CHECK-GI-NEXT: fmov s0, s11316; CHECK-GI-NEXT: bl __powisf21317; CHECK-GI-NEXT: fcvt s1, h121318; CHECK-GI-NEXT: fcvt h0, s01319; CHECK-GI-NEXT: mov w0, w191320; CHECK-GI-NEXT: str q0, [sp, #160] // 16-byte Spill1321; CHECK-GI-NEXT: fmov s0, s11322; CHECK-GI-NEXT: bl __powisf21323; CHECK-GI-NEXT: fcvt s1, h131324; CHECK-GI-NEXT: fcvt h0, s01325; CHECK-GI-NEXT: mov w0, w191326; CHECK-GI-NEXT: str q0, [sp, #128] // 16-byte Spill1327; CHECK-GI-NEXT: fmov s0, s11328; CHECK-GI-NEXT: bl __powisf21329; CHECK-GI-NEXT: fcvt s1, h151330; CHECK-GI-NEXT: fcvt h0, s01331; CHECK-GI-NEXT: mov w0, w191332; CHECK-GI-NEXT: str q0, [sp, #96] // 16-byte Spill1333; CHECK-GI-NEXT: fmov s0, s11334; CHECK-GI-NEXT: bl __powisf21335; CHECK-GI-NEXT: ldr q1, [sp, #64] // 16-byte Reload1336; CHECK-GI-NEXT: fcvt h0, s01337; CHECK-GI-NEXT: mov w0, w191338; CHECK-GI-NEXT: fcvt s1, h11339; CHECK-GI-NEXT: str q0, [sp, #64] // 16-byte Spill1340; CHECK-GI-NEXT: fmov s0, s11341; CHECK-GI-NEXT: bl __powisf21342; CHECK-GI-NEXT: fcvt s1, h141343; CHECK-GI-NEXT: fcvt h0, s01344; CHECK-GI-NEXT: mov w0, w191345; CHECK-GI-NEXT: str q0, [sp] // 16-byte Spill1346; CHECK-GI-NEXT: fmov s0, s11347; CHECK-GI-NEXT: bl __powisf21348; CHECK-GI-NEXT: ldr h1, [sp, #16] // 2-byte Reload1349; CHECK-GI-NEXT: fcvt h0, s01350; CHECK-GI-NEXT: mov w0, w191351; CHECK-GI-NEXT: fcvt s1, h11352; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Spill1353; CHECK-GI-NEXT: fmov s0, s11354; CHECK-GI-NEXT: bl __powisf21355; CHECK-GI-NEXT: ldr h1, [sp, #32] // 2-byte Reload1356; CHECK-GI-NEXT: fcvt h0, s01357; CHECK-GI-NEXT: mov w0, w191358; CHECK-GI-NEXT: fcvt s1, h11359; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Spill1360; CHECK-GI-NEXT: fmov s0, s11361; CHECK-GI-NEXT: bl __powisf21362; CHECK-GI-NEXT: ldr h1, [sp, #48] // 2-byte Reload1363; CHECK-GI-NEXT: fcvt h0, s01364; CHECK-GI-NEXT: mov w0, w191365; CHECK-GI-NEXT: fcvt s1, h11366; CHECK-GI-NEXT: str q0, [sp, #48] // 16-byte Spill1367; CHECK-GI-NEXT: fmov s0, s11368; CHECK-GI-NEXT: bl __powisf21369; CHECK-GI-NEXT: ldr h1, [sp, #80] // 2-byte Reload1370; CHECK-GI-NEXT: fcvt h0, s01371; CHECK-GI-NEXT: mov w0, w191372; CHECK-GI-NEXT: fcvt s1, h11373; CHECK-GI-NEXT: str q0, [sp, #80] // 16-byte Spill1374; CHECK-GI-NEXT: fmov s0, s11375; CHECK-GI-NEXT: bl __powisf21376; CHECK-GI-NEXT: ldr h1, [sp, #112] // 2-byte Reload1377; CHECK-GI-NEXT: fcvt h0, s01378; CHECK-GI-NEXT: mov w0, w191379; CHECK-GI-NEXT: fcvt s1, h11380; CHECK-GI-NEXT: str q0, [sp, #112] // 16-byte Spill1381; CHECK-GI-NEXT: fmov s0, s11382; CHECK-GI-NEXT: bl __powisf21383; CHECK-GI-NEXT: ldr h1, [sp, #176] // 2-byte Reload1384; CHECK-GI-NEXT: fcvt h0, s01385; CHECK-GI-NEXT: mov w0, w191386; CHECK-GI-NEXT: fcvt s1, h11387; CHECK-GI-NEXT: str q0, [sp, #176] // 16-byte Spill1388; CHECK-GI-NEXT: fmov s0, s11389; CHECK-GI-NEXT: bl __powisf21390; CHECK-GI-NEXT: ldr q3, [sp, #192] // 16-byte Reload1391; CHECK-GI-NEXT: ldr q2, [sp, #144] // 16-byte Reload1392; CHECK-GI-NEXT: ldr x29, [sp, #304] // 8-byte Reload1393; CHECK-GI-NEXT: ldp x30, x19, [sp, #320] // 16-byte Folded Reload1394; CHECK-GI-NEXT: mov v3.h[1], v2.h[0]1395; CHECK-GI-NEXT: ldp q1, q2, [sp] // 32-byte Folded Reload1396; CHECK-GI-NEXT: ldp d9, d8, [sp, #288] // 16-byte Folded Reload1397; CHECK-GI-NEXT: ldp d11, d10, [sp, #272] // 16-byte Folded Reload1398; CHECK-GI-NEXT: mov v1.h[1], v2.h[0]1399; CHECK-GI-NEXT: ldr q2, [sp, #224] // 16-byte Reload1400; CHECK-GI-NEXT: ldp d13, d12, [sp, #256] // 16-byte Folded Reload1401; CHECK-GI-NEXT: mov v3.h[2], v2.h[0]1402; CHECK-GI-NEXT: ldr q2, [sp, #32] // 16-byte Reload1403; CHECK-GI-NEXT: ldp d15, d14, [sp, #240] // 16-byte Folded Reload1404; CHECK-GI-NEXT: mov v1.h[2], v2.h[0]1405; CHECK-GI-NEXT: ldr q2, [sp, #208] // 16-byte Reload1406; CHECK-GI-NEXT: mov v3.h[3], v2.h[0]1407; CHECK-GI-NEXT: ldr q2, [sp, #48] // 16-byte Reload1408; CHECK-GI-NEXT: mov v1.h[3], v2.h[0]1409; CHECK-GI-NEXT: ldr q2, [sp, #160] // 16-byte Reload1410; CHECK-GI-NEXT: mov v3.h[4], v2.h[0]1411; CHECK-GI-NEXT: ldr q2, [sp, #80] // 16-byte Reload1412; CHECK-GI-NEXT: mov v1.h[4], v2.h[0]1413; CHECK-GI-NEXT: ldp q2, q4, [sp, #112] // 32-byte Folded Reload1414; CHECK-GI-NEXT: mov v3.h[5], v4.h[0]1415; CHECK-GI-NEXT: mov v1.h[5], v2.h[0]1416; CHECK-GI-NEXT: fcvt h2, s01417; CHECK-GI-NEXT: ldr q0, [sp, #96] // 16-byte Reload1418; CHECK-GI-NEXT: mov v3.h[6], v0.h[0]1419; CHECK-GI-NEXT: ldr q0, [sp, #176] // 16-byte Reload1420; CHECK-GI-NEXT: mov v1.h[6], v0.h[0]1421; CHECK-GI-NEXT: ldr q0, [sp, #64] // 16-byte Reload1422; CHECK-GI-NEXT: mov v3.h[7], v0.h[0]1423; CHECK-GI-NEXT: mov v1.h[7], v2.h[0]1424; CHECK-GI-NEXT: mov v0.16b, v3.16b1425; CHECK-GI-NEXT: add sp, sp, #3361426; CHECK-GI-NEXT: ret1427entry:1428 %c = call <16 x half> @llvm.powi.v16f16.i32(<16 x half> %a, i32 %b)1429 ret <16 x half> %c1430}1431 1432define <2 x fp128> @powi_v2fp128(<2 x fp128> %a, i32 %b) {1433; CHECK-SD-LABEL: powi_v2fp128:1434; CHECK-SD: // %bb.0: // %entry1435; CHECK-SD-NEXT: sub sp, sp, #481436; CHECK-SD-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill1437; CHECK-SD-NEXT: .cfi_def_cfa_offset 481438; CHECK-SD-NEXT: .cfi_offset w19, -81439; CHECK-SD-NEXT: .cfi_offset w30, -161440; CHECK-SD-NEXT: mov w19, w01441; CHECK-SD-NEXT: str q1, [sp, #16] // 16-byte Spill1442; CHECK-SD-NEXT: bl __powitf21443; CHECK-SD-NEXT: str q0, [sp] // 16-byte Spill1444; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Reload1445; CHECK-SD-NEXT: mov w0, w191446; CHECK-SD-NEXT: bl __powitf21447; CHECK-SD-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload1448; CHECK-SD-NEXT: mov v1.16b, v0.16b1449; CHECK-SD-NEXT: ldr q0, [sp] // 16-byte Reload1450; CHECK-SD-NEXT: add sp, sp, #481451; CHECK-SD-NEXT: ret1452;1453; CHECK-GI-LABEL: powi_v2fp128:1454; CHECK-GI: // %bb.0: // %entry1455; CHECK-GI-NEXT: sub sp, sp, #481456; CHECK-GI-NEXT: stp x30, x19, [sp, #32] // 16-byte Folded Spill1457; CHECK-GI-NEXT: .cfi_def_cfa_offset 481458; CHECK-GI-NEXT: .cfi_offset w19, -81459; CHECK-GI-NEXT: .cfi_offset w30, -161460; CHECK-GI-NEXT: str q1, [sp, #16] // 16-byte Spill1461; CHECK-GI-NEXT: mov w19, w01462; CHECK-GI-NEXT: bl __powitf21463; CHECK-GI-NEXT: str q0, [sp] // 16-byte Spill1464; CHECK-GI-NEXT: ldr q0, [sp, #16] // 16-byte Reload1465; CHECK-GI-NEXT: mov w0, w191466; CHECK-GI-NEXT: bl __powitf21467; CHECK-GI-NEXT: ldp x30, x19, [sp, #32] // 16-byte Folded Reload1468; CHECK-GI-NEXT: mov v1.16b, v0.16b1469; CHECK-GI-NEXT: ldr q0, [sp] // 16-byte Reload1470; CHECK-GI-NEXT: add sp, sp, #481471; CHECK-GI-NEXT: ret1472entry:1473 %c = call <2 x fp128> @llvm.powi.v2fp128.i32(<2 x fp128> %a, i32 %b)1474 ret <2 x fp128> %c1475}1476 1477declare <1 x double> @llvm.powi.v1f64.i32(<1 x double>, i32)1478declare <16 x half> @llvm.powi.v16f16.i32(<16 x half>, i32)1479declare <2 x double> @llvm.powi.v2f64.i32(<2 x double>, i32)1480declare <2 x float> @llvm.powi.v2f32.i32(<2 x float>, i32)1481declare <2 x fp128> @llvm.powi.v2fp128.i32(<2 x fp128>, i32)1482declare <3 x double> @llvm.powi.v3f64.i32(<3 x double>, i32)1483declare <3 x float> @llvm.powi.v3f32.i32(<3 x float>, i32)1484declare <4 x double> @llvm.powi.v4f64.i32(<4 x double>, i32)1485declare <4 x float> @llvm.powi.v4f32.i32(<4 x float>, i32)1486declare <4 x half> @llvm.powi.v4f16.i32(<4 x half>, i32)1487declare <7 x half> @llvm.powi.v7f16.i32(<7 x half>, i32)1488declare <8 x float> @llvm.powi.v8f32.i32(<8 x float>, i32)1489declare <8 x half> @llvm.powi.v8f16.i32(<8 x half>, i32)1490declare double @llvm.powi.f64.i32(double, i32)1491declare float @llvm.powi.f32.i32(float, i32)1492declare fp128 @llvm.powi.fp128.i32(fp128, i32)1493declare half @llvm.powi.f16.i32(half, i32)1494