brintos

brintos / llvm-project-archived public Read only

0
0
Text · 67.8 KiB · 3e9e1da Raw
1660 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; 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 @pow_f64(double %a, double %b) {6; CHECK-LABEL: pow_f64:7; CHECK:       // %bb.0: // %entry8; CHECK-NEXT:    b pow9entry:10  %c = call double @llvm.pow.f64(double %a, double %b)11  ret double %c12}13 14define float @pow_f32(float %a, float %b) {15; CHECK-LABEL: pow_f32:16; CHECK:       // %bb.0: // %entry17; CHECK-NEXT:    b powf18entry:19  %c = call float @llvm.pow.f32(float %a, float %b)20  ret float %c21}22 23define half @pow_f16(half %a, half %b) {24; CHECK-LABEL: pow_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:    fcvt s1, h131; CHECK-NEXT:    bl powf32; CHECK-NEXT:    fcvt h0, s033; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload34; CHECK-NEXT:    ret35entry:36  %c = call half @llvm.pow.f16(half %a, half %b)37  ret half %c38}39 40define fp128 @pow_fp128(fp128 %a, fp128 %b) {41; CHECK-LABEL: pow_fp128:42; CHECK:       // %bb.0: // %entry43; CHECK-NEXT:    b powl44entry:45  %c = call fp128 @llvm.pow.fp128(fp128 %a, fp128 %b)46  ret fp128 %c47}48 49define <1 x double> @pow_v1f64(<1 x double> %x) {50; CHECK-LABEL: pow_v1f64:51; CHECK:       // %bb.0:52; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill53; CHECK-NEXT:    .cfi_def_cfa_offset 1654; CHECK-NEXT:    .cfi_offset w30, -1655; CHECK-NEXT:    adrp x8, .LCPI4_056; CHECK-NEXT:    ldr d1, [x8, :lo12:.LCPI4_0]57; CHECK-NEXT:    bl pow58; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload59; CHECK-NEXT:    ret60  %c = call <1 x double> @llvm.pow.v1f64(<1 x double> %x, <1 x double> <double 3.140000e+00>)61  ret <1 x double> %c62}63 64define <2 x double> @pow_v2f64(<2 x double> %a, <2 x double> %b) {65; CHECK-SD-LABEL: pow_v2f64:66; CHECK-SD:       // %bb.0: // %entry67; CHECK-SD-NEXT:    sub sp, sp, #6468; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill69; CHECK-SD-NEXT:    .cfi_def_cfa_offset 6470; CHECK-SD-NEXT:    .cfi_offset w30, -1671; CHECK-SD-NEXT:    stp q0, q1, [sp] // 32-byte Folded Spill72; CHECK-SD-NEXT:    mov d0, v0.d[1]73; CHECK-SD-NEXT:    mov d1, v1.d[1]74; CHECK-SD-NEXT:    bl pow75; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q076; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill77; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload78; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q079; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q180; CHECK-SD-NEXT:    bl pow81; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload82; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q083; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload84; CHECK-SD-NEXT:    mov v0.d[1], v1.d[0]85; CHECK-SD-NEXT:    add sp, sp, #6486; CHECK-SD-NEXT:    ret87;88; CHECK-GI-LABEL: pow_v2f64:89; CHECK-GI:       // %bb.0: // %entry90; CHECK-GI-NEXT:    sub sp, sp, #4891; CHECK-GI-NEXT:    stp d9, d8, [sp, #16] // 16-byte Folded Spill92; CHECK-GI-NEXT:    str x30, [sp, #32] // 8-byte Spill93; CHECK-GI-NEXT:    .cfi_def_cfa_offset 4894; CHECK-GI-NEXT:    .cfi_offset w30, -1695; CHECK-GI-NEXT:    .cfi_offset b8, -2496; CHECK-GI-NEXT:    .cfi_offset b9, -3297; CHECK-GI-NEXT:    mov d8, v0.d[1]98; CHECK-GI-NEXT:    mov d9, v1.d[1]99; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0100; CHECK-GI-NEXT:    // kill: def $d1 killed $d1 killed $q1101; CHECK-GI-NEXT:    bl pow102; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0103; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill104; CHECK-GI-NEXT:    fmov d1, d9105; CHECK-GI-NEXT:    fmov d0, d8106; CHECK-GI-NEXT:    bl pow107; CHECK-GI-NEXT:    ldr q1, [sp] // 16-byte Reload108; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0109; CHECK-GI-NEXT:    ldp d9, d8, [sp, #16] // 16-byte Folded Reload110; CHECK-GI-NEXT:    ldr x30, [sp, #32] // 8-byte Reload111; CHECK-GI-NEXT:    mov v1.d[1], v0.d[0]112; CHECK-GI-NEXT:    mov v0.16b, v1.16b113; CHECK-GI-NEXT:    add sp, sp, #48114; CHECK-GI-NEXT:    ret115entry:116  %c = call <2 x double> @llvm.pow.v2f64(<2 x double> %a, <2 x double> %b)117  ret <2 x double> %c118}119 120define <3 x double> @pow_v3f64(<3 x double> %a, <3 x double> %b) {121; CHECK-SD-LABEL: pow_v3f64:122; CHECK-SD:       // %bb.0: // %entry123; CHECK-SD-NEXT:    str d12, [sp, #-48]! // 8-byte Folded Spill124; CHECK-SD-NEXT:    stp d11, d10, [sp, #8] // 16-byte Folded Spill125; CHECK-SD-NEXT:    stp d9, d8, [sp, #24] // 16-byte Folded Spill126; CHECK-SD-NEXT:    str x30, [sp, #40] // 8-byte Spill127; CHECK-SD-NEXT:    .cfi_def_cfa_offset 48128; CHECK-SD-NEXT:    .cfi_offset w30, -8129; CHECK-SD-NEXT:    .cfi_offset b8, -16130; CHECK-SD-NEXT:    .cfi_offset b9, -24131; CHECK-SD-NEXT:    .cfi_offset b10, -32132; CHECK-SD-NEXT:    .cfi_offset b11, -40133; CHECK-SD-NEXT:    .cfi_offset b12, -48134; CHECK-SD-NEXT:    fmov d11, d1135; CHECK-SD-NEXT:    fmov d1, d3136; CHECK-SD-NEXT:    fmov d8, d5137; CHECK-SD-NEXT:    fmov d9, d4138; CHECK-SD-NEXT:    fmov d10, d2139; CHECK-SD-NEXT:    bl pow140; CHECK-SD-NEXT:    fmov d12, d0141; CHECK-SD-NEXT:    fmov d0, d11142; CHECK-SD-NEXT:    fmov d1, d9143; CHECK-SD-NEXT:    bl pow144; CHECK-SD-NEXT:    fmov d9, d0145; CHECK-SD-NEXT:    fmov d0, d10146; CHECK-SD-NEXT:    fmov d1, d8147; CHECK-SD-NEXT:    bl pow148; CHECK-SD-NEXT:    fmov d1, d9149; CHECK-SD-NEXT:    ldp d9, d8, [sp, #24] // 16-byte Folded Reload150; CHECK-SD-NEXT:    ldp d11, d10, [sp, #8] // 16-byte Folded Reload151; CHECK-SD-NEXT:    fmov d2, d0152; CHECK-SD-NEXT:    ldr x30, [sp, #40] // 8-byte Reload153; CHECK-SD-NEXT:    fmov d0, d12154; CHECK-SD-NEXT:    ldr d12, [sp], #48 // 8-byte Folded Reload155; CHECK-SD-NEXT:    ret156;157; CHECK-GI-LABEL: pow_v3f64:158; CHECK-GI:       // %bb.0: // %entry159; CHECK-GI-NEXT:    str d12, [sp, #-48]! // 8-byte Folded Spill160; CHECK-GI-NEXT:    stp d11, d10, [sp, #8] // 16-byte Folded Spill161; CHECK-GI-NEXT:    stp d9, d8, [sp, #24] // 16-byte Folded Spill162; CHECK-GI-NEXT:    str x30, [sp, #40] // 8-byte Spill163; CHECK-GI-NEXT:    .cfi_def_cfa_offset 48164; CHECK-GI-NEXT:    .cfi_offset w30, -8165; CHECK-GI-NEXT:    .cfi_offset b8, -16166; CHECK-GI-NEXT:    .cfi_offset b9, -24167; CHECK-GI-NEXT:    .cfi_offset b10, -32168; CHECK-GI-NEXT:    .cfi_offset b11, -40169; CHECK-GI-NEXT:    .cfi_offset b12, -48170; CHECK-GI-NEXT:    fmov d8, d1171; CHECK-GI-NEXT:    fmov d1, d3172; CHECK-GI-NEXT:    fmov d9, d2173; CHECK-GI-NEXT:    fmov d10, d4174; CHECK-GI-NEXT:    fmov d11, d5175; CHECK-GI-NEXT:    bl pow176; CHECK-GI-NEXT:    fmov d12, d0177; CHECK-GI-NEXT:    fmov d0, d8178; CHECK-GI-NEXT:    fmov d1, d10179; CHECK-GI-NEXT:    bl pow180; CHECK-GI-NEXT:    fmov d8, d0181; CHECK-GI-NEXT:    fmov d0, d9182; CHECK-GI-NEXT:    fmov d1, d11183; CHECK-GI-NEXT:    bl pow184; CHECK-GI-NEXT:    fmov d1, d8185; CHECK-GI-NEXT:    ldp d9, d8, [sp, #24] // 16-byte Folded Reload186; CHECK-GI-NEXT:    ldp d11, d10, [sp, #8] // 16-byte Folded Reload187; CHECK-GI-NEXT:    fmov d2, d0188; CHECK-GI-NEXT:    ldr x30, [sp, #40] // 8-byte Reload189; CHECK-GI-NEXT:    fmov d0, d12190; CHECK-GI-NEXT:    ldr d12, [sp], #48 // 8-byte Folded Reload191; CHECK-GI-NEXT:    ret192entry:193  %c = call <3 x double> @llvm.pow.v3f64(<3 x double> %a, <3 x double> %b)194  ret <3 x double> %c195}196 197define <4 x double> @pow_v4f64(<4 x double> %a, <4 x double> %b) {198; CHECK-SD-LABEL: pow_v4f64:199; CHECK-SD:       // %bb.0: // %entry200; CHECK-SD-NEXT:    sub sp, sp, #96201; CHECK-SD-NEXT:    str x30, [sp, #80] // 8-byte Spill202; CHECK-SD-NEXT:    .cfi_def_cfa_offset 96203; CHECK-SD-NEXT:    .cfi_offset w30, -16204; CHECK-SD-NEXT:    stp q0, q2, [sp] // 32-byte Folded Spill205; CHECK-SD-NEXT:    mov d0, v0.d[1]206; CHECK-SD-NEXT:    stp q1, q3, [sp, #48] // 32-byte Folded Spill207; CHECK-SD-NEXT:    mov d1, v2.d[1]208; CHECK-SD-NEXT:    bl pow209; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0210; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill211; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload212; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0213; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q1214; CHECK-SD-NEXT:    bl pow215; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload216; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0217; CHECK-SD-NEXT:    mov v0.d[1], v1.d[0]218; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill219; CHECK-SD-NEXT:    ldp q0, q1, [sp, #48] // 32-byte Folded Reload220; CHECK-SD-NEXT:    mov d0, v0.d[1]221; CHECK-SD-NEXT:    mov d1, v1.d[1]222; CHECK-SD-NEXT:    bl pow223; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0224; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill225; CHECK-SD-NEXT:    ldp q0, q1, [sp, #48] // 32-byte Folded Reload226; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0227; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q1228; CHECK-SD-NEXT:    bl pow229; CHECK-SD-NEXT:    fmov d1, d0230; CHECK-SD-NEXT:    ldp q2, q0, [sp, #16] // 32-byte Folded Reload231; CHECK-SD-NEXT:    ldr x30, [sp, #80] // 8-byte Reload232; CHECK-SD-NEXT:    mov v1.d[1], v2.d[0]233; CHECK-SD-NEXT:    add sp, sp, #96234; CHECK-SD-NEXT:    ret235;236; CHECK-GI-LABEL: pow_v4f64:237; CHECK-GI:       // %bb.0: // %entry238; CHECK-GI-NEXT:    sub sp, sp, #112239; CHECK-GI-NEXT:    stp d11, d10, [sp, #64] // 16-byte Folded Spill240; CHECK-GI-NEXT:    stp d9, d8, [sp, #80] // 16-byte Folded Spill241; CHECK-GI-NEXT:    str x30, [sp, #96] // 8-byte Spill242; CHECK-GI-NEXT:    .cfi_def_cfa_offset 112243; CHECK-GI-NEXT:    .cfi_offset w30, -16244; CHECK-GI-NEXT:    .cfi_offset b8, -24245; CHECK-GI-NEXT:    .cfi_offset b9, -32246; CHECK-GI-NEXT:    .cfi_offset b10, -40247; CHECK-GI-NEXT:    .cfi_offset b11, -48248; CHECK-GI-NEXT:    mov v4.16b, v1.16b249; CHECK-GI-NEXT:    str q1, [sp, #32] // 16-byte Spill250; CHECK-GI-NEXT:    mov v1.16b, v2.16b251; CHECK-GI-NEXT:    str q3, [sp] // 16-byte Spill252; CHECK-GI-NEXT:    mov d8, v0.d[1]253; CHECK-GI-NEXT:    mov d10, v2.d[1]254; CHECK-GI-NEXT:    mov d11, v3.d[1]255; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0256; CHECK-GI-NEXT:    // kill: def $d1 killed $d1 killed $q1257; CHECK-GI-NEXT:    mov d9, v4.d[1]258; CHECK-GI-NEXT:    bl pow259; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0260; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill261; CHECK-GI-NEXT:    fmov d1, d10262; CHECK-GI-NEXT:    fmov d0, d8263; CHECK-GI-NEXT:    bl pow264; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0265; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill266; CHECK-GI-NEXT:    ldr q1, [sp] // 16-byte Reload267; CHECK-GI-NEXT:    ldr q0, [sp, #32] // 16-byte Reload268; CHECK-GI-NEXT:    // kill: def $d1 killed $d1 killed $q1269; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0270; CHECK-GI-NEXT:    bl pow271; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0272; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill273; CHECK-GI-NEXT:    fmov d1, d11274; CHECK-GI-NEXT:    fmov d0, d9275; CHECK-GI-NEXT:    bl pow276; CHECK-GI-NEXT:    ldp q3, q1, [sp, #16] // 32-byte Folded Reload277; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0278; CHECK-GI-NEXT:    ldr q2, [sp, #48] // 16-byte Reload279; CHECK-GI-NEXT:    ldp d9, d8, [sp, #80] // 16-byte Folded Reload280; CHECK-GI-NEXT:    ldr x30, [sp, #96] // 8-byte Reload281; CHECK-GI-NEXT:    ldp d11, d10, [sp, #64] // 16-byte Folded Reload282; CHECK-GI-NEXT:    mov v2.d[1], v3.d[0]283; CHECK-GI-NEXT:    mov v1.d[1], v0.d[0]284; CHECK-GI-NEXT:    mov v0.16b, v2.16b285; CHECK-GI-NEXT:    add sp, sp, #112286; CHECK-GI-NEXT:    ret287entry:288  %c = call <4 x double> @llvm.pow.v4f64(<4 x double> %a, <4 x double> %b)289  ret <4 x double> %c290}291 292define <2 x float> @pow_v2f32(<2 x float> %a, <2 x float> %b) {293; CHECK-SD-LABEL: pow_v2f32:294; CHECK-SD:       // %bb.0: // %entry295; CHECK-SD-NEXT:    sub sp, sp, #64296; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill297; CHECK-SD-NEXT:    .cfi_def_cfa_offset 64298; CHECK-SD-NEXT:    .cfi_offset w30, -16299; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 def $q1300; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0301; CHECK-SD-NEXT:    stp q0, q1, [sp] // 32-byte Folded Spill302; CHECK-SD-NEXT:    mov s0, v0.s[1]303; CHECK-SD-NEXT:    mov s1, v1.s[1]304; CHECK-SD-NEXT:    bl powf305; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0306; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill307; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload308; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q0309; CHECK-SD-NEXT:    // kill: def $s1 killed $s1 killed $q1310; CHECK-SD-NEXT:    bl powf311; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload312; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0313; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload314; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]315; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0316; CHECK-SD-NEXT:    add sp, sp, #64317; CHECK-SD-NEXT:    ret318;319; CHECK-GI-LABEL: pow_v2f32:320; CHECK-GI:       // %bb.0: // %entry321; CHECK-GI-NEXT:    sub sp, sp, #48322; CHECK-GI-NEXT:    stp d9, d8, [sp, #16] // 16-byte Folded Spill323; CHECK-GI-NEXT:    str x30, [sp, #32] // 8-byte Spill324; CHECK-GI-NEXT:    .cfi_def_cfa_offset 48325; CHECK-GI-NEXT:    .cfi_offset w30, -16326; CHECK-GI-NEXT:    .cfi_offset b8, -24327; CHECK-GI-NEXT:    .cfi_offset b9, -32328; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0329; CHECK-GI-NEXT:    // kill: def $d1 killed $d1 def $q1330; CHECK-GI-NEXT:    mov s8, v0.s[1]331; CHECK-GI-NEXT:    mov s9, v1.s[1]332; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q0333; CHECK-GI-NEXT:    // kill: def $s1 killed $s1 killed $q1334; CHECK-GI-NEXT:    bl powf335; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0336; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill337; CHECK-GI-NEXT:    fmov s1, s9338; CHECK-GI-NEXT:    fmov s0, s8339; CHECK-GI-NEXT:    bl powf340; CHECK-GI-NEXT:    ldr q1, [sp] // 16-byte Reload341; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0342; CHECK-GI-NEXT:    ldp d9, d8, [sp, #16] // 16-byte Folded Reload343; CHECK-GI-NEXT:    ldr x30, [sp, #32] // 8-byte Reload344; CHECK-GI-NEXT:    mov v1.s[1], v0.s[0]345; CHECK-GI-NEXT:    fmov d0, d1346; CHECK-GI-NEXT:    add sp, sp, #48347; CHECK-GI-NEXT:    ret348entry:349  %c = call <2 x float> @llvm.pow.v2f32(<2 x float> %a, <2 x float> %b)350  ret <2 x float> %c351}352 353define <3 x float> @pow_v3f32(<3 x float> %a, <3 x float> %b) {354; CHECK-SD-LABEL: pow_v3f32:355; CHECK-SD:       // %bb.0: // %entry356; CHECK-SD-NEXT:    sub sp, sp, #64357; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill358; CHECK-SD-NEXT:    .cfi_def_cfa_offset 64359; CHECK-SD-NEXT:    .cfi_offset w30, -16360; CHECK-SD-NEXT:    stp q0, q1, [sp, #16] // 32-byte Folded Spill361; CHECK-SD-NEXT:    mov s0, v0.s[1]362; CHECK-SD-NEXT:    mov s1, v1.s[1]363; CHECK-SD-NEXT:    bl powf364; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0365; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill366; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload367; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q0368; CHECK-SD-NEXT:    // kill: def $s1 killed $s1 killed $q1369; CHECK-SD-NEXT:    bl powf370; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload371; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0372; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]373; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill374; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload375; CHECK-SD-NEXT:    mov s0, v0.s[2]376; CHECK-SD-NEXT:    mov s1, v1.s[2]377; CHECK-SD-NEXT:    bl powf378; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload379; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0380; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload381; CHECK-SD-NEXT:    mov v1.s[2], v0.s[0]382; CHECK-SD-NEXT:    mov v0.16b, v1.16b383; CHECK-SD-NEXT:    add sp, sp, #64384; CHECK-SD-NEXT:    ret385;386; CHECK-GI-LABEL: pow_v3f32:387; CHECK-GI:       // %bb.0: // %entry388; CHECK-GI-NEXT:    sub sp, sp, #80389; CHECK-GI-NEXT:    stp d11, d10, [sp, #32] // 16-byte Folded Spill390; CHECK-GI-NEXT:    stp d9, d8, [sp, #48] // 16-byte Folded Spill391; CHECK-GI-NEXT:    str x30, [sp, #64] // 8-byte Spill392; CHECK-GI-NEXT:    .cfi_def_cfa_offset 80393; CHECK-GI-NEXT:    .cfi_offset w30, -16394; CHECK-GI-NEXT:    .cfi_offset b8, -24395; CHECK-GI-NEXT:    .cfi_offset b9, -32396; CHECK-GI-NEXT:    .cfi_offset b10, -40397; CHECK-GI-NEXT:    .cfi_offset b11, -48398; CHECK-GI-NEXT:    mov s8, v0.s[1]399; CHECK-GI-NEXT:    mov s9, v0.s[2]400; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q0401; CHECK-GI-NEXT:    mov s10, v1.s[1]402; CHECK-GI-NEXT:    mov s11, v1.s[2]403; CHECK-GI-NEXT:    // kill: def $s1 killed $s1 killed $q1404; CHECK-GI-NEXT:    bl powf405; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0406; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill407; CHECK-GI-NEXT:    fmov s1, s10408; CHECK-GI-NEXT:    fmov s0, s8409; CHECK-GI-NEXT:    bl powf410; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0411; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill412; CHECK-GI-NEXT:    fmov s1, s11413; CHECK-GI-NEXT:    fmov s0, s9414; CHECK-GI-NEXT:    bl powf415; CHECK-GI-NEXT:    ldp q2, q1, [sp] // 32-byte Folded Reload416; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0417; CHECK-GI-NEXT:    ldr x30, [sp, #64] // 8-byte Reload418; CHECK-GI-NEXT:    ldp d9, d8, [sp, #48] // 16-byte Folded Reload419; CHECK-GI-NEXT:    ldp d11, d10, [sp, #32] // 16-byte Folded Reload420; CHECK-GI-NEXT:    mov v1.s[1], v2.s[0]421; CHECK-GI-NEXT:    mov v1.s[2], v0.s[0]422; CHECK-GI-NEXT:    mov v0.16b, v1.16b423; CHECK-GI-NEXT:    add sp, sp, #80424; CHECK-GI-NEXT:    ret425entry:426  %c = call <3 x float> @llvm.pow.v3f32(<3 x float> %a, <3 x float> %b)427  ret <3 x float> %c428}429 430define <4 x float> @pow_v4f32(<4 x float> %a, <4 x float> %b) {431; CHECK-SD-LABEL: pow_v4f32:432; CHECK-SD:       // %bb.0: // %entry433; CHECK-SD-NEXT:    sub sp, sp, #64434; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill435; CHECK-SD-NEXT:    .cfi_def_cfa_offset 64436; CHECK-SD-NEXT:    .cfi_offset w30, -16437; CHECK-SD-NEXT:    stp q0, q1, [sp, #16] // 32-byte Folded Spill438; CHECK-SD-NEXT:    mov s0, v0.s[1]439; CHECK-SD-NEXT:    mov s1, v1.s[1]440; CHECK-SD-NEXT:    bl powf441; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0442; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill443; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload444; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q0445; CHECK-SD-NEXT:    // kill: def $s1 killed $s1 killed $q1446; CHECK-SD-NEXT:    bl powf447; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload448; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0449; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]450; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill451; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload452; CHECK-SD-NEXT:    mov s0, v0.s[2]453; CHECK-SD-NEXT:    mov s1, v1.s[2]454; CHECK-SD-NEXT:    bl powf455; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload456; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0457; CHECK-SD-NEXT:    mov v1.s[2], v0.s[0]458; CHECK-SD-NEXT:    str q1, [sp] // 16-byte Spill459; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload460; CHECK-SD-NEXT:    mov s0, v0.s[3]461; CHECK-SD-NEXT:    mov s1, v1.s[3]462; CHECK-SD-NEXT:    bl powf463; CHECK-SD-NEXT:    ldr q1, [sp] // 16-byte Reload464; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0465; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload466; CHECK-SD-NEXT:    mov v1.s[3], v0.s[0]467; CHECK-SD-NEXT:    mov v0.16b, v1.16b468; CHECK-SD-NEXT:    add sp, sp, #64469; CHECK-SD-NEXT:    ret470;471; CHECK-GI-LABEL: pow_v4f32:472; CHECK-GI:       // %bb.0: // %entry473; CHECK-GI-NEXT:    sub sp, sp, #112474; CHECK-GI-NEXT:    stp d13, d12, [sp, #48] // 16-byte Folded Spill475; CHECK-GI-NEXT:    stp d11, d10, [sp, #64] // 16-byte Folded Spill476; CHECK-GI-NEXT:    stp d9, d8, [sp, #80] // 16-byte Folded Spill477; CHECK-GI-NEXT:    str x30, [sp, #96] // 8-byte Spill478; CHECK-GI-NEXT:    .cfi_def_cfa_offset 112479; CHECK-GI-NEXT:    .cfi_offset w30, -16480; CHECK-GI-NEXT:    .cfi_offset b8, -24481; CHECK-GI-NEXT:    .cfi_offset b9, -32482; CHECK-GI-NEXT:    .cfi_offset b10, -40483; CHECK-GI-NEXT:    .cfi_offset b11, -48484; CHECK-GI-NEXT:    .cfi_offset b12, -56485; CHECK-GI-NEXT:    .cfi_offset b13, -64486; CHECK-GI-NEXT:    mov s8, v0.s[1]487; CHECK-GI-NEXT:    mov s9, v0.s[2]488; CHECK-GI-NEXT:    mov s10, v0.s[3]489; CHECK-GI-NEXT:    mov s11, v1.s[1]490; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q0491; CHECK-GI-NEXT:    mov s12, v1.s[2]492; CHECK-GI-NEXT:    mov s13, v1.s[3]493; CHECK-GI-NEXT:    // kill: def $s1 killed $s1 killed $q1494; CHECK-GI-NEXT:    bl powf495; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0496; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill497; CHECK-GI-NEXT:    fmov s1, s11498; CHECK-GI-NEXT:    fmov s0, s8499; CHECK-GI-NEXT:    bl powf500; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0501; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill502; CHECK-GI-NEXT:    fmov s1, s12503; CHECK-GI-NEXT:    fmov s0, s9504; CHECK-GI-NEXT:    bl powf505; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0506; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill507; CHECK-GI-NEXT:    fmov s1, s13508; CHECK-GI-NEXT:    fmov s0, s10509; CHECK-GI-NEXT:    bl powf510; CHECK-GI-NEXT:    ldp q2, q1, [sp, #16] // 32-byte Folded Reload511; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0512; CHECK-GI-NEXT:    ldr x30, [sp, #96] // 8-byte Reload513; CHECK-GI-NEXT:    ldp d9, d8, [sp, #80] // 16-byte Folded Reload514; CHECK-GI-NEXT:    ldp d11, d10, [sp, #64] // 16-byte Folded Reload515; CHECK-GI-NEXT:    mov v1.s[1], v2.s[0]516; CHECK-GI-NEXT:    ldr q2, [sp] // 16-byte Reload517; CHECK-GI-NEXT:    ldp d13, d12, [sp, #48] // 16-byte Folded Reload518; CHECK-GI-NEXT:    mov v1.s[2], v2.s[0]519; CHECK-GI-NEXT:    mov v1.s[3], v0.s[0]520; CHECK-GI-NEXT:    mov v0.16b, v1.16b521; CHECK-GI-NEXT:    add sp, sp, #112522; CHECK-GI-NEXT:    ret523entry:524  %c = call <4 x float> @llvm.pow.v4f32(<4 x float> %a, <4 x float> %b)525  ret <4 x float> %c526}527 528define <8 x float> @pow_v8f32(<8 x float> %a, <8 x float> %b) {529; CHECK-SD-LABEL: pow_v8f32:530; CHECK-SD:       // %bb.0: // %entry531; CHECK-SD-NEXT:    sub sp, sp, #96532; CHECK-SD-NEXT:    str x30, [sp, #80] // 8-byte Spill533; CHECK-SD-NEXT:    .cfi_def_cfa_offset 96534; CHECK-SD-NEXT:    .cfi_offset w30, -16535; CHECK-SD-NEXT:    stp q0, q2, [sp] // 32-byte Folded Spill536; CHECK-SD-NEXT:    mov s0, v0.s[1]537; CHECK-SD-NEXT:    stp q1, q3, [sp, #32] // 32-byte Folded Spill538; CHECK-SD-NEXT:    mov s1, v2.s[1]539; CHECK-SD-NEXT:    bl powf540; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0541; CHECK-SD-NEXT:    str q0, [sp, #64] // 16-byte Spill542; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload543; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q0544; CHECK-SD-NEXT:    // kill: def $s1 killed $s1 killed $q1545; CHECK-SD-NEXT:    bl powf546; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload547; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0548; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]549; CHECK-SD-NEXT:    str q0, [sp, #64] // 16-byte Spill550; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload551; CHECK-SD-NEXT:    mov s0, v0.s[2]552; CHECK-SD-NEXT:    mov s1, v1.s[2]553; CHECK-SD-NEXT:    bl powf554; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload555; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0556; CHECK-SD-NEXT:    mov v1.s[2], v0.s[0]557; CHECK-SD-NEXT:    str q1, [sp, #64] // 16-byte Spill558; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload559; CHECK-SD-NEXT:    mov s0, v0.s[3]560; CHECK-SD-NEXT:    mov s1, v1.s[3]561; CHECK-SD-NEXT:    bl powf562; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload563; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0564; CHECK-SD-NEXT:    mov v1.s[3], v0.s[0]565; CHECK-SD-NEXT:    str q1, [sp, #64] // 16-byte Spill566; CHECK-SD-NEXT:    ldp q0, q1, [sp, #32] // 32-byte Folded Reload567; CHECK-SD-NEXT:    mov s0, v0.s[1]568; CHECK-SD-NEXT:    mov s1, v1.s[1]569; CHECK-SD-NEXT:    bl powf570; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0571; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill572; CHECK-SD-NEXT:    ldp q0, q1, [sp, #32] // 32-byte Folded Reload573; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 killed $q0574; CHECK-SD-NEXT:    // kill: def $s1 killed $s1 killed $q1575; CHECK-SD-NEXT:    bl powf576; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload577; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0578; CHECK-SD-NEXT:    mov v0.s[1], v1.s[0]579; CHECK-SD-NEXT:    str q0, [sp, #16] // 16-byte Spill580; CHECK-SD-NEXT:    ldp q0, q1, [sp, #32] // 32-byte Folded Reload581; CHECK-SD-NEXT:    mov s0, v0.s[2]582; CHECK-SD-NEXT:    mov s1, v1.s[2]583; CHECK-SD-NEXT:    bl powf584; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload585; CHECK-SD-NEXT:    // kill: def $s0 killed $s0 def $q0586; CHECK-SD-NEXT:    mov v1.s[2], v0.s[0]587; CHECK-SD-NEXT:    str q1, [sp, #16] // 16-byte Spill588; CHECK-SD-NEXT:    ldp q0, q1, [sp, #32] // 32-byte Folded Reload589; CHECK-SD-NEXT:    mov s0, v0.s[3]590; CHECK-SD-NEXT:    mov s1, v1.s[3]591; CHECK-SD-NEXT:    bl powf592; CHECK-SD-NEXT:    fmov s2, s0593; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload594; CHECK-SD-NEXT:    ldr q0, [sp, #64] // 16-byte Reload595; CHECK-SD-NEXT:    ldr x30, [sp, #80] // 8-byte Reload596; CHECK-SD-NEXT:    mov v1.s[3], v2.s[0]597; CHECK-SD-NEXT:    add sp, sp, #96598; CHECK-SD-NEXT:    ret599;600; CHECK-GI-LABEL: pow_v8f32:601; CHECK-GI:       // %bb.0: // %entry602; CHECK-GI-NEXT:    sub sp, sp, #208603; CHECK-GI-NEXT:    stp d15, d14, [sp, #128] // 16-byte Folded Spill604; CHECK-GI-NEXT:    stp d13, d12, [sp, #144] // 16-byte Folded Spill605; CHECK-GI-NEXT:    stp d11, d10, [sp, #160] // 16-byte Folded Spill606; CHECK-GI-NEXT:    stp d9, d8, [sp, #176] // 16-byte Folded Spill607; CHECK-GI-NEXT:    str x30, [sp, #192] // 8-byte Spill608; CHECK-GI-NEXT:    .cfi_def_cfa_offset 208609; CHECK-GI-NEXT:    .cfi_offset w30, -16610; CHECK-GI-NEXT:    .cfi_offset b8, -24611; CHECK-GI-NEXT:    .cfi_offset b9, -32612; CHECK-GI-NEXT:    .cfi_offset b10, -40613; CHECK-GI-NEXT:    .cfi_offset b11, -48614; CHECK-GI-NEXT:    .cfi_offset b12, -56615; CHECK-GI-NEXT:    .cfi_offset b13, -64616; CHECK-GI-NEXT:    .cfi_offset b14, -72617; CHECK-GI-NEXT:    .cfi_offset b15, -80618; CHECK-GI-NEXT:    mov v4.16b, v1.16b619; CHECK-GI-NEXT:    mov v1.16b, v2.16b620; CHECK-GI-NEXT:    mov s8, v0.s[1]621; CHECK-GI-NEXT:    mov s9, v0.s[2]622; CHECK-GI-NEXT:    mov s10, v0.s[3]623; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q0624; CHECK-GI-NEXT:    mov s12, v3.s[1]625; CHECK-GI-NEXT:    mov s11, v3.s[2]626; CHECK-GI-NEXT:    mov s2, v4.s[1]627; CHECK-GI-NEXT:    stp q3, q4, [sp] // 32-byte Folded Spill628; CHECK-GI-NEXT:    mov s5, v4.s[3]629; CHECK-GI-NEXT:    mov s14, v1.s[1]630; CHECK-GI-NEXT:    mov s15, v1.s[2]631; CHECK-GI-NEXT:    mov s13, v1.s[3]632; CHECK-GI-NEXT:    // kill: def $s1 killed $s1 killed $q1633; CHECK-GI-NEXT:    str s2, [sp, #48] // 4-byte Spill634; CHECK-GI-NEXT:    mov s2, v4.s[2]635; CHECK-GI-NEXT:    str s2, [sp, #112] // 4-byte Spill636; CHECK-GI-NEXT:    mov s2, v3.s[3]637; CHECK-GI-NEXT:    stp s2, s5, [sp, #200] // 8-byte Folded Spill638; CHECK-GI-NEXT:    bl powf639; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0640; CHECK-GI-NEXT:    str q0, [sp, #96] // 16-byte Spill641; CHECK-GI-NEXT:    fmov s1, s14642; CHECK-GI-NEXT:    fmov s0, s8643; CHECK-GI-NEXT:    bl powf644; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0645; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill646; CHECK-GI-NEXT:    fmov s1, s15647; CHECK-GI-NEXT:    fmov s0, s9648; CHECK-GI-NEXT:    bl powf649; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0650; CHECK-GI-NEXT:    str q0, [sp, #80] // 16-byte Spill651; CHECK-GI-NEXT:    fmov s1, s13652; CHECK-GI-NEXT:    fmov s0, s10653; CHECK-GI-NEXT:    bl powf654; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0655; CHECK-GI-NEXT:    str q0, [sp, #64] // 16-byte Spill656; CHECK-GI-NEXT:    ldp q1, q0, [sp] // 32-byte Folded Reload657; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 killed $q0658; CHECK-GI-NEXT:    // kill: def $s1 killed $s1 killed $q1659; CHECK-GI-NEXT:    bl powf660; CHECK-GI-NEXT:    fmov s1, s12661; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0662; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill663; CHECK-GI-NEXT:    ldr s0, [sp, #48] // 4-byte Reload664; CHECK-GI-NEXT:    bl powf665; CHECK-GI-NEXT:    fmov s1, s11666; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0667; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill668; CHECK-GI-NEXT:    ldr s0, [sp, #112] // 4-byte Reload669; CHECK-GI-NEXT:    bl powf670; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0671; CHECK-GI-NEXT:    str q0, [sp, #112] // 16-byte Spill672; CHECK-GI-NEXT:    ldp s1, s0, [sp, #200] // 8-byte Folded Reload673; CHECK-GI-NEXT:    bl powf674; CHECK-GI-NEXT:    ldp q3, q2, [sp, #16] // 32-byte Folded Reload675; CHECK-GI-NEXT:    // kill: def $s0 killed $s0 def $q0676; CHECK-GI-NEXT:    ldr q1, [sp, #96] // 16-byte Reload677; CHECK-GI-NEXT:    ldp d9, d8, [sp, #176] // 16-byte Folded Reload678; CHECK-GI-NEXT:    ldr x30, [sp, #192] // 8-byte Reload679; CHECK-GI-NEXT:    ldp d11, d10, [sp, #160] // 16-byte Folded Reload680; CHECK-GI-NEXT:    mov v1.s[1], v2.s[0]681; CHECK-GI-NEXT:    ldr q2, [sp, #48] // 16-byte Reload682; CHECK-GI-NEXT:    ldp d13, d12, [sp, #144] // 16-byte Folded Reload683; CHECK-GI-NEXT:    mov v3.s[1], v2.s[0]684; CHECK-GI-NEXT:    ldr q2, [sp, #80] // 16-byte Reload685; CHECK-GI-NEXT:    ldp d15, d14, [sp, #128] // 16-byte Folded Reload686; CHECK-GI-NEXT:    mov v1.s[2], v2.s[0]687; CHECK-GI-NEXT:    ldr q2, [sp, #112] // 16-byte Reload688; CHECK-GI-NEXT:    mov v3.s[2], v2.s[0]689; CHECK-GI-NEXT:    ldr q2, [sp, #64] // 16-byte Reload690; CHECK-GI-NEXT:    mov v1.s[3], v2.s[0]691; CHECK-GI-NEXT:    mov v3.s[3], v0.s[0]692; CHECK-GI-NEXT:    mov v2.16b, v1.16b693; CHECK-GI-NEXT:    mov v1.16b, v3.16b694; CHECK-GI-NEXT:    mov v0.16b, v2.16b695; CHECK-GI-NEXT:    add sp, sp, #208696; CHECK-GI-NEXT:    ret697entry:698  %c = call <8 x float> @llvm.pow.v8f32(<8 x float> %a, <8 x float> %b)699  ret <8 x float> %c700}701 702define <7 x half> @pow_v7f16(<7 x half> %a, <7 x half> %b) {703; CHECK-SD-LABEL: pow_v7f16:704; CHECK-SD:       // %bb.0: // %entry705; CHECK-SD-NEXT:    sub sp, sp, #64706; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill707; CHECK-SD-NEXT:    .cfi_def_cfa_offset 64708; CHECK-SD-NEXT:    .cfi_offset w30, -16709; CHECK-SD-NEXT:    mov h3, v0.h[1]710; CHECK-SD-NEXT:    mov h2, v1.h[1]711; CHECK-SD-NEXT:    stp q0, q1, [sp] // 32-byte Folded Spill712; CHECK-SD-NEXT:    fcvt s0, h3713; CHECK-SD-NEXT:    fcvt s1, h2714; CHECK-SD-NEXT:    bl powf715; CHECK-SD-NEXT:    fcvt h0, s0716; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill717; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload718; CHECK-SD-NEXT:    fcvt s0, h0719; CHECK-SD-NEXT:    fcvt s1, h1720; CHECK-SD-NEXT:    bl powf721; CHECK-SD-NEXT:    fcvt h0, s0722; CHECK-SD-NEXT:    ldp q1, q2, [sp, #16] // 32-byte Folded Reload723; CHECK-SD-NEXT:    mov h1, v1.h[2]724; CHECK-SD-NEXT:    mov v0.h[1], v2.h[0]725; CHECK-SD-NEXT:    fcvt s1, h1726; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill727; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload728; CHECK-SD-NEXT:    mov h0, v0.h[2]729; CHECK-SD-NEXT:    fcvt s0, h0730; CHECK-SD-NEXT:    bl powf731; CHECK-SD-NEXT:    fcvt h0, s0732; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload733; CHECK-SD-NEXT:    mov v1.h[2], v0.h[0]734; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill735; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload736; CHECK-SD-NEXT:    mov h0, v0.h[3]737; CHECK-SD-NEXT:    mov h1, v1.h[3]738; CHECK-SD-NEXT:    fcvt s0, h0739; CHECK-SD-NEXT:    fcvt s1, h1740; CHECK-SD-NEXT:    bl powf741; CHECK-SD-NEXT:    fcvt h0, s0742; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload743; CHECK-SD-NEXT:    mov v1.h[3], v0.h[0]744; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill745; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload746; CHECK-SD-NEXT:    mov h0, v0.h[4]747; CHECK-SD-NEXT:    mov h1, v1.h[4]748; CHECK-SD-NEXT:    fcvt s0, h0749; CHECK-SD-NEXT:    fcvt s1, h1750; CHECK-SD-NEXT:    bl powf751; CHECK-SD-NEXT:    fcvt h0, s0752; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload753; CHECK-SD-NEXT:    mov v1.h[4], v0.h[0]754; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill755; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload756; CHECK-SD-NEXT:    mov h0, v0.h[5]757; CHECK-SD-NEXT:    mov h1, v1.h[5]758; CHECK-SD-NEXT:    fcvt s0, h0759; CHECK-SD-NEXT:    fcvt s1, h1760; CHECK-SD-NEXT:    bl powf761; CHECK-SD-NEXT:    fcvt h0, s0762; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload763; CHECK-SD-NEXT:    mov v1.h[5], v0.h[0]764; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill765; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload766; CHECK-SD-NEXT:    mov h0, v0.h[6]767; CHECK-SD-NEXT:    mov h1, v1.h[6]768; CHECK-SD-NEXT:    fcvt s0, h0769; CHECK-SD-NEXT:    fcvt s1, h1770; CHECK-SD-NEXT:    bl powf771; CHECK-SD-NEXT:    fcvt h0, s0772; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload773; CHECK-SD-NEXT:    mov v1.h[6], v0.h[0]774; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill775; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload776; CHECK-SD-NEXT:    mov h0, v0.h[7]777; CHECK-SD-NEXT:    mov h1, v1.h[7]778; CHECK-SD-NEXT:    fcvt s0, h0779; CHECK-SD-NEXT:    fcvt s1, h1780; CHECK-SD-NEXT:    bl powf781; CHECK-SD-NEXT:    fcvt h1, s0782; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload783; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload784; CHECK-SD-NEXT:    mov v0.h[7], v1.h[0]785; CHECK-SD-NEXT:    add sp, sp, #64786; CHECK-SD-NEXT:    ret787;788; CHECK-GI-LABEL: pow_v7f16:789; CHECK-GI:       // %bb.0: // %entry790; CHECK-GI-NEXT:    sub sp, sp, #176791; CHECK-GI-NEXT:    stp d15, d14, [sp, #96] // 16-byte Folded Spill792; CHECK-GI-NEXT:    stp d13, d12, [sp, #112] // 16-byte Folded Spill793; CHECK-GI-NEXT:    stp d11, d10, [sp, #128] // 16-byte Folded Spill794; CHECK-GI-NEXT:    stp d9, d8, [sp, #144] // 16-byte Folded Spill795; CHECK-GI-NEXT:    str x30, [sp, #160] // 8-byte Spill796; CHECK-GI-NEXT:    .cfi_def_cfa_offset 176797; CHECK-GI-NEXT:    .cfi_offset w30, -16798; CHECK-GI-NEXT:    .cfi_offset b8, -24799; CHECK-GI-NEXT:    .cfi_offset b9, -32800; CHECK-GI-NEXT:    .cfi_offset b10, -40801; CHECK-GI-NEXT:    .cfi_offset b11, -48802; CHECK-GI-NEXT:    .cfi_offset b12, -56803; CHECK-GI-NEXT:    .cfi_offset b13, -64804; CHECK-GI-NEXT:    .cfi_offset b14, -72805; CHECK-GI-NEXT:    .cfi_offset b15, -80806; CHECK-GI-NEXT:    mov h2, v0.h[5]807; CHECK-GI-NEXT:    mov h9, v0.h[1]808; CHECK-GI-NEXT:    mov h10, v0.h[2]809; CHECK-GI-NEXT:    mov h11, v0.h[3]810; CHECK-GI-NEXT:    mov h12, v0.h[4]811; CHECK-GI-NEXT:    mov h14, v1.h[1]812; CHECK-GI-NEXT:    mov h15, v1.h[2]813; CHECK-GI-NEXT:    mov h8, v1.h[3]814; CHECK-GI-NEXT:    mov h13, v1.h[4]815; CHECK-GI-NEXT:    str h2, [sp, #48] // 2-byte Spill816; CHECK-GI-NEXT:    mov h2, v0.h[6]817; CHECK-GI-NEXT:    fcvt s0, h0818; CHECK-GI-NEXT:    str h2, [sp, #80] // 2-byte Spill819; CHECK-GI-NEXT:    mov h2, v1.h[5]820; CHECK-GI-NEXT:    str h2, [sp, #172] // 2-byte Spill821; CHECK-GI-NEXT:    mov h2, v1.h[6]822; CHECK-GI-NEXT:    fcvt s1, h1823; CHECK-GI-NEXT:    str h2, [sp, #174] // 2-byte Spill824; CHECK-GI-NEXT:    bl powf825; CHECK-GI-NEXT:    fcvt s2, h9826; CHECK-GI-NEXT:    fcvt h0, s0827; CHECK-GI-NEXT:    fcvt s1, h14828; CHECK-GI-NEXT:    str q0, [sp, #64] // 16-byte Spill829; CHECK-GI-NEXT:    fmov s0, s2830; CHECK-GI-NEXT:    bl powf831; CHECK-GI-NEXT:    fcvt s2, h10832; CHECK-GI-NEXT:    fcvt h0, s0833; CHECK-GI-NEXT:    fcvt s1, h15834; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill835; CHECK-GI-NEXT:    fmov s0, s2836; CHECK-GI-NEXT:    bl powf837; CHECK-GI-NEXT:    fcvt s2, h11838; CHECK-GI-NEXT:    fcvt h0, s0839; CHECK-GI-NEXT:    fcvt s1, h8840; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill841; CHECK-GI-NEXT:    fmov s0, s2842; CHECK-GI-NEXT:    bl powf843; CHECK-GI-NEXT:    fcvt s2, h12844; CHECK-GI-NEXT:    fcvt h0, s0845; CHECK-GI-NEXT:    fcvt s1, h13846; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill847; CHECK-GI-NEXT:    fmov s0, s2848; CHECK-GI-NEXT:    bl powf849; CHECK-GI-NEXT:    ldr h1, [sp, #48] // 2-byte Reload850; CHECK-GI-NEXT:    fcvt h0, s0851; CHECK-GI-NEXT:    fcvt s2, h1852; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill853; CHECK-GI-NEXT:    ldr h0, [sp, #172] // 2-byte Reload854; CHECK-GI-NEXT:    fcvt s1, h0855; CHECK-GI-NEXT:    fmov s0, s2856; CHECK-GI-NEXT:    bl powf857; CHECK-GI-NEXT:    ldr h1, [sp, #80] // 2-byte Reload858; CHECK-GI-NEXT:    fcvt h0, s0859; CHECK-GI-NEXT:    fcvt s2, h1860; CHECK-GI-NEXT:    str q0, [sp, #80] // 16-byte Spill861; CHECK-GI-NEXT:    ldr h0, [sp, #174] // 2-byte Reload862; CHECK-GI-NEXT:    fcvt s1, h0863; CHECK-GI-NEXT:    fmov s0, s2864; CHECK-GI-NEXT:    bl powf865; CHECK-GI-NEXT:    ldp q2, q3, [sp, #16] // 32-byte Folded Reload866; CHECK-GI-NEXT:    fcvt h0, s0867; CHECK-GI-NEXT:    ldr q1, [sp, #64] // 16-byte Reload868; CHECK-GI-NEXT:    ldp d9, d8, [sp, #144] // 16-byte Folded Reload869; CHECK-GI-NEXT:    ldp d11, d10, [sp, #128] // 16-byte Folded Reload870; CHECK-GI-NEXT:    ldr x30, [sp, #160] // 8-byte Reload871; CHECK-GI-NEXT:    mov v1.h[1], v3.h[0]872; CHECK-GI-NEXT:    ldp d13, d12, [sp, #112] // 16-byte Folded Reload873; CHECK-GI-NEXT:    ldp d15, d14, [sp, #96] // 16-byte Folded Reload874; CHECK-GI-NEXT:    mov v1.h[2], v2.h[0]875; CHECK-GI-NEXT:    ldr q2, [sp] // 16-byte Reload876; CHECK-GI-NEXT:    mov v1.h[3], v2.h[0]877; CHECK-GI-NEXT:    ldr q2, [sp, #48] // 16-byte Reload878; CHECK-GI-NEXT:    mov v1.h[4], v2.h[0]879; CHECK-GI-NEXT:    ldr q2, [sp, #80] // 16-byte Reload880; CHECK-GI-NEXT:    mov v1.h[5], v2.h[0]881; CHECK-GI-NEXT:    mov v1.h[6], v0.h[0]882; CHECK-GI-NEXT:    mov v0.16b, v1.16b883; CHECK-GI-NEXT:    add sp, sp, #176884; CHECK-GI-NEXT:    ret885entry:886  %c = call <7 x half> @llvm.pow.v7f16(<7 x half> %a, <7 x half> %b)887  ret <7 x half> %c888}889 890define <4 x half> @pow_v4f16(<4 x half> %a, <4 x half> %b) {891; CHECK-SD-LABEL: pow_v4f16:892; CHECK-SD:       // %bb.0: // %entry893; CHECK-SD-NEXT:    sub sp, sp, #64894; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill895; CHECK-SD-NEXT:    .cfi_def_cfa_offset 64896; CHECK-SD-NEXT:    .cfi_offset w30, -16897; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 def $q1898; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0899; CHECK-SD-NEXT:    mov h3, v0.h[1]900; CHECK-SD-NEXT:    mov h2, v1.h[1]901; CHECK-SD-NEXT:    stp q0, q1, [sp, #16] // 32-byte Folded Spill902; CHECK-SD-NEXT:    fcvt s0, h3903; CHECK-SD-NEXT:    fcvt s1, h2904; CHECK-SD-NEXT:    bl powf905; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload906; CHECK-SD-NEXT:    fcvt h0, s0907; CHECK-SD-NEXT:    fcvt s2, h1908; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill909; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload910; CHECK-SD-NEXT:    fcvt s1, h0911; CHECK-SD-NEXT:    fmov s0, s2912; CHECK-SD-NEXT:    bl powf913; CHECK-SD-NEXT:    ldr q1, [sp, #16] // 16-byte Reload914; CHECK-SD-NEXT:    fcvt h3, s0915; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload916; CHECK-SD-NEXT:    mov h1, v1.h[2]917; CHECK-SD-NEXT:    mov h2, v0.h[2]918; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload919; CHECK-SD-NEXT:    mov v3.h[1], v0.h[0]920; CHECK-SD-NEXT:    fcvt s0, h1921; CHECK-SD-NEXT:    fcvt s1, h2922; CHECK-SD-NEXT:    str q3, [sp] // 16-byte Spill923; CHECK-SD-NEXT:    bl powf924; CHECK-SD-NEXT:    ldp q1, q2, [sp, #16] // 32-byte Folded Reload925; CHECK-SD-NEXT:    fcvt h0, s0926; CHECK-SD-NEXT:    ldr q3, [sp] // 16-byte Reload927; CHECK-SD-NEXT:    mov h1, v1.h[3]928; CHECK-SD-NEXT:    mov h2, v2.h[3]929; CHECK-SD-NEXT:    mov v3.h[2], v0.h[0]930; CHECK-SD-NEXT:    fcvt s0, h1931; CHECK-SD-NEXT:    fcvt s1, h2932; CHECK-SD-NEXT:    str q3, [sp] // 16-byte Spill933; CHECK-SD-NEXT:    bl powf934; CHECK-SD-NEXT:    fcvt h1, s0935; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload936; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload937; CHECK-SD-NEXT:    mov v0.h[3], v1.h[0]938; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0939; CHECK-SD-NEXT:    add sp, sp, #64940; CHECK-SD-NEXT:    ret941;942; CHECK-GI-LABEL: pow_v4f16:943; CHECK-GI:       // %bb.0: // %entry944; CHECK-GI-NEXT:    sub sp, sp, #112945; CHECK-GI-NEXT:    stp d13, d12, [sp, #48] // 16-byte Folded Spill946; CHECK-GI-NEXT:    stp d11, d10, [sp, #64] // 16-byte Folded Spill947; CHECK-GI-NEXT:    stp d9, d8, [sp, #80] // 16-byte Folded Spill948; CHECK-GI-NEXT:    str x30, [sp, #96] // 8-byte Spill949; CHECK-GI-NEXT:    .cfi_def_cfa_offset 112950; CHECK-GI-NEXT:    .cfi_offset w30, -16951; CHECK-GI-NEXT:    .cfi_offset b8, -24952; CHECK-GI-NEXT:    .cfi_offset b9, -32953; CHECK-GI-NEXT:    .cfi_offset b10, -40954; CHECK-GI-NEXT:    .cfi_offset b11, -48955; CHECK-GI-NEXT:    .cfi_offset b12, -56956; CHECK-GI-NEXT:    .cfi_offset b13, -64957; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0958; CHECK-GI-NEXT:    // kill: def $d1 killed $d1 def $q1959; CHECK-GI-NEXT:    mov h8, v0.h[1]960; CHECK-GI-NEXT:    mov h9, v0.h[2]961; CHECK-GI-NEXT:    mov h10, v0.h[3]962; CHECK-GI-NEXT:    mov h11, v1.h[1]963; CHECK-GI-NEXT:    mov h12, v1.h[2]964; CHECK-GI-NEXT:    mov h13, v1.h[3]965; CHECK-GI-NEXT:    fcvt s0, h0966; CHECK-GI-NEXT:    fcvt s1, h1967; CHECK-GI-NEXT:    bl powf968; CHECK-GI-NEXT:    fcvt s2, h8969; CHECK-GI-NEXT:    fcvt h0, s0970; CHECK-GI-NEXT:    fcvt s1, h11971; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill972; CHECK-GI-NEXT:    fmov s0, s2973; CHECK-GI-NEXT:    bl powf974; CHECK-GI-NEXT:    fcvt s2, h9975; CHECK-GI-NEXT:    fcvt h0, s0976; CHECK-GI-NEXT:    fcvt s1, h12977; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill978; CHECK-GI-NEXT:    fmov s0, s2979; CHECK-GI-NEXT:    bl powf980; CHECK-GI-NEXT:    fcvt s2, h10981; CHECK-GI-NEXT:    fcvt h0, s0982; CHECK-GI-NEXT:    fcvt s1, h13983; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill984; CHECK-GI-NEXT:    fmov s0, s2985; CHECK-GI-NEXT:    bl powf986; CHECK-GI-NEXT:    ldp q3, q2, [sp] // 32-byte Folded Reload987; CHECK-GI-NEXT:    fcvt h0, s0988; CHECK-GI-NEXT:    ldr q1, [sp, #32] // 16-byte Reload989; CHECK-GI-NEXT:    ldp d9, d8, [sp, #80] // 16-byte Folded Reload990; CHECK-GI-NEXT:    ldp d11, d10, [sp, #64] // 16-byte Folded Reload991; CHECK-GI-NEXT:    ldr x30, [sp, #96] // 8-byte Reload992; CHECK-GI-NEXT:    mov v1.h[1], v3.h[0]993; CHECK-GI-NEXT:    ldp d13, d12, [sp, #48] // 16-byte Folded Reload994; CHECK-GI-NEXT:    mov v1.h[2], v2.h[0]995; CHECK-GI-NEXT:    mov v1.h[3], v0.h[0]996; CHECK-GI-NEXT:    mov v0.16b, v1.16b997; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0998; CHECK-GI-NEXT:    add sp, sp, #112999; CHECK-GI-NEXT:    ret1000entry:1001  %c = call <4 x half> @llvm.pow.v4f16(<4 x half> %a, <4 x half> %b)1002  ret <4 x half> %c1003}1004 1005define <8 x half> @pow_v8f16(<8 x half> %a, <8 x half> %b) {1006; CHECK-SD-LABEL: pow_v8f16:1007; CHECK-SD:       // %bb.0: // %entry1008; CHECK-SD-NEXT:    sub sp, sp, #641009; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill1010; CHECK-SD-NEXT:    .cfi_def_cfa_offset 641011; CHECK-SD-NEXT:    .cfi_offset w30, -161012; CHECK-SD-NEXT:    mov h3, v0.h[1]1013; CHECK-SD-NEXT:    mov h2, v1.h[1]1014; CHECK-SD-NEXT:    stp q0, q1, [sp] // 32-byte Folded Spill1015; CHECK-SD-NEXT:    fcvt s0, h31016; CHECK-SD-NEXT:    fcvt s1, h21017; CHECK-SD-NEXT:    bl powf1018; CHECK-SD-NEXT:    fcvt h0, s01019; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill1020; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload1021; CHECK-SD-NEXT:    fcvt s0, h01022; CHECK-SD-NEXT:    fcvt s1, h11023; CHECK-SD-NEXT:    bl powf1024; CHECK-SD-NEXT:    fcvt h0, s01025; CHECK-SD-NEXT:    ldp q1, q2, [sp, #16] // 32-byte Folded Reload1026; CHECK-SD-NEXT:    mov h1, v1.h[2]1027; CHECK-SD-NEXT:    mov v0.h[1], v2.h[0]1028; CHECK-SD-NEXT:    fcvt s1, h11029; CHECK-SD-NEXT:    str q0, [sp, #32] // 16-byte Spill1030; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1031; CHECK-SD-NEXT:    mov h0, v0.h[2]1032; CHECK-SD-NEXT:    fcvt s0, h01033; CHECK-SD-NEXT:    bl powf1034; CHECK-SD-NEXT:    fcvt h0, s01035; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload1036; CHECK-SD-NEXT:    mov v1.h[2], v0.h[0]1037; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill1038; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload1039; CHECK-SD-NEXT:    mov h0, v0.h[3]1040; CHECK-SD-NEXT:    mov h1, v1.h[3]1041; CHECK-SD-NEXT:    fcvt s0, h01042; CHECK-SD-NEXT:    fcvt s1, h11043; CHECK-SD-NEXT:    bl powf1044; CHECK-SD-NEXT:    fcvt h0, s01045; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload1046; CHECK-SD-NEXT:    mov v1.h[3], v0.h[0]1047; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill1048; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload1049; CHECK-SD-NEXT:    mov h0, v0.h[4]1050; CHECK-SD-NEXT:    mov h1, v1.h[4]1051; CHECK-SD-NEXT:    fcvt s0, h01052; CHECK-SD-NEXT:    fcvt s1, h11053; CHECK-SD-NEXT:    bl powf1054; CHECK-SD-NEXT:    fcvt h0, s01055; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload1056; CHECK-SD-NEXT:    mov v1.h[4], v0.h[0]1057; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill1058; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload1059; CHECK-SD-NEXT:    mov h0, v0.h[5]1060; CHECK-SD-NEXT:    mov h1, v1.h[5]1061; CHECK-SD-NEXT:    fcvt s0, h01062; CHECK-SD-NEXT:    fcvt s1, h11063; CHECK-SD-NEXT:    bl powf1064; CHECK-SD-NEXT:    fcvt h0, s01065; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload1066; CHECK-SD-NEXT:    mov v1.h[5], v0.h[0]1067; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill1068; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload1069; CHECK-SD-NEXT:    mov h0, v0.h[6]1070; CHECK-SD-NEXT:    mov h1, v1.h[6]1071; CHECK-SD-NEXT:    fcvt s0, h01072; CHECK-SD-NEXT:    fcvt s1, h11073; CHECK-SD-NEXT:    bl powf1074; CHECK-SD-NEXT:    fcvt h0, s01075; CHECK-SD-NEXT:    ldr q1, [sp, #32] // 16-byte Reload1076; CHECK-SD-NEXT:    mov v1.h[6], v0.h[0]1077; CHECK-SD-NEXT:    str q1, [sp, #32] // 16-byte Spill1078; CHECK-SD-NEXT:    ldp q0, q1, [sp] // 32-byte Folded Reload1079; CHECK-SD-NEXT:    mov h0, v0.h[7]1080; CHECK-SD-NEXT:    mov h1, v1.h[7]1081; CHECK-SD-NEXT:    fcvt s0, h01082; CHECK-SD-NEXT:    fcvt s1, h11083; CHECK-SD-NEXT:    bl powf1084; CHECK-SD-NEXT:    fcvt h1, s01085; CHECK-SD-NEXT:    ldr q0, [sp, #32] // 16-byte Reload1086; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload1087; CHECK-SD-NEXT:    mov v0.h[7], v1.h[0]1088; CHECK-SD-NEXT:    add sp, sp, #641089; CHECK-SD-NEXT:    ret1090;1091; CHECK-GI-LABEL: pow_v8f16:1092; CHECK-GI:       // %bb.0: // %entry1093; CHECK-GI-NEXT:    sub sp, sp, #1921094; CHECK-GI-NEXT:    stp d15, d14, [sp, #112] // 16-byte Folded Spill1095; CHECK-GI-NEXT:    stp d13, d12, [sp, #128] // 16-byte Folded Spill1096; CHECK-GI-NEXT:    stp d11, d10, [sp, #144] // 16-byte Folded Spill1097; CHECK-GI-NEXT:    stp d9, d8, [sp, #160] // 16-byte Folded Spill1098; CHECK-GI-NEXT:    str x30, [sp, #176] // 8-byte Spill1099; CHECK-GI-NEXT:    .cfi_def_cfa_offset 1921100; CHECK-GI-NEXT:    .cfi_offset w30, -161101; CHECK-GI-NEXT:    .cfi_offset b8, -241102; CHECK-GI-NEXT:    .cfi_offset b9, -321103; CHECK-GI-NEXT:    .cfi_offset b10, -401104; CHECK-GI-NEXT:    .cfi_offset b11, -481105; CHECK-GI-NEXT:    .cfi_offset b12, -561106; CHECK-GI-NEXT:    .cfi_offset b13, -641107; CHECK-GI-NEXT:    .cfi_offset b14, -721108; CHECK-GI-NEXT:    .cfi_offset b15, -801109; CHECK-GI-NEXT:    mov h2, v0.h[5]1110; CHECK-GI-NEXT:    mov h11, v0.h[1]1111; CHECK-GI-NEXT:    mov h12, v0.h[2]1112; CHECK-GI-NEXT:    mov h13, v0.h[3]1113; CHECK-GI-NEXT:    mov h14, v0.h[4]1114; CHECK-GI-NEXT:    mov h8, v1.h[1]1115; CHECK-GI-NEXT:    mov h9, v1.h[2]1116; CHECK-GI-NEXT:    mov h10, v1.h[3]1117; CHECK-GI-NEXT:    mov h15, v1.h[4]1118; CHECK-GI-NEXT:    str h2, [sp, #48] // 2-byte Spill1119; CHECK-GI-NEXT:    mov h2, v0.h[6]1120; CHECK-GI-NEXT:    str h2, [sp, #64] // 2-byte Spill1121; CHECK-GI-NEXT:    mov h2, v0.h[7]1122; CHECK-GI-NEXT:    fcvt s0, h01123; CHECK-GI-NEXT:    str h2, [sp, #96] // 2-byte Spill1124; CHECK-GI-NEXT:    mov h2, v1.h[5]1125; CHECK-GI-NEXT:    str h2, [sp, #186] // 2-byte Spill1126; CHECK-GI-NEXT:    mov h2, v1.h[6]1127; CHECK-GI-NEXT:    str h2, [sp, #188] // 2-byte Spill1128; CHECK-GI-NEXT:    mov h2, v1.h[7]1129; CHECK-GI-NEXT:    fcvt s1, h11130; CHECK-GI-NEXT:    str h2, [sp, #190] // 2-byte Spill1131; CHECK-GI-NEXT:    bl powf1132; CHECK-GI-NEXT:    fcvt s2, h111133; CHECK-GI-NEXT:    fcvt h0, s01134; CHECK-GI-NEXT:    fcvt s1, h81135; CHECK-GI-NEXT:    str q0, [sp, #80] // 16-byte Spill1136; CHECK-GI-NEXT:    fmov s0, s21137; CHECK-GI-NEXT:    bl powf1138; CHECK-GI-NEXT:    fcvt s2, h121139; CHECK-GI-NEXT:    fcvt h0, s01140; CHECK-GI-NEXT:    fcvt s1, h91141; CHECK-GI-NEXT:    str q0, [sp, #32] // 16-byte Spill1142; CHECK-GI-NEXT:    fmov s0, s21143; CHECK-GI-NEXT:    bl powf1144; CHECK-GI-NEXT:    fcvt s2, h131145; CHECK-GI-NEXT:    fcvt h0, s01146; CHECK-GI-NEXT:    fcvt s1, h101147; CHECK-GI-NEXT:    str q0, [sp, #16] // 16-byte Spill1148; CHECK-GI-NEXT:    fmov s0, s21149; CHECK-GI-NEXT:    bl powf1150; CHECK-GI-NEXT:    fcvt s2, h141151; CHECK-GI-NEXT:    fcvt h0, s01152; CHECK-GI-NEXT:    fcvt s1, h151153; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill1154; CHECK-GI-NEXT:    fmov s0, s21155; CHECK-GI-NEXT:    bl powf1156; CHECK-GI-NEXT:    ldr h1, [sp, #48] // 2-byte Reload1157; CHECK-GI-NEXT:    fcvt h0, s01158; CHECK-GI-NEXT:    fcvt s2, h11159; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill1160; CHECK-GI-NEXT:    ldr h0, [sp, #186] // 2-byte Reload1161; CHECK-GI-NEXT:    fcvt s1, h01162; CHECK-GI-NEXT:    fmov s0, s21163; CHECK-GI-NEXT:    bl powf1164; CHECK-GI-NEXT:    ldr h1, [sp, #64] // 2-byte Reload1165; CHECK-GI-NEXT:    fcvt h0, s01166; CHECK-GI-NEXT:    fcvt s2, h11167; CHECK-GI-NEXT:    str q0, [sp, #64] // 16-byte Spill1168; CHECK-GI-NEXT:    ldr h0, [sp, #188] // 2-byte Reload1169; CHECK-GI-NEXT:    fcvt s1, h01170; CHECK-GI-NEXT:    fmov s0, s21171; CHECK-GI-NEXT:    bl powf1172; CHECK-GI-NEXT:    ldr h1, [sp, #96] // 2-byte Reload1173; CHECK-GI-NEXT:    fcvt h0, s01174; CHECK-GI-NEXT:    fcvt s2, h11175; CHECK-GI-NEXT:    str q0, [sp, #96] // 16-byte Spill1176; CHECK-GI-NEXT:    ldr h0, [sp, #190] // 2-byte Reload1177; CHECK-GI-NEXT:    fcvt s1, h01178; CHECK-GI-NEXT:    fmov s0, s21179; CHECK-GI-NEXT:    bl powf1180; CHECK-GI-NEXT:    ldp q2, q3, [sp, #16] // 32-byte Folded Reload1181; CHECK-GI-NEXT:    fcvt h0, s01182; CHECK-GI-NEXT:    ldr q1, [sp, #80] // 16-byte Reload1183; CHECK-GI-NEXT:    ldp d9, d8, [sp, #160] // 16-byte Folded Reload1184; CHECK-GI-NEXT:    ldp d11, d10, [sp, #144] // 16-byte Folded Reload1185; CHECK-GI-NEXT:    ldr x30, [sp, #176] // 8-byte Reload1186; CHECK-GI-NEXT:    mov v1.h[1], v3.h[0]1187; CHECK-GI-NEXT:    ldp d13, d12, [sp, #128] // 16-byte Folded Reload1188; CHECK-GI-NEXT:    ldp d15, d14, [sp, #112] // 16-byte Folded Reload1189; CHECK-GI-NEXT:    mov v1.h[2], v2.h[0]1190; CHECK-GI-NEXT:    ldr q2, [sp] // 16-byte Reload1191; CHECK-GI-NEXT:    mov v1.h[3], v2.h[0]1192; CHECK-GI-NEXT:    ldp q3, q2, [sp, #48] // 32-byte Folded Reload1193; CHECK-GI-NEXT:    mov v1.h[4], v3.h[0]1194; CHECK-GI-NEXT:    mov v1.h[5], v2.h[0]1195; CHECK-GI-NEXT:    ldr q2, [sp, #96] // 16-byte Reload1196; CHECK-GI-NEXT:    mov v1.h[6], v2.h[0]1197; CHECK-GI-NEXT:    mov v1.h[7], v0.h[0]1198; CHECK-GI-NEXT:    mov v0.16b, v1.16b1199; CHECK-GI-NEXT:    add sp, sp, #1921200; CHECK-GI-NEXT:    ret1201entry:1202  %c = call <8 x half> @llvm.pow.v8f16(<8 x half> %a, <8 x half> %b)1203  ret <8 x half> %c1204}1205 1206define <16 x half> @pow_v16f16(<16 x half> %a, <16 x half> %b) {1207; CHECK-SD-LABEL: pow_v16f16:1208; CHECK-SD:       // %bb.0: // %entry1209; CHECK-SD-NEXT:    sub sp, sp, #961210; CHECK-SD-NEXT:    str x30, [sp, #80] // 8-byte Spill1211; CHECK-SD-NEXT:    .cfi_def_cfa_offset 961212; CHECK-SD-NEXT:    .cfi_offset w30, -161213; CHECK-SD-NEXT:    stp q0, q1, [sp] // 32-byte Folded Spill1214; CHECK-SD-NEXT:    mov h1, v2.h[1]1215; CHECK-SD-NEXT:    stp q3, q2, [sp, #32] // 32-byte Folded Spill1216; CHECK-SD-NEXT:    mov h3, v0.h[1]1217; CHECK-SD-NEXT:    fcvt s1, h11218; CHECK-SD-NEXT:    fcvt s0, h31219; CHECK-SD-NEXT:    bl powf1220; CHECK-SD-NEXT:    fcvt h0, s01221; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1222; CHECK-SD-NEXT:    fcvt s1, h11223; CHECK-SD-NEXT:    str q0, [sp, #64] // 16-byte Spill1224; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1225; CHECK-SD-NEXT:    fcvt s0, h01226; CHECK-SD-NEXT:    bl powf1227; CHECK-SD-NEXT:    fcvt h0, s01228; CHECK-SD-NEXT:    ldp q1, q2, [sp, #48] // 32-byte Folded Reload1229; CHECK-SD-NEXT:    mov h1, v1.h[2]1230; CHECK-SD-NEXT:    mov v0.h[1], v2.h[0]1231; CHECK-SD-NEXT:    fcvt s1, h11232; CHECK-SD-NEXT:    str q0, [sp, #64] // 16-byte Spill1233; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1234; CHECK-SD-NEXT:    mov h0, v0.h[2]1235; CHECK-SD-NEXT:    fcvt s0, h01236; CHECK-SD-NEXT:    bl powf1237; CHECK-SD-NEXT:    fcvt h0, s01238; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload1239; CHECK-SD-NEXT:    mov v1.h[2], v0.h[0]1240; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1241; CHECK-SD-NEXT:    mov h0, v0.h[3]1242; CHECK-SD-NEXT:    str q1, [sp, #64] // 16-byte Spill1243; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1244; CHECK-SD-NEXT:    mov h1, v1.h[3]1245; CHECK-SD-NEXT:    fcvt s0, h01246; CHECK-SD-NEXT:    fcvt s1, h11247; CHECK-SD-NEXT:    bl powf1248; CHECK-SD-NEXT:    fcvt h0, s01249; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload1250; CHECK-SD-NEXT:    mov v1.h[3], v0.h[0]1251; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1252; CHECK-SD-NEXT:    mov h0, v0.h[4]1253; CHECK-SD-NEXT:    str q1, [sp, #64] // 16-byte Spill1254; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1255; CHECK-SD-NEXT:    mov h1, v1.h[4]1256; CHECK-SD-NEXT:    fcvt s0, h01257; CHECK-SD-NEXT:    fcvt s1, h11258; CHECK-SD-NEXT:    bl powf1259; CHECK-SD-NEXT:    fcvt h0, s01260; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload1261; CHECK-SD-NEXT:    mov v1.h[4], v0.h[0]1262; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1263; CHECK-SD-NEXT:    mov h0, v0.h[5]1264; CHECK-SD-NEXT:    str q1, [sp, #64] // 16-byte Spill1265; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1266; CHECK-SD-NEXT:    mov h1, v1.h[5]1267; CHECK-SD-NEXT:    fcvt s0, h01268; CHECK-SD-NEXT:    fcvt s1, h11269; CHECK-SD-NEXT:    bl powf1270; CHECK-SD-NEXT:    fcvt h0, s01271; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload1272; CHECK-SD-NEXT:    mov v1.h[5], v0.h[0]1273; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1274; CHECK-SD-NEXT:    mov h0, v0.h[6]1275; CHECK-SD-NEXT:    str q1, [sp, #64] // 16-byte Spill1276; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1277; CHECK-SD-NEXT:    mov h1, v1.h[6]1278; CHECK-SD-NEXT:    fcvt s0, h01279; CHECK-SD-NEXT:    fcvt s1, h11280; CHECK-SD-NEXT:    bl powf1281; CHECK-SD-NEXT:    fcvt h0, s01282; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload1283; CHECK-SD-NEXT:    mov v1.h[6], v0.h[0]1284; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1285; CHECK-SD-NEXT:    mov h0, v0.h[7]1286; CHECK-SD-NEXT:    str q1, [sp, #64] // 16-byte Spill1287; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1288; CHECK-SD-NEXT:    mov h1, v1.h[7]1289; CHECK-SD-NEXT:    fcvt s0, h01290; CHECK-SD-NEXT:    fcvt s1, h11291; CHECK-SD-NEXT:    bl powf1292; CHECK-SD-NEXT:    fcvt h0, s01293; CHECK-SD-NEXT:    ldr q1, [sp, #64] // 16-byte Reload1294; CHECK-SD-NEXT:    mov v1.h[7], v0.h[0]1295; CHECK-SD-NEXT:    str q1, [sp, #64] // 16-byte Spill1296; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload1297; CHECK-SD-NEXT:    mov h0, v0.h[1]1298; CHECK-SD-NEXT:    mov h1, v1.h[1]1299; CHECK-SD-NEXT:    fcvt s0, h01300; CHECK-SD-NEXT:    fcvt s1, h11301; CHECK-SD-NEXT:    bl powf1302; CHECK-SD-NEXT:    fcvt h0, s01303; CHECK-SD-NEXT:    str q0, [sp, #48] // 16-byte Spill1304; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload1305; CHECK-SD-NEXT:    fcvt s0, h01306; CHECK-SD-NEXT:    fcvt s1, h11307; CHECK-SD-NEXT:    bl powf1308; CHECK-SD-NEXT:    fcvt h0, s01309; CHECK-SD-NEXT:    ldp q1, q2, [sp, #32] // 32-byte Folded Reload1310; CHECK-SD-NEXT:    mov h1, v1.h[2]1311; CHECK-SD-NEXT:    mov v0.h[1], v2.h[0]1312; CHECK-SD-NEXT:    fcvt s1, h11313; CHECK-SD-NEXT:    str q0, [sp, #48] // 16-byte Spill1314; CHECK-SD-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1315; CHECK-SD-NEXT:    mov h0, v0.h[2]1316; CHECK-SD-NEXT:    fcvt s0, h01317; CHECK-SD-NEXT:    bl powf1318; CHECK-SD-NEXT:    fcvt h0, s01319; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1320; CHECK-SD-NEXT:    mov v1.h[2], v0.h[0]1321; CHECK-SD-NEXT:    str q1, [sp, #48] // 16-byte Spill1322; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload1323; CHECK-SD-NEXT:    mov h0, v0.h[3]1324; CHECK-SD-NEXT:    mov h1, v1.h[3]1325; CHECK-SD-NEXT:    fcvt s0, h01326; CHECK-SD-NEXT:    fcvt s1, h11327; CHECK-SD-NEXT:    bl powf1328; CHECK-SD-NEXT:    fcvt h0, s01329; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1330; CHECK-SD-NEXT:    mov v1.h[3], v0.h[0]1331; CHECK-SD-NEXT:    str q1, [sp, #48] // 16-byte Spill1332; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload1333; CHECK-SD-NEXT:    mov h0, v0.h[4]1334; CHECK-SD-NEXT:    mov h1, v1.h[4]1335; CHECK-SD-NEXT:    fcvt s0, h01336; CHECK-SD-NEXT:    fcvt s1, h11337; CHECK-SD-NEXT:    bl powf1338; CHECK-SD-NEXT:    fcvt h0, s01339; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1340; CHECK-SD-NEXT:    mov v1.h[4], v0.h[0]1341; CHECK-SD-NEXT:    str q1, [sp, #48] // 16-byte Spill1342; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload1343; CHECK-SD-NEXT:    mov h0, v0.h[5]1344; CHECK-SD-NEXT:    mov h1, v1.h[5]1345; CHECK-SD-NEXT:    fcvt s0, h01346; CHECK-SD-NEXT:    fcvt s1, h11347; CHECK-SD-NEXT:    bl powf1348; CHECK-SD-NEXT:    fcvt h0, s01349; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1350; CHECK-SD-NEXT:    mov v1.h[5], v0.h[0]1351; CHECK-SD-NEXT:    str q1, [sp, #48] // 16-byte Spill1352; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload1353; CHECK-SD-NEXT:    mov h0, v0.h[6]1354; CHECK-SD-NEXT:    mov h1, v1.h[6]1355; CHECK-SD-NEXT:    fcvt s0, h01356; CHECK-SD-NEXT:    fcvt s1, h11357; CHECK-SD-NEXT:    bl powf1358; CHECK-SD-NEXT:    fcvt h0, s01359; CHECK-SD-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1360; CHECK-SD-NEXT:    mov v1.h[6], v0.h[0]1361; CHECK-SD-NEXT:    str q1, [sp, #48] // 16-byte Spill1362; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload1363; CHECK-SD-NEXT:    mov h0, v0.h[7]1364; CHECK-SD-NEXT:    mov h1, v1.h[7]1365; CHECK-SD-NEXT:    fcvt s0, h01366; CHECK-SD-NEXT:    fcvt s1, h11367; CHECK-SD-NEXT:    bl powf1368; CHECK-SD-NEXT:    fmov s1, s01369; CHECK-SD-NEXT:    ldr x30, [sp, #80] // 8-byte Reload1370; CHECK-SD-NEXT:    fcvt h2, s11371; CHECK-SD-NEXT:    ldp q1, q0, [sp, #48] // 32-byte Folded Reload1372; CHECK-SD-NEXT:    mov v1.h[7], v2.h[0]1373; CHECK-SD-NEXT:    add sp, sp, #961374; CHECK-SD-NEXT:    ret1375;1376; CHECK-GI-LABEL: pow_v16f16:1377; CHECK-GI:       // %bb.0: // %entry1378; CHECK-GI-NEXT:    sub sp, sp, #4481379; CHECK-GI-NEXT:    stp d15, d14, [sp, #368] // 16-byte Folded Spill1380; CHECK-GI-NEXT:    stp d13, d12, [sp, #384] // 16-byte Folded Spill1381; CHECK-GI-NEXT:    stp d11, d10, [sp, #400] // 16-byte Folded Spill1382; CHECK-GI-NEXT:    stp d9, d8, [sp, #416] // 16-byte Folded Spill1383; CHECK-GI-NEXT:    stp x29, x30, [sp, #432] // 16-byte Folded Spill1384; CHECK-GI-NEXT:    .cfi_def_cfa_offset 4481385; CHECK-GI-NEXT:    .cfi_offset w30, -81386; CHECK-GI-NEXT:    .cfi_offset w29, -161387; CHECK-GI-NEXT:    .cfi_offset b8, -241388; CHECK-GI-NEXT:    .cfi_offset b9, -321389; CHECK-GI-NEXT:    .cfi_offset b10, -401390; CHECK-GI-NEXT:    .cfi_offset b11, -481391; CHECK-GI-NEXT:    .cfi_offset b12, -561392; CHECK-GI-NEXT:    .cfi_offset b13, -641393; CHECK-GI-NEXT:    .cfi_offset b14, -721394; CHECK-GI-NEXT:    .cfi_offset b15, -801395; CHECK-GI-NEXT:    mov v4.16b, v1.16b1396; CHECK-GI-NEXT:    str q1, [sp, #112] // 16-byte Spill1397; CHECK-GI-NEXT:    mov h1, v0.h[4]1398; CHECK-GI-NEXT:    mov h12, v0.h[1]1399; CHECK-GI-NEXT:    mov h13, v0.h[2]1400; CHECK-GI-NEXT:    str q3, [sp, #16] // 16-byte Spill1401; CHECK-GI-NEXT:    mov h14, v0.h[3]1402; CHECK-GI-NEXT:    mov h15, v2.h[1]1403; CHECK-GI-NEXT:    mov h8, v2.h[2]1404; CHECK-GI-NEXT:    mov h9, v2.h[3]1405; CHECK-GI-NEXT:    mov h10, v2.h[4]1406; CHECK-GI-NEXT:    mov h11, v2.h[5]1407; CHECK-GI-NEXT:    str h1, [sp, #272] // 2-byte Spill1408; CHECK-GI-NEXT:    mov h1, v0.h[5]1409; CHECK-GI-NEXT:    str h1, [sp, #240] // 2-byte Spill1410; CHECK-GI-NEXT:    mov h1, v0.h[6]1411; CHECK-GI-NEXT:    str h1, [sp, #176] // 2-byte Spill1412; CHECK-GI-NEXT:    mov h1, v0.h[7]1413; CHECK-GI-NEXT:    fcvt s0, h01414; CHECK-GI-NEXT:    str h1, [sp, #144] // 2-byte Spill1415; CHECK-GI-NEXT:    mov h1, v4.h[1]1416; CHECK-GI-NEXT:    str h1, [sp, #48] // 2-byte Spill1417; CHECK-GI-NEXT:    mov h1, v4.h[2]1418; CHECK-GI-NEXT:    str h1, [sp, #80] // 2-byte Spill1419; CHECK-GI-NEXT:    mov h1, v4.h[3]1420; CHECK-GI-NEXT:    str h1, [sp, #128] // 2-byte Spill1421; CHECK-GI-NEXT:    mov h1, v4.h[4]1422; CHECK-GI-NEXT:    str h1, [sp, #192] // 2-byte Spill1423; CHECK-GI-NEXT:    mov h1, v4.h[5]1424; CHECK-GI-NEXT:    str h1, [sp, #256] // 2-byte Spill1425; CHECK-GI-NEXT:    mov h1, v4.h[6]1426; CHECK-GI-NEXT:    str h1, [sp, #336] // 2-byte Spill1427; CHECK-GI-NEXT:    mov h1, v4.h[7]1428; CHECK-GI-NEXT:    str h1, [sp, #352] // 2-byte Spill1429; CHECK-GI-NEXT:    mov h1, v2.h[6]1430; CHECK-GI-NEXT:    str h1, [sp, #12] // 2-byte Spill1431; CHECK-GI-NEXT:    mov h1, v2.h[7]1432; CHECK-GI-NEXT:    str h1, [sp, #14] // 2-byte Spill1433; CHECK-GI-NEXT:    mov h1, v3.h[1]1434; CHECK-GI-NEXT:    str h1, [sp, #44] // 2-byte Spill1435; CHECK-GI-NEXT:    mov h1, v3.h[2]1436; CHECK-GI-NEXT:    str h1, [sp, #46] // 2-byte Spill1437; CHECK-GI-NEXT:    mov h1, v3.h[3]1438; CHECK-GI-NEXT:    str h1, [sp, #78] // 2-byte Spill1439; CHECK-GI-NEXT:    mov h1, v3.h[4]1440; CHECK-GI-NEXT:    str h1, [sp, #110] // 2-byte Spill1441; CHECK-GI-NEXT:    mov h1, v3.h[5]1442; CHECK-GI-NEXT:    str h1, [sp, #174] // 2-byte Spill1443; CHECK-GI-NEXT:    mov h1, v3.h[6]1444; CHECK-GI-NEXT:    str h1, [sp, #238] // 2-byte Spill1445; CHECK-GI-NEXT:    mov h1, v3.h[7]1446; CHECK-GI-NEXT:    str h1, [sp, #302] // 2-byte Spill1447; CHECK-GI-NEXT:    fcvt s1, h21448; CHECK-GI-NEXT:    bl powf1449; CHECK-GI-NEXT:    fcvt s2, h121450; CHECK-GI-NEXT:    fcvt h0, s01451; CHECK-GI-NEXT:    fcvt s1, h151452; CHECK-GI-NEXT:    str q0, [sp, #304] // 16-byte Spill1453; CHECK-GI-NEXT:    fmov s0, s21454; CHECK-GI-NEXT:    bl powf1455; CHECK-GI-NEXT:    fcvt s2, h131456; CHECK-GI-NEXT:    fcvt h0, s01457; CHECK-GI-NEXT:    fcvt s1, h81458; CHECK-GI-NEXT:    str q0, [sp, #208] // 16-byte Spill1459; CHECK-GI-NEXT:    fmov s0, s21460; CHECK-GI-NEXT:    bl powf1461; CHECK-GI-NEXT:    fcvt s2, h141462; CHECK-GI-NEXT:    fcvt h0, s01463; CHECK-GI-NEXT:    fcvt s1, h91464; CHECK-GI-NEXT:    str q0, [sp, #320] // 16-byte Spill1465; CHECK-GI-NEXT:    fmov s0, s21466; CHECK-GI-NEXT:    bl powf1467; CHECK-GI-NEXT:    ldr h1, [sp, #272] // 2-byte Reload1468; CHECK-GI-NEXT:    fcvt h0, s01469; CHECK-GI-NEXT:    fcvt s2, h11470; CHECK-GI-NEXT:    fcvt s1, h101471; CHECK-GI-NEXT:    str q0, [sp, #272] // 16-byte Spill1472; CHECK-GI-NEXT:    fmov s0, s21473; CHECK-GI-NEXT:    bl powf1474; CHECK-GI-NEXT:    ldr h1, [sp, #240] // 2-byte Reload1475; CHECK-GI-NEXT:    fcvt h0, s01476; CHECK-GI-NEXT:    fcvt s2, h11477; CHECK-GI-NEXT:    fcvt s1, h111478; CHECK-GI-NEXT:    str q0, [sp, #240] // 16-byte Spill1479; CHECK-GI-NEXT:    fmov s0, s21480; CHECK-GI-NEXT:    bl powf1481; CHECK-GI-NEXT:    ldr h1, [sp, #176] // 2-byte Reload1482; CHECK-GI-NEXT:    fcvt h0, s01483; CHECK-GI-NEXT:    fcvt s2, h11484; CHECK-GI-NEXT:    str q0, [sp, #176] // 16-byte Spill1485; CHECK-GI-NEXT:    ldr h0, [sp, #12] // 2-byte Reload1486; CHECK-GI-NEXT:    fcvt s1, h01487; CHECK-GI-NEXT:    fmov s0, s21488; CHECK-GI-NEXT:    bl powf1489; CHECK-GI-NEXT:    ldr h1, [sp, #144] // 2-byte Reload1490; CHECK-GI-NEXT:    fcvt h0, s01491; CHECK-GI-NEXT:    fcvt s2, h11492; CHECK-GI-NEXT:    str q0, [sp, #144] // 16-byte Spill1493; CHECK-GI-NEXT:    ldr h0, [sp, #14] // 2-byte Reload1494; CHECK-GI-NEXT:    fcvt s1, h01495; CHECK-GI-NEXT:    fmov s0, s21496; CHECK-GI-NEXT:    bl powf1497; CHECK-GI-NEXT:    ldr q1, [sp, #112] // 16-byte Reload1498; CHECK-GI-NEXT:    fcvt h0, s01499; CHECK-GI-NEXT:    fcvt s2, h11500; CHECK-GI-NEXT:    str q0, [sp, #112] // 16-byte Spill1501; CHECK-GI-NEXT:    ldr q0, [sp, #16] // 16-byte Reload1502; CHECK-GI-NEXT:    fcvt s1, h01503; CHECK-GI-NEXT:    fmov s0, s21504; CHECK-GI-NEXT:    bl powf1505; CHECK-GI-NEXT:    ldr h1, [sp, #48] // 2-byte Reload1506; CHECK-GI-NEXT:    fcvt h0, s01507; CHECK-GI-NEXT:    fcvt s2, h11508; CHECK-GI-NEXT:    str q0, [sp, #48] // 16-byte Spill1509; CHECK-GI-NEXT:    ldr h0, [sp, #44] // 2-byte Reload1510; CHECK-GI-NEXT:    fcvt s1, h01511; CHECK-GI-NEXT:    fmov s0, s21512; CHECK-GI-NEXT:    bl powf1513; CHECK-GI-NEXT:    ldr h1, [sp, #80] // 2-byte Reload1514; CHECK-GI-NEXT:    fcvt h0, s01515; CHECK-GI-NEXT:    fcvt s2, h11516; CHECK-GI-NEXT:    str q0, [sp, #80] // 16-byte Spill1517; CHECK-GI-NEXT:    ldr h0, [sp, #46] // 2-byte Reload1518; CHECK-GI-NEXT:    fcvt s1, h01519; CHECK-GI-NEXT:    fmov s0, s21520; CHECK-GI-NEXT:    bl powf1521; CHECK-GI-NEXT:    ldr h1, [sp, #128] // 2-byte Reload1522; CHECK-GI-NEXT:    fcvt h0, s01523; CHECK-GI-NEXT:    fcvt s2, h11524; CHECK-GI-NEXT:    str q0, [sp, #128] // 16-byte Spill1525; CHECK-GI-NEXT:    ldr h0, [sp, #78] // 2-byte Reload1526; CHECK-GI-NEXT:    fcvt s1, h01527; CHECK-GI-NEXT:    fmov s0, s21528; CHECK-GI-NEXT:    bl powf1529; CHECK-GI-NEXT:    ldr h1, [sp, #192] // 2-byte Reload1530; CHECK-GI-NEXT:    fcvt h0, s01531; CHECK-GI-NEXT:    fcvt s2, h11532; CHECK-GI-NEXT:    str q0, [sp, #192] // 16-byte Spill1533; CHECK-GI-NEXT:    ldr h0, [sp, #110] // 2-byte Reload1534; CHECK-GI-NEXT:    fcvt s1, h01535; CHECK-GI-NEXT:    fmov s0, s21536; CHECK-GI-NEXT:    bl powf1537; CHECK-GI-NEXT:    ldr h1, [sp, #256] // 2-byte Reload1538; CHECK-GI-NEXT:    fcvt h0, s01539; CHECK-GI-NEXT:    fcvt s2, h11540; CHECK-GI-NEXT:    str q0, [sp, #256] // 16-byte Spill1541; CHECK-GI-NEXT:    ldr h0, [sp, #174] // 2-byte Reload1542; CHECK-GI-NEXT:    fcvt s1, h01543; CHECK-GI-NEXT:    fmov s0, s21544; CHECK-GI-NEXT:    bl powf1545; CHECK-GI-NEXT:    ldr h1, [sp, #336] // 2-byte Reload1546; CHECK-GI-NEXT:    fcvt h0, s01547; CHECK-GI-NEXT:    fcvt s2, h11548; CHECK-GI-NEXT:    str q0, [sp, #336] // 16-byte Spill1549; CHECK-GI-NEXT:    ldr h0, [sp, #238] // 2-byte Reload1550; CHECK-GI-NEXT:    fcvt s1, h01551; CHECK-GI-NEXT:    fmov s0, s21552; CHECK-GI-NEXT:    bl powf1553; CHECK-GI-NEXT:    ldr h1, [sp, #352] // 2-byte Reload1554; CHECK-GI-NEXT:    fcvt h0, s01555; CHECK-GI-NEXT:    fcvt s2, h11556; CHECK-GI-NEXT:    str q0, [sp, #352] // 16-byte Spill1557; CHECK-GI-NEXT:    ldr h0, [sp, #302] // 2-byte Reload1558; CHECK-GI-NEXT:    fcvt s1, h01559; CHECK-GI-NEXT:    fmov s0, s21560; CHECK-GI-NEXT:    bl powf1561; CHECK-GI-NEXT:    ldr q3, [sp, #304] // 16-byte Reload1562; CHECK-GI-NEXT:    ldr q2, [sp, #208] // 16-byte Reload1563; CHECK-GI-NEXT:    ldr q1, [sp, #48] // 16-byte Reload1564; CHECK-GI-NEXT:    ldp x29, x30, [sp, #432] // 16-byte Folded Reload1565; CHECK-GI-NEXT:    mov v3.h[1], v2.h[0]1566; CHECK-GI-NEXT:    ldr q2, [sp, #80] // 16-byte Reload1567; CHECK-GI-NEXT:    ldp d9, d8, [sp, #416] // 16-byte Folded Reload1568; CHECK-GI-NEXT:    mov v1.h[1], v2.h[0]1569; CHECK-GI-NEXT:    ldr q2, [sp, #320] // 16-byte Reload1570; CHECK-GI-NEXT:    ldp d11, d10, [sp, #400] // 16-byte Folded Reload1571; CHECK-GI-NEXT:    mov v3.h[2], v2.h[0]1572; CHECK-GI-NEXT:    ldr q2, [sp, #128] // 16-byte Reload1573; CHECK-GI-NEXT:    ldp d13, d12, [sp, #384] // 16-byte Folded Reload1574; CHECK-GI-NEXT:    mov v1.h[2], v2.h[0]1575; CHECK-GI-NEXT:    ldr q2, [sp, #272] // 16-byte Reload1576; CHECK-GI-NEXT:    ldp d15, d14, [sp, #368] // 16-byte Folded Reload1577; CHECK-GI-NEXT:    mov v3.h[3], v2.h[0]1578; CHECK-GI-NEXT:    ldr q2, [sp, #192] // 16-byte Reload1579; CHECK-GI-NEXT:    mov v1.h[3], v2.h[0]1580; CHECK-GI-NEXT:    ldp q4, q2, [sp, #240] // 32-byte Folded Reload1581; CHECK-GI-NEXT:    mov v3.h[4], v4.h[0]1582; CHECK-GI-NEXT:    mov v1.h[4], v2.h[0]1583; CHECK-GI-NEXT:    ldr q2, [sp, #176] // 16-byte Reload1584; CHECK-GI-NEXT:    mov v3.h[5], v2.h[0]1585; CHECK-GI-NEXT:    ldr q2, [sp, #336] // 16-byte Reload1586; CHECK-GI-NEXT:    mov v1.h[5], v2.h[0]1587; CHECK-GI-NEXT:    fcvt h2, s01588; CHECK-GI-NEXT:    ldr q0, [sp, #144] // 16-byte Reload1589; CHECK-GI-NEXT:    mov v3.h[6], v0.h[0]1590; CHECK-GI-NEXT:    ldr q0, [sp, #352] // 16-byte Reload1591; CHECK-GI-NEXT:    mov v1.h[6], v0.h[0]1592; CHECK-GI-NEXT:    ldr q0, [sp, #112] // 16-byte Reload1593; CHECK-GI-NEXT:    mov v3.h[7], v0.h[0]1594; CHECK-GI-NEXT:    mov v1.h[7], v2.h[0]1595; CHECK-GI-NEXT:    mov v0.16b, v3.16b1596; CHECK-GI-NEXT:    add sp, sp, #4481597; CHECK-GI-NEXT:    ret1598entry:1599  %c = call <16 x half> @llvm.pow.v16f16(<16 x half> %a, <16 x half> %b)1600  ret <16 x half> %c1601}1602 1603define <2 x fp128> @pow_v2fp128(<2 x fp128> %a, <2 x fp128> %b) {1604; CHECK-SD-LABEL: pow_v2fp128:1605; CHECK-SD:       // %bb.0: // %entry1606; CHECK-SD-NEXT:    sub sp, sp, #641607; CHECK-SD-NEXT:    str x30, [sp, #48] // 8-byte Spill1608; CHECK-SD-NEXT:    .cfi_def_cfa_offset 641609; CHECK-SD-NEXT:    .cfi_offset w30, -161610; CHECK-SD-NEXT:    stp q1, q3, [sp, #16] // 32-byte Folded Spill1611; CHECK-SD-NEXT:    mov v1.16b, v2.16b1612; CHECK-SD-NEXT:    bl powl1613; CHECK-SD-NEXT:    str q0, [sp] // 16-byte Spill1614; CHECK-SD-NEXT:    ldp q0, q1, [sp, #16] // 32-byte Folded Reload1615; CHECK-SD-NEXT:    bl powl1616; CHECK-SD-NEXT:    mov v1.16b, v0.16b1617; CHECK-SD-NEXT:    ldr q0, [sp] // 16-byte Reload1618; CHECK-SD-NEXT:    ldr x30, [sp, #48] // 8-byte Reload1619; CHECK-SD-NEXT:    add sp, sp, #641620; CHECK-SD-NEXT:    ret1621;1622; CHECK-GI-LABEL: pow_v2fp128:1623; CHECK-GI:       // %bb.0: // %entry1624; CHECK-GI-NEXT:    sub sp, sp, #641625; CHECK-GI-NEXT:    str x30, [sp, #48] // 8-byte Spill1626; CHECK-GI-NEXT:    .cfi_def_cfa_offset 641627; CHECK-GI-NEXT:    .cfi_offset w30, -161628; CHECK-GI-NEXT:    stp q3, q1, [sp, #16] // 32-byte Folded Spill1629; CHECK-GI-NEXT:    mov v1.16b, v2.16b1630; CHECK-GI-NEXT:    bl powl1631; CHECK-GI-NEXT:    str q0, [sp] // 16-byte Spill1632; CHECK-GI-NEXT:    ldp q1, q0, [sp, #16] // 32-byte Folded Reload1633; CHECK-GI-NEXT:    bl powl1634; CHECK-GI-NEXT:    mov v1.16b, v0.16b1635; CHECK-GI-NEXT:    ldr q0, [sp] // 16-byte Reload1636; CHECK-GI-NEXT:    ldr x30, [sp, #48] // 8-byte Reload1637; CHECK-GI-NEXT:    add sp, sp, #641638; CHECK-GI-NEXT:    ret1639entry:1640  %c = call <2 x fp128> @llvm.pow.v2fp128(<2 x fp128> %a, <2 x fp128> %b)1641  ret <2 x fp128> %c1642}1643 1644declare <16 x half> @llvm.pow.v16f16(<16 x half>, <16 x half>)1645declare <2 x double> @llvm.pow.v2f64(<2 x double>, <2 x double>)1646declare <2 x float> @llvm.pow.v2f32(<2 x float>, <2 x float>)1647declare <2 x fp128> @llvm.pow.v2fp128(<2 x fp128>, <2 x fp128>)1648declare <3 x double> @llvm.pow.v3f64(<3 x double>, <3 x double>)1649declare <3 x float> @llvm.pow.v3f32(<3 x float>, <3 x float>)1650declare <4 x double> @llvm.pow.v4f64(<4 x double>, <4 x double>)1651declare <4 x float> @llvm.pow.v4f32(<4 x float>, <4 x float>)1652declare <4 x half> @llvm.pow.v4f16(<4 x half>, <4 x half>)1653declare <7 x half> @llvm.pow.v7f16(<7 x half>, <7 x half>)1654declare <8 x float> @llvm.pow.v8f32(<8 x float>, <8 x float>)1655declare <8 x half> @llvm.pow.v8f16(<8 x half>, <8 x half>)1656declare double @llvm.pow.f64(double, double)1657declare float @llvm.pow.f32(float, float)1658declare fp128 @llvm.pow.fp128(fp128, fp128)1659declare half @llvm.pow.f16(half, half)1660